FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Nulos y cadenas vacias en Firebird y Delphi
Hola compañeros,
Tengo un problema con los nulos y las cadenas vacias en delphi 2009 y firebird 2.5. Segun tengo entendido un valor nulo es distinto que una cadena vacia. Lo que me desconcierta es el comportamiento de los componentes: Se graba una cosa u otra depende del componente que utilizo. Supongamos una tabla con:
Utilizando un Tibsql: Edit1.Text := 'a'; Edit2.Text := 'b'; Edit3.Text := ''; .... insert into TEST (1, Edit1.Text, Edit2.Text, Edit3.Text) se graba 1, 'a', 'b', '' (cadena vacia) con lo cual una busqueda select * from TEST where CAMPO1='a' and CAMPO2='b' and CAMPO3='' encuentra el registro. Sin embargo si utilizo TibTable, TIBDataset o un TClientDataset con un TDataSetProvider al hacer Dataset.append; Dataset.Fieldbyname('CAMPO1').asstring := Edit1.Text; Dataset.Fieldbyname('CAMPO2').asstring := Edit2.Text; Dataset.Fieldbyname('CAMPO3').asstring := Edit3.Text; Dataset.post; se graba 1, 'a', 'b', NULL Lo que implica que esta convirtiendo la cadena vacia '' en NULL. ¿No hay forma de insertar una cadena vacia en un campo utilizando estos componentes? Entonces la busqueda select * from TEST where CAMPO1='a' and CAMPO2='b' and CAMPO3='' no lo encuentra. El no saber si va a haber cadenas vacias o nulos me obliga a escribir mucho más código al hacer busquedas: Lo que seria: hay que ponerlo como La otra opción es forzar siempre a nulos al grabar pero tambien tengo que escribir más código: Utilizando un Tibsql: if (Edit1.text <> '') and ( Edit2.text <> '') and (Edit3.Text = '') then .... insert into TEST (1, Edit1.Text, Edit2.Text, null) if (Edit1.text <> '') and ( Edit2.text = '') and (Edit3.Text = '') then .... insert into TEST (1, Edit1.Text, null, null) if (Edit1.text = '') and ( Edit2.text = '') and (Edit3.Text = '') then .... insert into TEST (1, null, null, null) ¿Hay alguna otra forma de solucionarlo? Saludos y gracias de antemano Quim Herrera |
#2
|
||||
|
||||
entonces pregunta en FB que si llega un '' ponga un NULL en esa variable de entrada y ya.
__________________
mas confundido que Garavito el día del Niño. |
#3
|
||||
|
||||
Tal vez con un coalesce te puedas mover mejor a la hora del where, eso si, de esta forma no habrá distinción entre null y espacios vacios.
__________________
"Como pasa el tiempo..... ayer se escribe sin H y hoy con H" |
#5
|
||||
|
||||
Hola Quim Herrera.
El comportamiento del TIBDataSet y TIBQuery está reportado aquí, y aquí la resolución... Un saludo.
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#6
|
||||
|
||||
Cita:
__________________
mas confundido que Garavito el día del Niño. |
#7
|
||||
|
||||
sorry, no me percate de ese detalle.. pero la idea es la misma
__________________
Dulce Regalo que Satanas manda para mi..... |
#8
|
||||
|
||||
Cabe anotar que IsNull es diferente que el Coalesce, teniendo este ultimo más funcionalidad, por ejemplo con el coalesce yo puedo evaluar mas de un campo o variable, algo así como
__________________
"Como pasa el tiempo..... ayer se escribe sin H y hoy con H" |
#9
|
||||
|
||||
que buen dato
__________________
mas confundido que Garavito el día del Niño. |
#10
|
|||
|
|||
Muchísimas gracias a todos.
Coalesce(campo1, '') resuelve perfectamente mi problema. Un abrazo. Quim Herrera |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Etiquetas Vacias en XML | BuenaOnda | Varios | 1 | 29-10-2010 23:54:23 |
valores nulos en delphi | thelibmx | Varios | 5 | 22-06-2007 01:37:16 |
Problema con fechas vacias | URBANO | SQL | 2 | 31-01-2006 12:42:42 |
Como concateno cadenas en Firebird?¿? | burasu | Firebird e Interbase | 6 | 21-07-2004 13:38:29 |
problemas con celdas vacias | davidgaldo | Conexión con bases de datos | 4 | 28-05-2004 10:33:18 |
|