sábado, 29 de septiembre de 2012

Firebird tipo de datos Boolean, ¡¡¡ El vídeo !!!

Voy a intentar explicar cómo podemos definir un tipo de datos boolean,  con los valores (True, False), o en este caso (1, 0).


Dispondremos del programa SQL manager lite for InterBase and Firebird, ya que todos los procesos que vamos a ver en este post están realizadas sobre dicho programa.

Para empezar tendremos creada una base de datos, en la que vamos a introducir un nuevo domain de tipo boolean.

Para ello pulsaremos botón derecho sobre el objeto "Domain" y "New Domain"

firebird domain boolean


En la siguiente pantalla le daremos la definición del campo:
Nombre: "BOOLEAN"
Tipo: "CHAR"
Longitud: "1"


firebird domain boolean

En la pestaña "Check" le daremos el valor "VALUE IN ('0','1')", los dos posibles valores para el dominio.


firebird domain boolean
Comprobamos que en el objeto "Domains" se ha creado el tipo de dominio "BOOLEAN", bien ya estamos preparados para utilizar éste tipo de dato.
firebird domain boolean




martes, 25 de septiembre de 2012

Facturas duplicadas en Facturaplus

facturaplus
Hoy me he encontrado con un problema con el programa Facturaplus. 
Cuando he agrupado un albarán en una factura, resulta que ha duplicado la factura, junto con otra que ya existía.
He borrado las dos facturas, con el mismo  número de factura, he revisado los contadores, he vuelto a crear la factura original, la que en principio estaba bien, vuelvo a entrar en los contadores, pongo el número de factura uno más de la última factura que tengo en la aplicación y cuando vuelvo a facturar el albarán, para mi sorpresa vuelve a duplicar la misma factura que me duplicó en el proceso anterior.

Solución:

Antes de hacer nada realizar una copia de seguridad, por lo que pueda pasar.

1.- Coger el fichero huecos.dbf de la carpeta de la empresa que nos está dando el error y lo renombramos, por ejemplo huecos.bak. La carpeta vendrá a ser algo así "X:\FactuE\DBFxx", donde X es la unidad donde está instalado el Facturaplus y xx es el código de la empresa en la que tenemos el problema.

2.- Coger el fichero huecos.dbf de la carpeta .\DBF y copiarlo en la carpeta de la empresa que nos está dando el error. Facturaplus crea las carpetas con el prefijo DBF y le añade el código de la empresa, por lo tanto si estamos trabajando en la empresa 12 la carpeta será .\DBF12.

3.- Organizar ficheros.

Con esto tenemos solucionado el problema de las facturas duplicadas.

Hasta pronto.

sábado, 22 de septiembre de 2012

Validar entrada numérica en DataGridView

vb.net
Voy a explicar cómo conseguí validar, en una columna de un DataGridView en vb.net 2010, que el campo introducido sea numérico, incluyendo la coma decimal.

Aquí os dejo el código:

    '----------------------------------------------------------------------------------
    '
    '
    ' INICIO RUTINA PARA VALIDAR CAMPOS NUMÉRICOS EN DATAGRIDVIEW
    '
    '
    '----------------------------------------------------------------------------------
    Private WithEvents cellTextBox As DataGridViewTextBoxEditingControl

    Private Sub cellTextBox_KeyDown( _
        ByVal sender As Object, _
        ByVal e As System.Windows.Forms.KeyEventArgs) Handles cellTextBox.KeyDown

    End Sub

    Private Sub cellTextBox_KeyPress( _
        ByVal sender As Object, _
        ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles cellTextBox.KeyPress
        e.KeyChar = ValidarCampoNumerico(e.KeyChar, cellTextBox.Text)
    End Sub

    Private Sub cellTextBox_KeyUp( _
        ByVal sender As Object, _
        ByVal e As System.Windows.Forms.KeyEventArgs) Handles cellTextBox.KeyUp

    End Sub

    Private Sub DataGridView1_EditingControlShowing( _
                    ByVal sender As Object, _
                    ByVal e As DataGridViewEditingControlShowingEventArgs) _
                    Handles ReparacionesdetDataGridView.EditingControlShowing

        ' Este evento se producirá cuando la celda pasa a modo de edición.

        ' Referenciamos el control DataGridViewTextBoxEditingControl actual.
        '
        cellTextBox = TryCast(e.Control, DataGridViewTextBoxEditingControl)

        ' Obtenemos el estilo de la celda actual
        '
        Dim style As DataGridViewCellStyle = e.CellStyle

        ' Mientras se edita la celda, aumentaremos la fuente
        ' y rellenaremos el color de fondo de la celda actual.
        '
        With style
            .Font = New Font(style.Font.FontFamily, 10, FontStyle.Bold)
            .BackColor = Color.Beige
        End With

    End Sub
    '----------------------------------------------------------------------------------
    '
    '
    ' FIN RUTINA PARA VALIDAR CAMPOS NUMÉRICOS EN DATAGRIDVIEW
    '
    '
    '----------------------------------------------------------------------------------

El resultado será el de la imagen.

datagridview



miércoles, 19 de septiembre de 2012

Problema con Maestro-Detalle vb.net y MySql











Hoy voy a comentar un error que suele dar vb.net con la base de datos MySql en los formularios con Maestro-Detalle. El error lo da al eliminar algún registro de la tabla Maestro, grabar en la base de datos y después intentar dar de alta un nuevo registro en la misma tabla.

Vamos a intentar averiguar el porqué de este error.
Lo primero que vamos a ver es la estructura de las tablas afectadas en este error.

Tabla Detalle:

Relaciones de la tabla Detalle. Podemos observar que la relación es con la tabla "ReparacionesCab" con el campo "Id"

Tabla "ReparacionesCab". Campo "Id" Autoincremento

¿Por qué devuelve este error?
Básicamente es porque vb.net trabaja con los datos desconectados, es decir, cuando abres el formulario carga los datos de la base de datos en memoria, realiza todas las operaciones sobre la tabla en memoria y cuando le damos a grabar es cuando envía los datos a la base de datos, si la clave foránea está asignada a un valor auto numérico, cuando borramos un registro, en la base de datos se queda el hueco, este no lo volverá a utilizar MySql, pero en el DataSet de vb.net si que lo utilizará, con lo cual cuando grabamos el registro actualizará el campo auto numérico de la tabla generará el código que corresponda, dejando los huecos de los registros que borramos previamente, el detalle que tenía asignado un registro inicial, lo perderá y devolverá el error "Cannot add or update a child row: a foring key constraint fails".

¿Cómo solucionar este problema?
Aquí os dejo las sentencias SQL con sus respectivos comentarios.

-- ELIMINAR LA CLAVE FORÁNEA "FK_REPARACIONESDET_REPARACIONESCAB

ALTER TABLE `hl_20120614`.`reparacionesdet` DROP FOREIGN KEY `fk_ReparacionesDet_ReparacionesCab1` ;

-- CREAR NUEVO CAMPO CONTROLADO DESDE EL PROGRAMA "IdCab"

ALTER TABLE `hl_20120614`.`reparacionescab` ADD COLUMN `IdCab` INT NOT NULL  AFTER `Vehiculo`
, ADD UNIQUE INDEX `IdCab_UNIQUE` (`IdCab` ASC) ;

-- CREAR LA NUEVA RELACION DE LA TABLA DETALLE CON MAESTRO

ALTER TABLE `hl_20120614`.`reparacionesdet`
  ADD CONSTRAINT `fk_ReparacionesDet_Cab`
  FOREIGN KEY (`ReparacionesCab` )
  REFERENCES `hl_20120614`.`reparacionescab` (`IdCab` )
  ON DELETE NO ACTION
  ON UPDATE NO ACTION
, ADD INDEX `fk_ReparacionesDet_Cab` (`ReparacionesCab` ASC) ;


Ahora sólo queda modificar el dataset en el programa vb.net, de forma que el campo "IdCab" será autonumérico, clave única, así será el programa vb.net el que controlará las actualizaciones del campo "IdCab". Quedará de la siguiente forma:

 





Un consejo: no useis campos autonuméricos para crear las relaciones, ya que más pronto o más tarde os dará error.

Datos personales

avjsite

elxopet.blogspot.com.es

elxopet.blogspot.com.es
banner elxopet.blogspot.com.es

Muchas gracias a tod@s