In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

Campo Fecha = Null en MariaSQL

Foro de Xailer profesional en español
Responder
avitalini
Mensajes: 141
Registrado: Mié Ene 07, 2015 6:31 pm

Campo Fecha = Null en MariaSQL

Mensaje por avitalini »

Al editar y guardar un registro de un campo fecha, en MariaSQL lo pone en Null

Agregué en onExecute un OutDebug(cSQL)

y la consulta queda así: fecha=Null

Hice la prueba con Samples\DataControls\SQLite1 editando sólo la fecha y pasa lo mismo

Esta es la consulta de reemplazo:
UPDATE CUSTOMER SET First='STEWART', Last='WOO', Street='25782 MCDONALD''S PLAZA', City='HONEOYE FALLS', Hiredate=NULL, Notes='THIS IS A TEST FOR RECORD 9' WHERE _RowId_=5

¿Qué me recomiendan hacer?
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5718
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Re: Campo Fecha = Null en MariaSQL

Mensaje por jfgimenez »

Alejandro,

las fechas vacías no se tratan igual en SQLite y en MariaDB. En SQLite, una fecha vacía tiene el valor NULL, siempre.

Pero MariaDB diferencia entre el valor NULL y una fecha vacía. Si quieres introducir una fecha vacía y que MariaDB pueda operar con ella, tienes que asignar el valor '0000-00-00'

En el caso que vayas a usar simultaneamente ambos motores SQL en tus programas, te aconsejo guardar las fechas siempre usando, o bien un dataset, o si utilizas el datasource directamente, con el método DToSql() de dicho datasource, que se encarga de tratar las fechas vacías correctamente.
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
avitalini
Mensajes: 141
Registrado: Mié Ene 07, 2015 6:31 pm

Re: Campo Fecha = Null en MariaSQL

Mensaje por avitalini »

Gracias por contestar José!

El problema se me presenta con solo editar el campo fecha del ejemplo de Xailer que menciono, no guarda el cambio, lo pone en null el campo, en lugar de poner la nueva fecha.
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9447
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Re: Campo Fecha = Null en MariaSQL

Mensaje por ignacio »

Buenos días,

¿A que ejemplo se refiere?

Sin un pequeñísimo ejemplo que muestre el problema es muy difícil de saber cual es el motivo por el cual los campos de tipo fecha no se tratan correctamente. No obstante, intente lo siguiente:

1) Cambiar el tipo de control (Xailer tiene dos controles para mostrar fechas)
2) Si es un tipo 'datetime' intente comprobar si funciona correctamente con solo 'date'
3) Compruebe en el evento TDataset:OnUPdate el valor del objeto TDatafield de la fecha

Saludos
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
avitalini
Mensajes: 141
Registrado: Mié Ene 07, 2015 6:31 pm

Re: Campo Fecha = Null en MariaSQL

Mensaje por avitalini »

Ignacio:

Esto me pasó con MariaSQL, pero revisé los ejemplos de Xailer y pasa exactamente lo mismo.

El ejemplo del que hablo es del Xailer 4.0.2 ubicado en:

C:\xailer4\Samples\DataControls\SQLite1

Lo único que modifiqué del ejemplo original es que agregué un método al evento OnExecute del DataSource para ver los Querys

Código: Seleccionar todo

METHOD SQLiteDataSource1Execute( oSender, cSql ) CLASS TForm1
	OutDebug( cSql )
RETURN Nil
Al editar cualquier registro con el botón "Edit" y hacer un cambio al campo date "HireDate" (flecha verde en el adjunto: SqLite01.png") digamos 10/09/1984 y guardar con el botón "update", no guarda la nueva fecha, lo pone en Null.
Revisando el Query de actualización dice así:

Código: Seleccionar todo

UPDATE CUSTOMER SET First='MARK', Last='LOUMAN', Street='23772 WILLOUGHBY STREET', City='OVERLAND PARK', Hiredate=NULL, Notes='THIS IS A TEST FOR RECORD 12' WHERE _RowId_=7
Donde evidentemente está dejando sin fecha el campo con la instrucción "Hiredate=NULL", en lugar de guardar la fecha correctamente, con lo consiguiente, al refrescar el registro, ya baja sin fecha (Adjunto: "SqLite02.png").

Puntos aparte son estas dos observaciones adicionales.
  1. El campo de la fecha TDBDatePicker sigue mostrando una fecha inexistente
  2. Los campos: First, Last, Street, City, y Notes no los modifiqué, ni pasé por ello (exepto el campo First, que adquere el foco cuando oprimí el botón "Edit"
Adjuntos
SqLite01.png
SqLite01.png (7.58 KiB) Visto 6689 veces
SqLite02.png
SqLite02.png (1.49 KiB) Visto 6689 veces
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9447
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Re: Campo Fecha = Null en MariaSQL

Mensaje por ignacio »

Buenos días,

Le ruego que sustituya la siguiente función en el archivo \source\Enterprise\SqliteRecords.prg:

Código: Seleccionar todo

STATIC FUNCTION ValToStr( x )

   SWITCH ValType( x )
      CASE 'C'
         x := "'" + StrSqlite( x ) + "'"
         EXIT
      CASE 'N'
         x := ToString( x )
         EXIT
      CASE 'D'
         x := IIF( Day( x ) == 0, "NULL", "'" + DToSQL( x ) + "'" )
         EXIT
      CASE 'T'
         x := IIF( Day( x ) == 0, "NULL", "'" + DTToSQL( x ) + "'" ) 
         EXIT
      CASE 'L'
         x := IIF( x, "1", "0" )
         EXIT
      OTHERWISE
         x := "NULL"
   END

RETURN x
Espero que con esta modificación le funcione.

Un saludo
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
avitalini
Mensajes: 141
Registrado: Mié Ene 07, 2015 6:31 pm

Re: Campo Fecha = Null en MariaSQL

Mensaje por avitalini »

Ok, reemplazo la función y les comento.

Gracias!
Responder