Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-03-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Y no puedes poner todos los campos null a cadena vacía?

Código SQL [-]
update apuntes set familia='' where familia is null

Se acabó el problema.
Responder Con Cita
  #2  
Antiguo 09-03-2012
Avatar de RONPABLO
[RONPABLO] RONPABLO is offline
Miembro Premium
 
Registrado: oct 2004
Posts: 1.514
Poder: 21
RONPABLO Va por buen camino
Esto podría funcionar.
Código Delphi [-]
DMList.QApuntes.Close; DMList.QApuntes.SQL.Text := 'Select * From Apuntes Where (coalesce(familia,'') >= '+
                              QuotedStr(DesdeFamilia.Text)+') and (coalesce(familia,'') <= '+
                              QuotedStr(HastaFamilia.Text)+')'; 
DMList.QApuntes.Open;
__________________
"Como pasa el tiempo..... ayer se escribe sin H y hoy con H"
Responder Con Cita
  #3  
Antiguo 09-03-2012
Avatar de Luis M.
[Luis M.] Luis M. is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Ripollet - Barcelona
Posts: 212
Poder: 20
Luis M. Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
¿Y no puedes poner todos los campos null a cadena vacía?

Código SQL [-]
update apuntes set familia='' where familia is null

Se acabó el problema.
Hola Casimiro.
Fue lo primero que intenté.
En el OnNewRecord del Dataset intenté con ApuntesFamila.asstring := '', también ApuntesFamilia.asstring := ' ' pero si me iba al IBExpert para comprobar los datos, allí estaba ese lindo null .
También lo intenté en el BeforePost con
Código Delphi [-]
if ApuntesFamilia.isnull then ApuntesFamilia.asstring := '', etc.
pero de nada servia.
No he echo lo que me recomiendas, lo intentaré a ver que tal.
RONPABLO hoy no me da tiempo para probarlo, en cuanto lo haga te digo si funciona.
Un saludo para todos.
Responder Con Cita
  #4  
Antiguo 09-03-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por Luis M. Ver Mensaje
Hola Casimiro.
Fue lo primero que intenté.
En el OnNewRecord del Dataset intenté con ApuntesFamila.asstring := '', también ApuntesFamilia.asstring := ' ' pero si me iba al IBExpert para comprobar los datos, allí estaba ese lindo null .
También lo intenté en el BeforePost con Código Delphi [-]if ApuntesFamilia.isnull then ApuntesFamilia.asstring := '', etc.

pero de nada servia.
Pero es que no es eso lo que te he dicho

De todas formas, si quieres grabar algo tendrás que hacerlo en la BD, no dando un valor a un componente, o sea:

Código Delphi [-]
beforepost

if tabla.campo is null then
  tabla.campo := '';
Responder Con Cita
  #5  
Antiguo 10-03-2012
Avatar de Luis M.
[Luis M.] Luis M. is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Ripollet - Barcelona
Posts: 212
Poder: 20
Luis M. Va por buen camino
Hola Casimiro.
Te entendí perfectamente y creo que es la mejor solución.
Código Delphi [-]
update apuntes set familia='' where familia is null
Igualmente te comento que "ApuntesFamilia" es un campo persistente por eso le daba el valor '' si era null.
Pero no funcionaba.
Algo debía de estar trastocado porque me iba al IBExpert y le ponía manualmente un espacio en blanco al campo null y me lo volvía a dejar en null.
Ahora parece que ya funciona.
Esto de los valores null tiene su tela.
Un saludo para todos y gracias.
Responder Con Cita
  #6  
Antiguo 10-03-2012
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
Hola.

Utiliza la función COALESCE de Firebird, con la que le indicas que si el campo es nulo, entonces considere otro valor (pasado como segundo parámetro).

Es decir :

Código Delphi [-]
DMList.QApuntes.Close;
DMList.QApuntes.SQL.Text := 'Select * From Apuntes Where coalesce(familia, '''') between ' + 
                             QuotedStr(DesdeFamilia.Text) + ' and  ' + QuotedStr(HastaFamilia.Text);
DMList.QApuntes.Open;

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #7  
Antiguo 10-03-2012
Avatar de mightydragonlor
[mightydragonlor] mightydragonlor is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Medellín-Colombia
Posts: 587
Poder: 18
mightydragonlor Va por buen camino
Cita:
Empezado por guillotmarc Ver Mensaje
Hola.

Utiliza la función COALESCE de Firebird, con la que le indicas que si el campo es nulo, entonces considere otro valor (pasado como segundo parámetro).

Es decir :

Código Delphi [-]
DMList.QApuntes.Close;
DMList.QApuntes.SQL.Text := 'Select * From Apuntes Where coalesce(familia, '''') between ' + 
                             QuotedStr(DesdeFamilia.Text) + ' and  ' + QuotedStr(HastaFamilia.Text);
DMList.QApuntes.Open;

Saludos.
Claro que se puede, pero yo considero que no deba ser así, ya que usar este tipo de funciones hacen que las consultas sean mas lentas, llegando incluso a hacer table scan, así que el desempeño se ve claramente afectado, suelo usar el coalesce para la selección, pero lo trato de evitar al máximo en los where.
__________________
mas confundido que Garavito el día del Niño.
Responder Con Cita
  #8  
Antiguo 11-03-2012
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
Hola.

Cita:
Empezado por mightydragonlor Ver Mensaje
Claro que se puede, pero yo considero que no deba ser así, ya que usar este tipo de funciones hacen que las consultas sean mas lentas, llegando incluso a hacer table scan, así que el desempeño se ve claramente afectado, suelo usar el coalesce para la selección, pero lo trato de evitar al máximo en los where.
Yo no tengo ninguna norma fija, depende del caso los uso sin problemas en los WHERE. Todo depende de la consulta, registros involucrados en el filtro, etc. ...

Pero sí, tienes razón en que algunas ocasiones (al igual que con cualquier otra consulta donde no añadas índices para su optimización) puede verse muy afectado el rendimiento. Y como siempre, la solución es simplemente añadir un índice para que el motor pueda optimizar adecuadamente esa consulta, en este caso sería un índice sobre una expresión :

CREATE INDEX APUNTES_FAMILIA ON APUNTES COMPUTED BY (COALESCE(FAMILIA, ''));
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Ayuda con valores no null en FIREBIRD 2.1 Jose Roman Firebird e Interbase 11 14-01-2009 13:44:36
Consulta en campos Null| pmtzg Conexión con bases de datos 2 26-02-2008 01:38:51
Duda sobre valores null Inmi Conexión con bases de datos 2 24-09-2007 17:21:27
Problema con Valores Null crc SQL 10 20-09-2007 16:53:44
Consulta con Null T-man Firebird e Interbase 3 22-12-2004 22:30:56


La franja horaria es GMT +2. Ahora son las 05:37:48.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi