Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MySQL
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 03-02-2010
betto betto is offline
Miembro
 
Registrado: ene 2006
Posts: 42
Poder: 0
betto Va por buen camino
Zeos, Stored Procedure y Parametros

Hola, tengo un problemita con la ejecucion de un StoredProcedure desde un componente Zeos (TZStoredProc). Lo creo en tiempo de ejecucion:

SProc:= TZStoredProc.Create(self);
SProc.Connection := dm.Conecta;

y después le asigno valores:

Sproc.StoredProcName:= 'SP_EJECUTA_XXX_YYY_ZZZ';
Sproc.Active:= False;
Sproc.Params[1].AsString:= QuotedStr(gs_terminal);
Sproc.ExecProc;

pero Delphi me manda el siguiente error:
'List index out of bounds (1)'

y si coloco el nombre de mis paremetros como sigue:
Sproc.StoredProcName:= 'SP_EJECUTA_XXX_YYY_ZZZ';
Sproc.Active:= False;
Sproc.ParamByName('_TERMINAL').AsString:= QuotedStr(gs_terminal);
Sproc.ExecProc;
el error es el siguiente:

Parameter '_TERMINAL' not found.

Alguien puede decirme que hacer?

Les agradezco de antemano, Saludos...
Responder Con Cita
  #2  
Antiguo 03-02-2010
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow Pregunto

Y dónde estas creando el parámetro '_TERMINAL'?
Lo que esta diciendo es que el componente TZStoredProc no tiene ningun parámetro creado por lo que no se puede acceder a ninguno.
Quisas deberías crearlo en tiempo de ejecución algo asi:
Código Delphi [-]
procedure TForm1.Button3Click(Sender: TObject);
var SProc:TZStoredProc;
begin
SProc:= TZStoredProc.Create(Self);
  try
    SProc.Connection := dm.Conecta;
    Sproc.StoredProcName:= 'SP_EJECUTA_XXX_YYY_ZZZ';
    Sproc.Params.CreateParam(ftString,'_TERMINAL',ptInput);//creo un parámetro string de entrada
    Sproc.Active:= False;//esta lines es innecesaria ya que por defecto se crea con Active=False
    Sproc.Params[0].AsString:= QuotedStr(gs_terminal);//el primer parametro se encuentra en la
        // posición cero (0) y no en uno(1).
    Sproc.ExecProc;
   finally
   SProc.Free;//liberamos y destruimos para no tener fugas de  memoria
   end;
end;
Sin olvidar que cuando creas un objeto debes eliminarlo cuando ya no lo necesites para no tener memoria reservado sin estar ocupandose..
Por si acaso en lo personal ami no megusta usar el componente TZStoredProc en su lugar yo uso un TZQuery y en su propiedad SQL llamo a mi procedimiento almacenado; en tu caso sería mas o menos asi:
Código Delphi [-]
 procedure TForm1.Button4Click(Sender: TObject);
var MyQuery:TZQuery;
begin
   MyQuery:=TZQuery.Create(Application);
   try
     MyQuery.Connection:=dm.Conecta;

     //si nuestro procedimiento no tiene parametro de entrada entoces seria asi
     MyQuery.SQL.Text:='Call SP_EJECUTA_XXX_YYY_ZZZ();';
     // ó
     //si nuestro procedimiento tiene parametro de entrada entoces seria asi
     MyQuery.SQL.Text:='Call SP_EJECUTA_XXX_YYY_ZZZ(:Parametro1,:Parametro2);'; //Al poner dos puntos (:) Delphi 
      //crea los parámetros automáticamente 

     MyQuery.ParamByName('Parametro1').AsString:=Lo_que_Sea;
     ...
     ...
     MyQuery.Open;
   finally
    MyQuery.Free;
   end;

end;
Espero que te sea de utilidad.
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7

Última edición por rgstuamigo fecha: 03-02-2010 a las 21:58:34.
Responder Con Cita
  #3  
Antiguo 04-02-2010
betto betto is offline
Miembro
 
Registrado: ene 2006
Posts: 42
Poder: 0
betto Va por buen camino
Muchas gracias, lo intentare probar en cuanto tenga acceso a mi server nuevamente, te agradezco MUCHISIMO de antemano.

Saludos
Responder Con Cita
  #4  
Antiguo 18-02-2017
sabroso sabroso is offline
Miembro
NULL
 
Registrado: feb 2017
Posts: 13
Poder: 0
sabroso Va por buen camino
Cita:
Empezado por rgstuamigo Ver Mensaje
Y dónde estas creando el parámetro '_TERMINAL'?
Lo que esta diciendo es que el componente TZStoredProc no tiene ningun parámetro creado por lo que no se puede acceder a ninguno.
Quisas deberías crearlo en tiempo de ejecución algo asi:
Código Delphi [-]
procedure TForm1.Button3Click(Sender: TObject);
var SProc:TZStoredProc;
begin
SProc:= TZStoredProc.Create(Self);
  try
    SProc.Connection := dm.Conecta;
    Sproc.StoredProcName:= 'SP_EJECUTA_XXX_YYY_ZZZ';
    Sproc.Params.CreateParam(ftString,'_TERMINAL',ptInput);//creo un parámetro string de entrada
    Sproc.Active:= False;//esta lines es innecesaria ya que por defecto se crea con Active=False
    Sproc.Params[0].AsString:= QuotedStr(gs_terminal);//el primer parametro se encuentra en la
        // posición cero (0) y no en uno(1).
    Sproc.ExecProc;
   finally
   SProc.Free;//liberamos y destruimos para no tener fugas de  memoria
   end;
end;
Sin olvidar que cuando creas un objeto debes eliminarlo cuando ya no lo necesites para no tener memoria reservado sin estar ocupandose..
Por si acaso en lo personal ami no megusta usar el componente TZStoredProc en su lugar yo uso un TZQuery y en su propiedad SQL llamo a mi procedimiento almacenado; en tu caso sería mas o menos asi:



Código Delphi [-]
 procedure TForm1.Button4Click(Sender: TObject);
var MyQuery:TZQuery;
begin
   MyQuery:=TZQuery.Create(Application);
   try
     MyQuery.Connection:=dm.Conecta;

     //si nuestro procedimiento no tiene parametro de entrada entoces seria asi
     MyQuery.SQL.Text:='Call SP_EJECUTA_XXX_YYY_ZZZ();';
     // ó
     //si nuestro procedimiento tiene parametro de entrada entoces seria asi
     MyQuery.SQL.Text:='Call SP_EJECUTA_XXX_YYY_ZZZ(:Parametro1,:Parametro2);'; //Al poner dos puntos (:) Delphi 
      //crea los parámetros automáticamente 

     MyQuery.ParamByName('Parametro1').AsString:=Lo_que_Sea;
     ...
     ...
     MyQuery.Open;
   finally
    MyQuery.Free;
   end;

end;
Espero que te sea de utilidad.
Saludos...



Y como seria el código a incluir en su la propiedad SQL para llamar al procedimiento almacenado?
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
Problema con Zeos + Stored Procedure+ MySql makina Conexión con bases de datos 4 18-02-2017 04:04:29
Stored Procedure StartKill MySQL 2 27-08-2008 06:18:44
For dentro de un Stored Procedure en IB alapaco Firebird e Interbase 2 24-07-2006 18:10:19
Ver los Stored Procedure tgsistemas SQL 0 06-04-2004 17:18:22
Stored Procedure tgsistemas SQL 1 27-02-2004 13:10:33


La franja horaria es GMT +2. Ahora son las 20:09:17.


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