Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MS SQL Server (https://www.clubdelphi.com/foros/forumdisplay.php?f=23)
-   -   Capturar Valor que Retorna un SP (https://www.clubdelphi.com/foros/showthread.php?t=52367)

subzero 18-01-2008 16:35:33

Capturar Valor que Retorna un SP
 
Hola....


He realizado un procedimiento almacenado en SQL Server 2005 para que inserte los datos en una tabla, proceso que estoy ejecutando desde Delphi 7, utilizando los componente ADO.... el inconveniente que tengo es que no se como capturar el valor que me devuelve el SP, dado que al ejecutar el procedimiento desde el analizador de consulta este me devuelve el valor.....

Quiere decir que el proceso en el SQL Server esta bien.... pero no puedo traerlo a delphi.... He intentador lo siguiente

"ADOquery.Fields.Fields[0].Asstring;"

Pero cabe anotar que este componente ADOquery lo tengo para que se realicen varios procesos por lo tanto no me gustaria definir campos dentro del componente

Para que se ejecute el procedimiento hago lo siguiente:

Código PHP:

whit ADOquery do
begin
   close
;
    
sql.Clear;
    
sql.Add('execute MI_SP ..parametros..');
    
ExecSQL;
end

Agradezco cualquier idea...

Blackspike 18-01-2008 17:08:13

No te seria mas sencillo usar Componente ADOStoredProcedure??

De esta manera podrias recuperar el valor sin problemas.

Código Delphi [-]
with storedprocedure then
begin
  Close;
  UnPrepare;
  ParamByName('parametros').TipoDato:=Valor;
  Active:=true (Solo si es una consulta) o ExecSQL;
  resultado:=ParamByName('parametro que quieres recuperar').TipoDato;

Yo uso Oracle y uso este sistema y me va de maravillas.

Espero te vaya bien.

Saludos.

poliburro 18-01-2008 17:08:34

Error mi estimado.

tienes dos componentes creados para la interacción con procedimientos almacenados. TadoDataSet o TAdoStoredProcedure.

usa TAdoStoredProcedure y define tanto el sp como sus parámetros

y al ejecutarlo obtendrás el resultado.



suerte

subzero 18-01-2008 21:38:37

Hola....

Cabe anotar que es la primera vez que estoy trabajando con este tipo de base de datos.... en serio....


Estoy haciendo una funcion que sea standart para cualquier procedimientos sea de consulta o ejecución.... no tengo muy claro lo de ADOStoreprocedure

La funcion es la siguiente:

Código Delphi [-]
function TClase.ejecuta_sp(ADOSP : TADOStoredProc; SP: String;
datos: array of String; Exec : Boolean = true; campo_devolver : string = ''): string;
var line, Y : string;  x : byte;
begin
  with ADOSP do
  begin
    Close;
    Parameters.Clear;
    ProcedureName := SP;
    Parameters.Refresh;
    Prepared := true;
    for x := 0 to high(datos) do
     Parameters.Items[x].Value := datos[x];
    if Exec then ExecProc
    else Active := true;
    if campo_devolver <> '' then  result := FieldByName(campo_devolver).AsString;
  end;
end;

Y la estoy llamando así :

Código Delphi [-]
eId.Text :=Clase.ejecuta_sp(DM.SP,'SP_USUARIO_I',[eLogin.Text,eNombres.Text,
    eApellidos.Text,est,'1',true,'USU_ID');

y al momento de ejecutarlo me muestra el siguiente mensaje:

Cita:

"La aplicación utiliza n valor de tipo no válido para la operación actual"
Agradezco de antemano la colaboración ....


La franja horaria es GMT +2. Ahora son las 02:14:35.

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