Ver Mensaje Individual
  #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
Reputación: 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