Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MySQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=21)
-   -   Problemas con Zeos (https://www.clubdelphi.com/foros/showthread.php?t=72649)

cacu 03-03-2011 19:38:42

Problemas con Zeos
 
Estimados colegas , me he creado un procedimiento almacenado en mysql..
lo probe en el entorno y funciona correctamente.
El caso que de acuerdo ha algunos post habria que utilizar desde delphi
el componente TzQuery .

Código:

with zq_empresa do begin
      //si nuestro procedimiento tiene parametro de entrada entoces seria asi
    SQL.Text:='Call [/sql]MantencionEmpresa(:emp_rut,:emp_nf,:emp_rs,:emp_gr,:emp_dir,:emp_com,:emp_tel,:emp_fx,:emp_rl,:emp_rr);'; //Al poner dos puntos (:) Delphi
      //crea los parámetros automáticamente

    ParamByName('emp_rut').AsString:=datos.reg_emp_rut;
    ParamByName('emp_nf').AsString:=datos.reg_emp_nf;
    ParamByName('emp_rs').AsString:=datos.reg_emp_rs;
    ParamByName('emp_gr').AsString:=datos.reg_emp_gr;
    ParamByName('emp_dir').AsString:=datos.reg_emp_dir;
    ParamByName('emp_com').AsString:=datos.reg_emp_com;
    ParamByName('emp_tel').AsString:=datos.reg_emp_tel;
    ParamByName('emp_fx').AsString:=datos.reg_emp_fx;
    ParamByName('emp_rl').AsString:=datos.reg_emp_rl;
    ParamByName('emp_rr').AsString:=datos.reg_emp_rr;
      ShowMessage(ParamByname('emp_rut').AsString);
      Prepare;
      Open;
 // ExecSQL;
  Data_conecta.Conecta.Reconnect;

Lo anterior al ejecuarlo me da el siguiente error:
'SQL Error : You have an error in your SQL syntax: check the manual that corresponds to your Mysql server fot the right syntax to use near',,,,,,,)' an line 1

He revisado la sintaxis del porc.alm. y esta bien
Quisiera ver si alguien ya ha manejado estos componente , haber si me saca de este apuro..

De ante manos se agradece sus comentarios

rgstuamigo 03-03-2011 20:03:16

Bueno sino me equivoco ese código es mio...:p.:D
Viendo el error me hace pensar en que dicho error no es dentro de delphi sino más bien al hacer o llamar el procedimiento almacenado en MySQL.humm:rolleyes:... de todas formas haber intenta de ésta forma:
Código Delphi [-]
with zq_empresa do begin
       //si nuestro procedimiento tiene parametro de entrada entoces seria asi
     SQL.Text:='Call MantencionEmpresa(:emp_rut,:emp_nf,:emp_rs,:emp_gr,:emp_dir,:emp_com,:emp_tel,:emp_fx,:emp_rl,:emp_r  r);';
                                                      {Al poner dos puntos ( : ) Delphi crea los parámetros automáticamente}

     ParamByName('emp_rut').AsString:=datos.reg_emp_rut;
     ParamByName('emp_nf').AsString:=datos.reg_emp_nf;
     ParamByName('emp_rs').AsString:=datos.reg_emp_rs;
     ParamByName('emp_gr').AsString:=datos.reg_emp_gr;
     ParamByName('emp_dir').AsString:=datos.reg_emp_dir;
     ParamByName('emp_com').AsString:=datos.reg_emp_com;
     ParamByName('emp_tel').AsString:=datos.reg_emp_tel;
     ParamByName('emp_fx').AsString:=datos.reg_emp_fx;
     ParamByName('emp_rl').AsString:=datos.reg_emp_rl;
     ParamByName('emp_rr').AsString:=datos.reg_emp_rr;
      Open;
 // ExecSQL;
 end;
...
Si sigues teniendo problemas pues rogaría que pusierás el código de tu procedimiento almacenado "MantencionEmpresa";)
Saludos...:)

cacu 03-03-2011 20:20:05

Código SQL [-]
CREATE DEFINER=`root`@`localhost` PROCEDURE `MantencionEmpresa`( emp_rut varchar(14),emp_nf  varchar(50),emp_rs  varchar(50),
                          emp_gr  varchar(50),
                          emp_dir varchar(50),
                          emp_com varchar(50),
                          emp_tel varchar(20),
                          emp_fx  varchar(20),
                          emp_rl  varchar(50),
                          emp_rr  varchar(14))
begin

if exists(select adq_emp_rut from empresa where adq_emp_rut = emp_rut) then
      BEGIN
       update empresa             
        set  adq_emp_nf=emp_nf,
             adq_emp_rs=emp_rs,        
             adq_emp_gr=emp_gr,        
             adq_emp_dir = emp_dir,        
             adq_emp_com = emp_com,        
             adq_emp_tel = emp_tel,        
             adq_emp_fx  = emp_fx,        
             adq_emp_rl   = emp_rl,        
             adq_emp_rr  = emp_rr       
       where adq_emp_rut = emp_rut; 
          
     END;      
else
     insert into empresa (adq_emp_rut,adq_emp_nf,adq_emp_rs,adq_emp_gr,adq_emp_dir,adq_emp_com,adq_emp_tel,adq_emp_fx,
     adq_emp_rl,adq_emp_rr) values(emp_rut,emp_nf,emp_rs,emp_gr,emp_dir,emp_com,emp_tel,emp_fx,emp_rl,emp_rr);
         
end if;

end;
Remito Codigo del Porc.Almacenado...Estimado colega no se que estoy haciendo mal....y por cierto efectivamente el codigo delphi lo tome prestado de uno de tus post...gracias por ese aporte..

rgstuamigo 03-03-2011 20:41:02

Pregunto
 
Has probado a ejecutar ese procedimiento almacenado directamente en el servidor para ver si te funciona correctamente??:confused:
No conoco la estructura de tu tabla "Empresa" pero tambien deberías verificar si los tipos de datos que se introduce como parámetros en el prodecimiento "MantencionEmpresa" son compatible con los campos de tu tabla "Empresa";)

cacu 03-03-2011 21:04:14

Cita:

Empezado por rgstuamigo (Mensaje 392582)
Has probado a ejecutar ese procedimiento almacenado directamente en el servidor para ver si te funciona correctamente??:confused:
No conoco la estructura de tu tabla "Empresa" pero tambien deberías verificar si los tipos de datos que se introduce como parámetros en el prodecimiento "MantencionEmpresa" son compatible con los campos de tu tabla "Empresa";)

Estimado he revisado el codigo que me remitiste pero no puedo observer la rectificacion ,,serias tan amable de destacar cual es...

Saludos

rgstuamigo 03-03-2011 21:23:26

Bueno... yo de ser tú, lo primero que haría sería probar primeramente el procedimiento directamente en el servidor...;) con alguna herramienta de consultas SQL ;)... si todo funciona ahí... pues entonces recien voy y lo pruebo desde delphi.;)
Yo por ejemplo utilizo MySQL Query Browser que es una herramienta de consultas SQL,etc que viene dentro del paquete MySQL GUI Tools;), no se cuál estarás usando tú,ya que existen muchas, pero te recalco que primero lo pruebes directamente en el Server para que puedas deducir si el error es en el procedimiento almacenado o és dentro de Delphi.;)
Saludos...:)

cacu 03-03-2011 21:37:37

Cita:

Empezado por rgstuamigo (Mensaje 392588)
Bueno... yo de ser tú, lo primero que haría sería probar primeramente el procedimiento directamente en el servidor...;) con alguna herramienta de consultas SQL ;)... si todo funciona ahí... pues entonces recien voy y lo pruebo desde delphi.;)
Yo por ejemplo utilizo MySQL Query Browser que es una herramienta de consultas SQL,etc que viene dentro del paquete MySQL GUI Tools;), no se cuál estarás usando tú,ya que existen muchas, pero te recalco que primero lo pruebes directamente en el Server para que puedas deducir si el error es en el procedimiento almacenado o és dentro de Delphi.;)
Saludos...:)

Bueno he seguido tu consejo y baje la herramientas que mensionas , ejecute el procedimiento directamente en el servidor y no tube problemas, por lo que pieso el tema estaria en delphi.Lo que no entiendo que segui al pie de la letra tus instrucciones en cuanto al codigo y el error persiste.
No se que mas podria hacer, haber si me tienes paciencia y me sigues ayudando
saludos

rgstuamigo 03-03-2011 21:56:46

Ya... entonces quieres decir que el procedimiento almacenado se ha creado sin errores? me confirma por favor...
Me imagino que has ejecutado la siguiente sentencia SQL desde el "MySQL Query Browser" para probarlo:
Código SQL [-]
Call MantencionEmpresa('Dat1','dat2','dato3',etc....);
Al ejecutar la anterior sentencia con datos de pruebas, no tienes ningun error?¿Te hace correctamente la actualizacion o insercion en tu tabla "Empresa"?, es decir trabaja correctamente el procedimiento almacenado?:confused:

cacu 03-03-2011 22:09:26

Cita:

Empezado por rgstuamigo (Mensaje 392599)
Ya... entonces quieres decir que el procedimiento almacenado se ha creado sin errores? me confirma por favor...
Me imagino que has ejecutado la siguiente sentencia SQL desde el "MySQL Query Browser" para probarlo:
Código SQL [-]
Call MantencionEmpresa('Dat1','dat2','dato3',etc....);
Al ejecutar la anterior sentencia con datos de pruebas, no tienes ningun error?¿Te hace correctamente la actualizacion o insercion en tu tabla "Empresa"?, es decir trabaja correctamente el procedimiento almacenado?:confused:

Si trabaja bien el procedimiento


La franja horaria es GMT +2. Ahora son las 18:29:24.

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