Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Go Back   Foros Club Delphi > Principal > SQL
Register FAQ Members List Calendar Guía de estilo Search Today's Posts Mark Forums Read

Reply
 
Thread Tools Search this Thread Display Modes
  #1  
Old 05/06/2019
shoulder shoulder is offline
Miembro
 
Join Date: Apr 2008
Posts: 441
Poder: 19
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
Reply With Quote
  #2  
Old 05/06/2019
bucanero bucanero is offline
Miembro
 
Join Date: Nov 2013
Location: Almería, España
Posts: 208
Poder: 13
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;
Reply With Quote
  #3  
Old 05/06/2019
shoulder shoulder is offline
Miembro
 
Join Date: Apr 2008
Posts: 441
Poder: 19
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;
Reply With Quote
  #4  
Old 06/06/2019
bucanero bucanero is offline
Miembro
 
Join Date: Nov 2013
Location: Almería, España
Posts: 208
Poder: 13
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.
Reply With Quote
  #5  
Old 06/06/2019
shoulder shoulder is offline
Miembro
 
Join Date: Apr 2008
Posts: 441
Poder: 19
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.
Reply With Quote
  #6  
Old 06/06/2019
bucanero bucanero is offline
Miembro
 
Join Date: Nov 2013
Location: Almería, España
Posts: 208
Poder: 13
bucanero Va camino a la fama
Quote:
Originally Posted by shoulder View Post

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,
Quote:
Originally Posted by shoulder View Post
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);
Reply With Quote
Reply


Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
Store procedure sancarlos MySQL 3 30/01/2008 19:51
Store Procedure sépoco MS SQL Server 5 10/01/2008 16:11
Store procedure php jorgito MySQL 1 06/06/2006 08:55
incremento de store procedure uper Firebird e Interbase 5 21/04/2004 19:15
store procedure ronimaxh Firebird e Interbase 2 24/06/2003 20:20


All times are GMT +2. The time now is 23:07.


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