Ver Mensaje Individual
  #15  
Antiguo 10-11-2011
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Reputación: 22
fjcg02 Va camino a la fama
Creo que quieres ir demasiado rápido.

Haz una pequeña prueba de concepto, y cuando la domines, te metes en harina.

Por otro lado, las instrucciones

with parameters do begin
for i:=0 to Length(Nombre)-1 do
CreateParameter(Nombre[i], TipoDato[i], Direccion[i], Tamano[i], Valor[i]);
end;

no son necesarias, ya que estás creando los parámetros. Si asignas la procedure al TADOStoredProc, ya dispones de los parámetros. Sólo tienes que asignarles el valor.

Código Delphi [-]
procedure TfrmGenerales.ADOProcedimiento(Nombre: array of WideString;
                TipoDato: array of TDataType;
                Direccion: array of TParameterDirection;
                Tamano: array of Integer;
                Valor: array of OleVariant;
                Procedimiento: string);
var
  i: integer;
  sp:TADOStoredProc;
begin
  sp := TADOStoredProc.Create( self );
  with sp do
    try
      Connection:=frmAutenticacion.ADOCSistema;
      ProcedureName := Procedimiento;
      // Damos valor a los parámetros de entrada
      for i:=0 to parameters.Count-1 do
       begin
          with ParameterByName(Nombre[i]) do
          begin
            if Direccion = TInput then // al asignar el SP ya te pone los parámetros y si son de entrada o salida
            begin
              DataType:= TipoDato[i]; -> podría obviarse
              Direction:= Direccion[i]; -> podría obviarse
              Size:=Tamano[i]; -> Podría obviarse
              Value:=Valor[i];
            end;
          end;
      end;

      Execute; ->> Importante, con los SP's no se utiliza Open, o eso creo

    // recogemos los valores de los parámetros de salida
      for i:=0 to parameters.Count-1 do
       begin
          with ParameterByName(Nombre[i]) do
          begin
            if Direccion = TOutput then // al asignar el SP ya te pone los parámetros y si son de entrada o salida
            begin
              Valor[i]:= Value;
            end;
          end;
      end;

     // y ahora deberás hacer algo con los valores recogidos. Podrías definir como var el array de valores en la llamada a la función ya que si no los perdierías

    finally
      sp.Free;
    end;
end;

Buano, estoy escribiendo de memoria, pero creo que lo he puesto claro.

De todas maneras, crea un proyecto nuevo, tira un TADOStoredProc, asignale la conexión y el SP y mira cómo ya dispones de los parámetros.

Prueba a ver y nos cuentas.

Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita