Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
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 05-06-2019
shoulder shoulder is offline
Miembro
 
Registrado: abr 2008
Posts: 441
Poder: 16
shoulder Va por buen camino
Store Procedure

Hola uso mysql/Delphi 7/ coneccion Zeolib, el procedimiento funciona directamente en la base mysql pero no logro llamarlo desde delphi lo estoy haciendo asi y me dice que en el contexto el procedimiento no retorna un resultado . no se que tengo mal fui haciendo el call come me funciona en la base y no encuentro mucha documentacion.



Código Delphi [-]


zquery1.SQL.Add('CALL ver(:codigo,@precio ,');
zquery1.SQL.Add('@articulo)');


zQuery1.ParamByName('codigo').value  :=  '111';


zquery1.open;
.


Gracias
Responder Con Cita
  #2  
Antiguo 05-06-2019
bucanero bucanero is offline
Miembro
 
Registrado: nov 2013
Ubicación: Almería, España
Posts: 208
Poder: 11
bucanero Va camino a la fama
hola a todos


El comando zquery1.open se utiliza para sentencias de tipo SELECT y en este caso estas ejecutando un procedimiento almacenado por lo que deberías de utilizar en su lugar un ZQuery1.ExecSQL;

Por otra parte, @precio y @articulo son variables que si las pasas como parámetros de entrada tienes que inicializarlas o leerlas de alguna forma con anterioridad a la llamada del procedimiento.

Si por el contrario son parámetros de salida que esperas que te devuelva el propio procedimiento, entonces tendrías que hacer posteriormente un select para mostrar esas variables

Código Delphi [-]
zquery1.SQL.Add('CALL ver(:codigo,@precio,@articulo)');
zquery1.SQL.Add('SELECT @precio,@articulo');
zQuery1.ParamByName('codigo').value  :=  '111';
zquery1.open;
Responder Con Cita
  #3  
Antiguo 05-06-2019
shoulder shoulder is offline
Miembro
 
Registrado: abr 2008
Posts: 441
Poder: 16
shoulder Va por buen camino
Store Procedure

Hola primero muchas gracias me sigue dando error, el parametro de entrada es solo codigo y los de salida los que tienen el arroba. me da error entre el cierre de la funcion Call y el select


Código Delphi [-]
zquery1.SQL.Add('CALL ver(:codigo,@precio,@articulo)'); 
zquery1.SQL.Add('SELECT @precio,@articulo');
zQuery1.ParamByName('codigo').value  :=  '111';
zquery1.open;

//intente tambien pero igual
zquery1.SQL.Add('CALL ver(:codigo)');
zquery1.SQL.Add('SELECT @precio,@articulo');
zQuery1.ParamByName('codigo').value  :=  '111';
zquery1.open;

//tambien hice

zquery1.SQL.Add('CALL ver(:codigo,@precio,@articulo');
zquery1.SQL.Add('(SELECT @precio,@articulo)'); 
zQuery1.ParamByName('codigo').value  :=  '111';
zquery1.open;

//tambien


zquery1.SQL.Add('CALL ver(:codigo)');
zQuery1.ParamByName('codigo').value  :=  '111';
zquery1.open;
zquery1.SQL.Add('SELECT @precio,@articulo');
// ......
 zquery1.open;
Responder Con Cita
  #4  
Antiguo 06-06-2019
bucanero bucanero is offline
Miembro
 
Registrado: nov 2013
Ubicación: Almería, España
Posts: 208
Poder: 11
bucanero Va camino a la fama
Post

Tienes que hacerlo sobre el mismo query en dos veces, uno para la llamada al procedimiento y otro para el propio SELECT, intentalo de esta forma, a mi así, si me funciona :

Código Delphi [-]
    ZQuery1.sql.Clear;
    zquery1.SQL.Add('CALL ver(:codigo,@precio,@articulo)');
    zQuery1.ParamByName('codigo').value := '111';
    zQuery1.ExecSQL;

    ZQuery1.sql.Clear;
    zquery1.SQL.Add('SELECT @precio,@articulo');
    zquery1.open;


Por otra parte y haciendo algunas pruebas para intentar hacerlo directo, utilice los parámetros del propio query (1 de entrada y 2 de salida).
Pero me he topado con cierto bug ya documentado de ZEOS, en cuanto al tema de los parámetros, y en particular da el error: Input parameter count is less then expected y parece venir desde la versión 6.X.
Aqui se habla del tema
http://zeoslib.sourceforge.net/viewtopic.php?t=2979
http://zeoslib.sourceforge.net/viewtopic.php?t=9357
y este sería el código que genera el error:

Código Delphi [-]
  zquery1.SQL.Add('CALL ver(:codigo, recio,:articulo)');
    ParamByName('codigo').ParamType := ptInput;
    zQuery1.ParamByName('codigo').value := '111';
    ParamByName('precio').ParamType := ptOutput;
    ParamByName('articulo').ParamType := ptOutput;
    zQuery1.ExecSQL; //<-- aqui salta el error
    ShowMessage(ParamByName('articulo').AsString);


Aunque parece que ya han sacado algún parche para solucionarlo, en mi caso en particular estoy utilizando la version 7.2.1-rc y en ella aún sigue saliendo dicho error.
Responder Con Cita
  #5  
Antiguo 06-06-2019
shoulder shoulder is offline
Miembro
 
Registrado: abr 2008
Posts: 441
Poder: 16
shoulder Va por buen camino
Store Procedure

Primero de todo mil gracias pero sigo con problemas me dice que en ese contexto no se puede dar datos en la primera parte para mi es que tengo una version muy vieja de ZEO es la 6.1.5. Voy a migrar a la 7.2, lo que pasa que tengo un programa muy grande quiero ver como se comporta con la nueva version de zeo, voy a desistalar zeo e instalarlo con la nueva version. Hasta probe una linea que habia encontrado en la web tampoco funciona que era esta:


Código Delphi [-]


  ZReadOnyQuery.SQL := 'select * from storedproc(aram1)';
ZReadOnyQuery.paramByName('param1').value = 1;
  ZReadOnyQuery.Open;


Para mi la version del 2004 es muy antigua estaria llena de bugs.
Responder Con Cita
  #6  
Antiguo 06-06-2019
bucanero bucanero is offline
Miembro
 
Registrado: nov 2013
Ubicación: Almería, España
Posts: 208
Poder: 11
bucanero Va camino a la fama
Cita:
Empezado por shoulder Ver Mensaje

Para mi la version del 2004 es muy antigua estaria llena de bugs.
Zeos tiene unos cuantos BUGS, y yo ya me he topado con algunos , aunque supongo que las ultimas versiones ya habrán corregido al menos parte de esos BUGS...

Por otra parte este código que publicas aquí, lo veo muy extraño para MySQL, y por lo menos a mi no me funciona ni incluso directamente desde PhpMyAdmin,
Cita:
Empezado por shoulder Ver Mensaje
Código Delphi [-]
  ZReadOnyQuery.SQL := 'select * from storedproc(aram1)';
ZReadOnyQuery.paramByName('param1').value = 1;
  ZReadOnyQuery.Open;
Porque suponiendo que storedProc es una función y que retornara algún dato entonces la forma correcta de usarla quedaría así:
Código SQL [-]
select storedproc(aram1);
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
Store procedure sancarlos MySQL 3 30-01-2008 20:51:49
Store Procedure sépoco MS SQL Server 5 10-01-2008 17:11:54
Store procedure php jorgito MySQL 1 06-06-2006 09:55:12
incremento de store procedure uper Firebird e Interbase 5 21-04-2004 20:15:59
store procedure ronimaxh Firebird e Interbase 2 24-06-2003 21:20:22


La franja horaria es GMT +2. Ahora son las 08:47:50.


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