Ver Mensaje Individual
  #4  
Antiguo 18-02-2017
sabroso sabroso is offline
Miembro
NULL
 
Registrado: feb 2017
Posts: 13
Reputación: 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