Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-06-2011
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 26
guillotmarc Va por buen camino
Hola.

Cita:
Empezado por ecfisa Ver Mensaje
Código SQL [-]
IBDataSet1.Close;   
IBDataSet1.SelectSQL.Clear;   
IBDataSet1.SelectSQL.Add('SELECT CP_SMALLINT FROM PRUEBA');   
IBDataSet1.SelectSQL.Add('WHERE CAST(:CLAVE AS SMALLINT) IS NULL');   
...   
IBDataSet1.Open;
Esta consulta funciona perfectamente (las comparaciones con Null tienen este problema en los parámetros, el motor no sabe de que tipo es). ¿ Qué problema tienes con ella ?.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #2  
Antiguo 14-06-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola guillotmarc.

A mi no me ofrece ningún problema, el tema viene de más atrás. Esa consulta que estás mencionando, es la que le sugerí a gluglu como solución al error que le provocaba esta:
Código SQL [-]
  Select Campo1 from Tabla1
  where :Clave is Null
y esta:
Código SQL [-]
  Select Campo1 from Tabla1
  where Coalesce(:Clave, 0) = 0
cuando el valor asignado al parámetro es el que menciona en el post que inició el hilo.

Lo que no estaba en claro era el por qué. Pero ahora se aclara con tu comentario:
Cita:
(las comparaciones con Null tienen este problema en los parámetros, el motor no sabe de que tipo es)
Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 14-06-2011 a las 14:04:10.
Responder Con Cita
  #3  
Antiguo 14-06-2011
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 23
gluglu Va por buen camino
Perdón, estaba un poco liado con un asunto y me perdí un poco del hilo.

Casimiro, 'Clave' es cualquier campo que quiero pasar a otro DataSet como parámetro para una nueva búsqueda. Creo que Ecfisa me entendió correctamente.

Se trata de que quiero realizar una búsqueda con un dato que viene de otra tabla diferente (DataSet diferente). Vamos, como si fuera un Maestro-Detalle. Al detalle, le debo pasar el parámetro 'Clave' (que puede ser cualquier campo que decidamos ...) al DataSet Detalle.

Por eso creo que Ecfisa lo ha probado correctamente, creando para ello una tabla que contenga todos los diferentes de tipos de datos que en una consulta posterior pasaremos como parámetros a una nueva consulta de 'Detalle'.

El problema es que ese parámetro que vamos a pasar al 'Detalle' puede ser Null ! ... y aquí es donde aparecen todos los problemas que estamos comentando.

Delphi parece ser que, como dice guillotmarc, no se aclara con el tipo de datos que se está pasando como parámetro al 'Detalle' en caso de que sea 'Null' dicho parámetro (que en este hilo hemos llamado 'Clave'). Lanza un error de Tipo de Datos desconocido.

Es por ello, como estamos comentando, que es necesario hacer un Cast de la manera adecuada. Inicialmente, yo no probé con el Cast, sino con la función Coalesce, para que el valor, en caso de que el parámetro fuera Null, devolviera 0. Pero vuelve a dar otro error, que es por lo que abrí el hilo, en caso de que el valor del parámetro a pasar, fuera un BigInt o en mi caso particular un dato de 12 cifras declarado como Decimal(12,0).

De aquí toda la problemática del hilo !
__________________
Piensa siempre en positivo !
Responder Con Cita
  #4  
Antiguo 14-06-2011
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.678
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Supongo que con "when" ocurrirá igual que con "coalesce"

Código Delphi [-]
case when (expr1 is null) then expr2 else expr1 end
Responder Con Cita
  #5  
Antiguo 14-06-2011
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 23
gluglu Va por buen camino
El problema no es When o Coalesce, el problema es cuando hablamos de Parámetros ....

En tu consulta no has utilizado los campos como parámetros que se pasan de una consulta a otra.
__________________
Piensa siempre en positivo !
Responder Con Cita
  #6  
Antiguo 14-06-2011
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.678
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Perdón, no había leído el anterior mensaje explicándolo
Responder Con Cita
  #7  
Antiguo 14-06-2011
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 26
maeyanes Va por buen camino
Hola...

No se ustedes, pero se me hace raro una consulta que diga:

Código SQL [-]
select campo1 from tabla1
where NULL is NULL

que es lo que en realidad está haciendo [b]gluglu[/u]. Lo que siempre se hace es algo como:

Código SQL [-]
select campo1 from tabla1
where campo1 = arametro

Yo creo que deberías verificar de nuevo lo que estás tratando de realizar y modificarlo de acuerdo a.



Saludos...
__________________
Lee la Guía de Estilo antes que cualquier cosa. - Twitter
Responder Con Cita
  #8  
Antiguo 14-06-2011
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 23
gluglu Va por buen camino
No creo oportuno poner la consulta completa, ya que se trata de un SP que crea una tabla temporal y después hay que sacar datos de otras varias tablas.

La pregunta inicial podría haber sido de otra manera (es decir, el título del hilo). Pero yo pensaba que el problema venía de la función Coalesce, y por eso el título que puse al hilo.

El tema, creo yo, es tan simple como poder verificar si un parámetro que se pasa a otro DataSet es null o no, partiendo de la base, claro está, de que dicho valor puede ser null.
__________________
Piensa siempre en positivo !
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Método tem parametro do tipo sysint Paulao Varios 2 16-09-2010 21:20:15
SQL CASE y COALESCE mjjj SQL 1 17-12-2008 16:37:52
tipo de dato para pasar parametro a un store procedure Bracus SQL 6 25-03-2008 13:38:13
Parametro a todos los objetos de un tipo amadis OOP 1 06-10-2007 17:46:47
Parametro Tipo BIGINT Stored Procedure hibero Firebird e Interbase 5 13-04-2004 19:49:31


La franja horaria es GMT +2. Ahora son las 07:20:24.


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