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 24-05-2004
taote taote is offline
Miembro
 
Registrado: feb 2004
Posts: 23
Poder: 0
taote Va por buen camino
Question Problema con EXECUTE STATEMENT

Hola:

Recien descubiertas las EXECUTE STATEMENT las he implementado en un procedimiento almacenado. He utilizado IBExpert para implementarlas y al probarla con el Debugger todo va perfecto, pero al ejecutarla directamente me da un error:

Variable type (position 0) in EXECUTE STATEMENT 'SELECT COUNT(CODIGO) FROM DOCUMENTOS WHERE CODIGO=' INTO does not match return.

La sentencia SQL es:

Código SQL [-]
EXECUTE STATEMENT 'SELECT COUNT(' || :CAMPO || ') FROM ' || :TABLA ||' WHERE '|| :CAMPO ||'=' ||:CODIGO INTO :CANTIDAD;

No se qué puede estar pasando.

A ver si alguien puede ayudarme, gracias de antemano.
Responder Con Cita
  #2  
Antiguo 24-05-2004
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.

¿ De que tipo es :CANTIDAD ? Prueba a definirlo como BIGINT.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #3  
Antiguo 24-05-2004
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

Asegúrate de que el parámetro :CODIGO tiene algún valor, por la sentencia construida en el mensaje de error, podría ser que ese parámetro estuviese nulo.

Antes de ejecutar el EXECUTE STATEMENT, podrias poner algo como :

if (:CODIGO is null) then CODIGO = -1;

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #4  
Antiguo 24-05-2004
taote taote is offline
Miembro
 
Registrado: feb 2004
Posts: 23
Poder: 0
taote Va por buen camino
Hola.

Gracias por la respuesta, pero he probado las dos cosas y nada. De todas maneras cuando :CAMPO tiene otro valor más largo, en el mensaje de error sale cortado. Es muy raro porque en el debugger va bien, pero no si lo ejecuto directamente. ¿Acaso es por el Where? No se , quizas no está bien construida la cadena.

Responder Con Cita
  #5  
Antiguo 24-05-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Creo que el problema es que no te está concatenando el último parámetro, es decir el valor de :codigo.

probá sin concatenar el parámetro, solo para confirmar. Digamos

Código SQL [-]
EXECUTE STATEMENT 'SELECT COUNT(' || :CAMPO || ') FROM ' || :TABLA ||' WHERE '|| :CAMPO ||'= 1';

y luego hacer un cast del valor numérico (que me imagino) que recibis, convirtiendolo en un valor varchar.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #6  
Antiguo 24-05-2004
taote taote is offline
Miembro
 
Registrado: feb 2004
Posts: 23
Poder: 0
taote Va por buen camino
Uf, sigo igual. Es muy raro, es como si la parte de la cadena del EXECUTE STATEMENT que va delante del INTO estuviese limitada, porque si a la sentencia que he puesto antes la acorto, el mensaje de error ya incluye parte del código, por ejemplo:

Código:
Unsuccessful execution caused by an unavailable resource.
Variable type (position 0) in EXECUTE STATEMENT 'SELECT MAX(CODIGO) FROM DOCUMENTOS WHERE CODIGO=00' INTO does not match return.
Yo no se si es un problema de Firebird 1.5 o de IBExpert o de que, pero el caso es que voy a perder la cabeza con esto.

¿Sabe alguien si es que está limitado?. ¿Hay alguna otra manera de hacer algo parecido?

Gracias por todas las respuestas
Responder Con Cita
  #7  
Antiguo 24-05-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Cool

Lo que es limitado es la longitud de los mensajes de error... creo que el secreto está en:

Cita:
Empezado por taote
INTO does not match return
Pues parece un problema con el tipo de dato de la variable usada en la clausula INTO.

o bien por:

Cita:
Empezado por taote
caused by an unavailable resource
que parece que el problema es que la varaible no está declarada...

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #8  
Antiguo 24-05-2004
celades celades is offline
No confirmado
 
Registrado: may 2003
Ubicación: Torroella de Montgrí (Girona)
Posts: 42
Poder: 0
celades Va por buen camino
Hola

si el campo (campo) de la tabla (tabla) es de tipo varchar falrtarian las comillas

Código:
EXECUTE STATEMENT 'select COUNT(' || :CAMPO || ') FROM ' || :TABLA ||' WHERE '|| :CAMPO ||'=''' ||:CODIGO||'''' INTO :CANTIDAD;


Por cierto no se donde estan las etiquetas sql
Responder Con Cita
  #9  
Antiguo 24-05-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Cool

Cita:
Empezado por celades
Por cierto no se donde estan las etiquetas sql
Hay un mensaje al inicio de cada foro que explica algo de su uso. También hay un vínculo en mi firma a la ayuda de la etiqueta [ CODE ] que se usa exactamente igual que la [ SQL ] y [ DELPHI ].

En el editor WYSIWYG no hay ningún botón para insertarlas... debido a que esto es un "plugin" desarrollado por román y cadetill, y no una parte "estándar" del vBulletin; pero nada te impide insertarlas desde el teclado...

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #10  
Antiguo 25-05-2004
taote taote is offline
Miembro
 
Registrado: feb 2004
Posts: 23
Poder: 0
taote Va por buen camino
Thumbs up

Uf! Arreglado. Esto era para voverse loco.

El problema estaba en la declaración de CANTIDAD, pues estaba al principio definido como SMALLINT, tras el mensaje:


Cita:
Empezado por guillotmarc
¿ De que tipo es :CANTIDAD ? Prueba a definirlo como BIGINT.
lo definí como BIGINT, y tras la n-ésima prueba lo he cambiado a INTEGER, y ahora funciona perfectamente.

Gracias a todos por vuestras respuestas.
Responder Con Cita
  #11  
Antiguo 25-05-2004
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.

Es lógico que deba ser del tipo INT, tiene que ser del mismo tipo que el campo sobre el que se calcula el MAX. (Aunque propuse que probaras el BIGINT porqué di por sentado que estaba fallando con el tipo INT).

Saludos.
__________________
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


La franja horaria es GMT +2. Ahora son las 18:49:32.


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