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;
for i:=0 to parameters.Count-1 do
begin
with ParameterByName(Nombre[i]) do
begin
if Direccion = TInput then 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
for i:=0 to parameters.Count-1 do
begin
with ParameterByName(Nombre[i]) do
begin
if Direccion = TOutput then begin
Valor[i]:= Value;
end;
end;
end;
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