FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#21
|
||||
|
||||
Hola.
Para aportar mas datos, usando esta tabla: hice unas pruebas con TIBDataset, variando en la cláusula SELECT: CP_SMALLINT, CP_INTEGER, CP_BIGINT, CP_FLOAT, P_DOUBLEPRECISION, CP_NUMERIC y CP_DECIMAL. Con el código: En todos los casos obtuve el error: "Tipo de datos SQL desconocido (32766)", sin siquiera asignar valor al parámetro. Lo que me induce a pensar que esta forma de llamada es incorrecta. Con el código: Sin asignar valor al parámetro no arroja error en ningún caso. Asignando el valor que nos dió gluglu con cualquier tipo de entero, me dá el mismo error de overflow que a él. Con el código: No obtuve error en ningún caso, asignando o no, valores al parámetro CLAVE. Saludos.
__________________
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 12:52:05. |
#22
|
||||
|
||||
A ver, me estoy liando, en todo esto que se está tratando, ¿qué es :clave ?, si es un parámetro, ¿cómo se está usando?
|
#23
|
||||
|
||||
Eso entendí yo Antonio, al menos es el problema que comenta gluglu en el primer post.
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#24
|
||||
|
||||
Hola.
Cita:
Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). |
#25
|
||||
|
||||
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: y esta: 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:
__________________
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. |
#26
|
||||
|
||||
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 ! |
#27
|
||||
|
||||
Supongo que con "when" ocurrirá igual que con "coalesce"
|
#28
|
||||
|
||||
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 ! |
#29
|
||||
|
||||
Perdón, no había leído el anterior mensaje explicándolo
|
#30
|
|||
|
|||
Hola...
No se ustedes, pero se me hace raro una consulta que diga:
que es lo que en realidad está haciendo [b]gluglu[/u]. Lo que siempre se hace es algo como:
Yo creo que deberías verificar de nuevo lo que estás tratando de realizar y modificarlo de acuerdo a. Saludos... |
#31
|
||||
|
||||
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 ! |
#32
|
||||
|
||||
... añado ...
Creo que anteriormente ya lo puse. No sólo se trata de comprobar si el parámetro es Null o no, sino que dependiendo de si es Null o no, existe un 'and' después. Esta es la consulta (muy cortita) :
Después de crear mediante un SP una tabla temporal, utilizo este Select en un informe de FastReport para dependiendo de si el valor de BOOKINGNO del DataSet Maestro es Null o no, busco el Comentario (COMMENTS) que es del tipo Blob en una u otra tabla adicional, ya que el registro de la tabla temporal puede ser una Reserva de una Habitación o un Bloqueo de una Habitación, pero en el listado se muestra el Número de Habitación en cualquier caso, y dependiendo de ello, el comentario que aparece en el informe de Fast Report será el comentario de la Reserva o el comentario asociado al Bloqueo. En la tabla temporal tengo dos campos (además de otros muchos), que me sirven de referencia 'Maestro-Detalle', tanto BOOKINGNO como INTERNALNO. La Banda Detalle del Fast Report quiero que sea única, como ya dije, dependiendo de si es una reserva o un bloqueo de un número de habitación concreto, quiero que aparezca el comentario bien de la reserva, bien del bloqueo. Espero que este comentario adicional sirve de aclaración para lo que pretendía conseguir. Gracias de nuevo a todos !
__________________
Piensa siempre en positivo ! |
#33
|
|||
|
|||
Hola...
Si el valor que estás pasando al DataSet viene de otro DataSet, entonces puedes verificarlo mediante un if...then:
A lo que voy es que hacer algo como :CLAVE is NULL como condición en una consulta no tiene mucho sentido (al menos de la forma como estás planteando tu ejemplo), esto claro, a mi forma de ver. Saludos... |
#34
|
||||
|
||||
Cita:
El código que pones es código Delphi y lo tengo que ejecutar en mi aplicación. Pero mi problema surge al querer enlazar mediante 'Maestro-Detalle' dos DataSets diferentes, en este caso en tiempo de diseño.
__________________
Piensa siempre en positivo ! |
#35
|
||||
|
||||
Hola.
Cita:
Se utiliza muchísimo para consultas del tipo : select * from CLIENTES where (:APELLIDOS is null or APELLIDOS = :APELLIDOS) and (:TELEFONO is null or TELEFONO = :TELEFONO) Es decir, diseñamos una consulta a un tabla por varios posibles parámetros, pero podemos dejar el parámetro a Null si en ese momento el usuario no quiere filtrar por él (como cuando tienes una pantalla con varias opciones de búsqueda, y el usuario solo rellena una parte). Creo haber leído que en el último Firebird 2.5 el motor de Firebird ya es capaz de reconocer el tipo de los parámetros en esta estructura, pero en las versiones anteriores es cuando hay que hacer un CAST con el tipo. Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). Última edición por guillotmarc fecha: 14-06-2011 a las 17:14:37. |
#36
|
|||
|
|||
Cita:
Y bueno, la forma en como gluglu puso su ejemplo inicial, hizo que yo expusiera mis argumentos anteriores. Y aún así, acabo de hacer una prueba con una tabla de un sistema que estoy haciendo y dos consultas SQL:
A ambas consultas les pasé como valor del parámetro un valor x y NULL y el resultado en ambas fue exactamente el mismo, o sea, que según esto, el hacer :id is not null (o :id is null) no afectó en el resultado. Saludos... |
#37
|
||||
|
||||
Cita:
¿ Aún tienes alguna duda concreta sobre como opera con los parámetros Firebird, cuando no puede discernir su tipo (y es necesario especificarlo en un CAST) y para qué es útil poner construcciones :PARAM IS NULL dentro del filtro de una consulta ?.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). Última edición por guillotmarc fecha: 14-06-2011 a las 18:08:08. |
#38
|
|||
|
|||
Hola...
A lo que voy es que no veo muy lógico hacer algo como parametro is not null dentro de la consulta, pero bueno, cada quien tiene sus formas de hacer las cosas. Saludos... |
#39
|
||||
|
||||
Cita:
Como te comentaba antes, es la forma estándar de escribir consultas parametrizadas (que no se construyen dinámicamente, no me gustan las consultas construidas dinámicamente, son una fuente de problemas que solo se pueden encontrar en tiempo de ejecución) en las que quieres que se evalúen distintos parámetros en función de los valores rellenados por el usuario. ¿ Se te ocurre otra forma de diseñar una consulta parametrizada para listar clientes, cuando el usuario puede especificar su nombre, su teléfono, o ambos a la vez ?.
Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). |
#40
|
|||
|
|||
Hola...
Cita:
Así como presentas tu ejemplo ya tiene más sentido el uso que indicas, pero de la forma en que lo presentó gluglu (donde solo usa un parámetro) es donde no le vi mucho sentido. Saludos... |
|
|
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 |
|