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.

Instruccion WHERE '0' en Xailer 7

Foro público de Xailer en español
Responder
Avatar de Usuario
gabo1
Mensajes: 127
Registrado: Lun Oct 13, 2014 9:42 am

Instruccion WHERE '0' en Xailer 7

Mensaje por gabo1 »

Hola Team Xailer
Si usa una instrucción en un TSQLQuery del tipo

Código: Seleccionar todo

SELECT * FROM mesas_items WHERE '0' ORDER BY id_fila
Todos los campos se graba un valor NULL, por lo tanto en un Browse no se visualizan los registros
hasta la version 6.2 funciona todo OK
Saludos!
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5705
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Re: Instruccion WHERE '0' en Xailer 7

Mensaje por jfgimenez »

Hola,

cuando usas un WHERE '0' (que es lo mismo que WHERE false) lo que obtienes es un dataset completamente vacio, sin registros, y por tanto tampoco hay NULLs. Y eso era así también en versiones anteriores.

Por favor, pon exactamente el código que estás usando para comprobar qué estás haciendo y en que falla.
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
Avatar de Usuario
gabo1
Mensajes: 127
Registrado: Lun Oct 13, 2014 9:42 am

Re: Instruccion WHERE '0' en Xailer 7

Mensaje por gabo1 »

Hola Jose gracias por responder

Código: Seleccionar todo

  WITH OBJECT ::oSQLComandas
       :oDataSource:= AppData:oMySQLDS
       :cSelect:= "SELECT * FROM mesas_items WHERE '0' ORDER BY id_fila"
       :lOpen:= .T.
       IF ! :lOpen
          MsgStopOG( "NO ES POSIBLE ABRIR EL QUERY DE COMANDAS", "Error de Conexión..")
          RETURN NIL
       ENDIF
  END WITH
// Ese codigo me crea un dataset vacio, para despues agregar registros al dataset
// Puedo agregar editar y borrar registros en versiones anteriores con la version 7 pasa lo siguiente
oSQLComandas:AddNew()
... // Aqui es donde todos los campos registran un valor NULL, no hay ningun mensaje de error cLastError y  addnew como update regresan valor .T.,
... // la tabla tiene un campo incremental y ese valor si se ve correctamente (es el unico valor que se puede ver los demas son valores NIL )
oSQLComandas:UpDate()  
Exactamente el mismo codigo sin tocar nada hasta la version 6.2 graba correctamente, edito y borra registros del dataset

Cambie el cSelect por una consulta diferente

Código: Seleccionar todo

  :cSelect:= "SELECT * FROM mesas_items WHERE id_mesa='03' ORDER BY id_fila"  
  // con este select si funciona se graba bien los registros, 
  // AddNew() y UpDate() agrega correctamente los registros y tambien puedo borrarlos

cambie tambien por un TMemDataSet y tambien se graba correctamente los registros
Con estas pruebas compruebo que el problema es probablemente la clausula WHERE '0'
Saludos!
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5705
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Re: Instruccion WHERE '0' en Xailer 7

Mensaje por jfgimenez »

Gabo,

ya he entendido el problema. En realidad, el verdadero fallo era antes, cuando Xailer grababa valores en los campos de esa forma. Ahora es cuando está funcionando correctamente, y me explico: si no asignas ningún valor a un campo cuando haces un AddNew(), entonces ese campo seguirá teniendo un valor NIL, de forma que cuando se grabe en la BD con el Update(), sea la propia BD la que asigne el valor que tengas definido por defecto.

Dicho de otra forma, cuando a un campo no se asgina ningún valor, ni siquiera aparece en la sentencia INSERT que genera Xailer internamente, para que se guarde expresamente un NULL o bien el valor por defecto que tengas definido en la tabla.

El problema antes, era que sí se estaba asignando un valor por defecto al estilo de las DBF, y eso impedía que se guardaran valores NULL. Pero lo correcto es lo de ahora.

Para que lo puedas ver más claro, prueba a ejecutar directamente la siguiente sentencia en la BD:

Código: Seleccionar todo

INSERT INTO mesas_items(id_fila) VALUES(NULL);
Verás que si id_fila es un autoincremental, entonces le asignará el número que le corresponda, pero todos los demás campos tendrán un valor NULL o el valor por defecto que tengas declarado en la tabla.

En resumen, lo más correcto y la mejor solución siempre es poner los valores por defecto que quieras al crear la tabla.
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9246
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Re: Instruccion WHERE '0' en Xailer 7

Mensaje por ignacio »

Buenos días,

Por favor, échele un vistazo a lo nuevo.htm:

https://www.xailer.com/wp/lo-nuevo/

Saludos
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Avatar de Usuario
gabo1
Mensajes: 127
Registrado: Lun Oct 13, 2014 9:42 am

Re: Instruccion WHERE '0' en Xailer 7

Mensaje por gabo1 »

Jose, Ignacio
Entendido, gracias..
Saludos!
Responder