Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Problema con Zeos + Stored Procedure+ MySql (https://www.clubdelphi.com/foros/showthread.php?t=26209)

makina 17-10-2005 02:14:45

Problema con Zeos + Stored Procedure+ MySql
 
!Hola a todos¡

Tengo un problema con los Zeos tratando de ejecutar un Stored procedure,
el stored procedure debe regresar datos de un select y he intentado correrlo con un TZQuery y con el TZStoredProcedure sin éxito, en el primer caso me manda el mensaje "db.sp cannot retunr a result set in the given context" y en el segundo caso me dice "unsupported operation". Cabe mencionar que no puedo utilizar el procedimiento ExecSQL debido a que necesito que me regrese el resultado del sp.

el sp es el siguiente:
Código:


DELIMITER $$
DROP PROCEDURE IF EXISTS `db`.`sp`$$
CREATE PROCEDURE "db"."sp"()
BEGIN
select Mensaje,tipo from mensaje where Numero='1000';
 
END$$
DELIMITER ;

y el codigo en delphi del TZQuery es:
Código:

query.Close;
query.SQL.Text:='call sp()'; {tambien lo he intentado con query.sql.ADD('call sp()')}
query.Active:=true;

y el codigo del TZStoredProcedure es
Código:

z.Close;
z.StoredProcName:='SP()';
z.Active:=true;

Espero me puedan ayudar, gracias de antemano

makina 04-01-2006 17:20:37

Solucion
 
Buscando en los foros de mysql.com me di cuenta de que no era el único con este problema, al parecer aun hay algunos problemas en cuanto a que la bd regrese el resultado de un sp al cliente, y por lo visto ni los zeos, dbexpress, ado, etc , ofrecen aun una solucion, sin embargo encontre los componentes MyDac (http://crlab.com/mydac/download.html) (no se que tiene mi browser que no pude insertar el link por eso pongo la url completa) , estos los estuve probando y me da gusto decir que funcionan a la perfeccion el unico inconveniente es que no son FW, pero si se ponen a pensar en todo el tiempo que se pueden ahorrar utilizandolos se daran cuenta de que el costo no es alto.. Saludos a todos los foristas. Feliz año nuevo makina.

jg_gutierrez 29-06-2010 17:11:19

Resolver del problema de procedimeinto en ZEOSLIB
 
Bueno ya yo pase por ese asunto.
No esta documentado a ciencia cierta como se hace el trabajo, pero cuando uno tiene la necesidas de alguna forma se consigue el resultado.

Resulta que se hace con el TZQUERY de la siguiente forma:

oCnn: TZConnection;
oQry: tzquery;

oCnn.Properties.Clear;
oCnn.Properties.Add('CLIENT_MULTI_STATEMENTS=1');
oCnn.HostName := 127.0.0.1;
oCnn.protocol := 'mysql-5';
oCnn.Port := 3306;
oCnn.User := root;
oCnn.Password := '';
oCnn.Database := dbname;
oCnn.Catalog := dbname;
oCnn.Connected := true;

Si no se incluye "CLIENT_MULTI_STATEMENTS=1" en la propiedad, nunca se ejecutara el procedimiento almacenado.

oQry.Connection := oCnn;
oQry.SQL.Clear;
oQry.SQL.Text := 'CALL MYPROC 1,2,3';
oQry.ExecSQL;
oCnn.reconnect;

Los SELECT se executan con la sentencia "oQry.Open" para ejecutar o mejor dicho abrir los resultados de la consulta; pero resulta que para los procedimientos almacenados se deben usar "oQry.ExecSQL" el cual ejecuta el comando y devuelve los resultados.

Y por último por alguna extraña razón hay que colocar reconect depues de ejecutar el comando del procedimiento; si no lo haces, no ejecutará correctamente la siguiente consulta.

*A los desarrolldores de ZEOS.
*Si existe alguna forma mas eficiente de hacer el trabajo por favor documentar como.

Saludos:
Johnn G. Gutiérrez
Panamá, Ciudad.
Rep. Panamá.

jg_gutierrez 29-06-2010 17:13:45

Problema con Zeos + Stored Procedure+ MySql
 
Problema con Zeos + Stored Procedure+ MySql
Leer arriba!!!
:)

sabroso 18-02-2017 04:04:29

Cita:

Empezado por jg_gutierrez (Mensaje 368619)
Bueno ya yo pase por ese asunto.
No esta documentado a ciencia cierta como se hace el trabajo, pero cuando uno tiene la necesidas de alguna forma se consigue el resultado.

Resulta que se hace con el TZQUERY de la siguiente forma:

oCnn: TZConnection;
oQry: tzquery;

oCnn.Properties.Clear;
oCnn.Properties.Add('CLIENT_MULTI_STATEMENTS=1');
oCnn.HostName := 127.0.0.1;
oCnn.protocol := 'mysql-5';
oCnn.Port := 3306;
oCnn.User := root;
oCnn.Password := '';
oCnn.Database := dbname;
oCnn.Catalog := dbname;
oCnn.Connected := true;

Si no se incluye "CLIENT_MULTI_STATEMENTS=1" en la propiedad, nunca se ejecutara el procedimiento almacenado.

oQry.Connection := oCnn;
oQry.SQL.Clear;
oQry.SQL.Text := 'CALL MYPROC 1,2,3';
oQry.ExecSQL;
oCnn.reconnect;

Los SELECT se executan con la sentencia "oQry.Open" para ejecutar o mejor dicho abrir los resultados de la consulta; pero resulta que para los procedimientos almacenados se deben usar "oQry.ExecSQL" el cual ejecuta el comando y devuelve los resultados.

Y por último por alguna extraña razón hay que colocar reconect depues de ejecutar el comando del procedimiento; si no lo haces, no ejecutará correctamente la siguiente consulta.

*A los desarrolldores de ZEOS.
*Si existe alguna forma mas eficiente de hacer el trabajo por favor documentar como.

Saludos:
Johnn G. Gutiérrez
Panamá, Ciudad.
Rep. Panamá.


Y ese codigo donde va?


La franja horaria es GMT +2. Ahora son las 19:17:59.

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