Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-05-2005
DobleSiete DobleSiete is offline
Miembro
 
Registrado: ene 2005
Posts: 32
Poder: 0
DobleSiete Va por buen camino
ZeosDBO: ZStoredProc intenta hacer un SELECT a un Procedimiento Almacenado !!!!

Hola a todos...

He estado intentando llamar a un Procedimiento Almacenado en Delphi 7, hecho en Interbase 6.5, pero cuando activo el componente ZStoredProc, obtengo este mensaje:

Código:
"SQL Error: Dynamic SQL Error code = -84. 
 procedure ZAP_MIDDATOS does not return any values. 
 Error Code: -84 non-SQL security class defined The SQL: 
 SELECT * FROM ZAP_MIDDATOS;"
Este es el procedimiento ZAP_MIDDATOS
Código SQL [-]
  SET term !! ; 
  CREATE PROCEDURE ZAP_MIDDATOS 
  AS 
  BEGIN 
    DELETE FROM MIDDATOS; 
  END !! 
  SET TERM ; !!

Zeos está intentado hacer un SELECT * FROM zap_middatos en vez de EXECUTE PROCEDURE zap_middatos, que sería lo correcto.

Muchos se preguntarán ¿por que no usas IBX?, bueno la respuesta es muy simple, el sistema va a entrar en una fase de transición, y la base de datos va a cambiar de Interbase 6.5 a PostgreSQL 8.0.

La gran pregunta ¿Como debo configurar el componente para que no haga un SELECT...? ¿o acaso es un error? ¿Debo modificar el código fuente de ZeosLib?

Cualquier consejo será útil...


PS: Estoy usuando ZeosDBO 6.1.5 stable.
__________________
"Nadie es perfecto" (Don Nadie)
Responder Con Cita
  #2  
Antiguo 24-05-2005
DobleSiete DobleSiete is offline
Miembro
 
Registrado: ene 2005
Posts: 32
Poder: 0
DobleSiete Va por buen camino
Solución: retornar variable

Ya que los componentes ZStoredProc se empeñan en hacerle SELECT a procedimiento almacenado sin retorno de valores (en vez de llamarlos con EXECUTE PROCEDURE de manera inteligente) lo mas sencillo es hacer que el procedimiento retorne una variable, pero no necesariamente con un valor, de esta manera:

Código SQL [-]
  DROP PROCEDURE zap_middatos;
  
  SET TERM !!;
  CREATE PROCEDURE zap_middatos RETURNS (x INT)
  AS
  BEGIN
    DELETE FROM middatos;
  END!!
  SET TERM ;!!

La variable x (un entero) está declarada, pero no inicializada. Por lo tanto da lo mismo llamarlo con

Código SQL [-]
EXECUTE PROCEDURE zap_middatos

que usando

Código SQL [-]
SELECT * FROM zap_middatos

Pero en un componente ZStoredProc solamente el segundo funciona, imagino que es porque no es "inteligente" y no evalua si el procedimiento devuelve o no variables (no valores).

Eso es todo...
supongo que muchos lo sabían... pero unos pocos no, así que para ellos va la explicación :-)
__________________
"Nadie es perfecto" (Don Nadie)

Última edición por DobleSiete fecha: 24-05-2005 a las 14:15:00.
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 07:35:45.


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