Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   pregunta sobre storeprocedures y delphi (https://www.clubdelphi.com/foros/showthread.php?t=69560)

julyus 25-08-2010 18:38:41

pregunta sobre storeprocedures y delphi
 
tengo una duda quiero llamar un store procedure que debo enviarle dos parametros a y b y este me debe regresar B y C

uso ado para conectarme para conectrame mi pregunta es puesdo usar un ado query o debo usar un tadostoredproc

si tienen codigo explicativo coomo envio las variables y como las tomo cnuado regresan mil gracias :confused::confused::confused:

cloayza 25-08-2010 23:22:21

De las dos formas deberia poderse...

Este codigo no esta probado...Los tipos de datos no representan la realidad
Código Delphi [-]
Var
valor_retorno_1, valor_retorno_2:Integer;
begin
adoQuery.Close;
adoQuery.SQL.Clear;
adoQuery.SQL.Text:='SELECT VAR_1, VAR_2 FROM TU_PROCEDURE(:Param1, :Param2');
adoQuery.ParamByName('PARAM1').AsString:='Valor_Parametro_1';
adoQuery.ParamByName('PARAM2').AsString:='Valor_Parametro_2';
adoQuery.Open;

{Para recuperar los valores de los campos de retorno...}
valor_retorno_1:=adoQuery.FieldByName('VAR_1').AsInteger;
valor_retorno_2:=adoQuery.FieldByName('VAR_2').AsInteger;

adoQuery.Close;
end;

julyus 26-08-2010 00:46:39

hola encontre esto pero no se como funciona
 
encontre esto pero no entiendo esto de pdInputOutput
Código Delphi [-]
EvenType : string;
EvenCode  : string;
begin

  Conn := ConnPool.GetConnection;
  // consulto datos
  if  iCurrSpeed = 0 then
  begin

  //ejecuto el storeprocedure
  ADOSP.Connection := Conn.Connection; // paso el string de conexion
  ADOSP.ProcedureName := 'GetOverSpeed'; // pongo el nombre del SP que voy a utilizar
  ADOSP.Parameters.Refresh; // creo los parametros que espera el SP
  ADOSP.Parameters.ParamByName('@CompanyId').Value  := iCompanyId;
  ADOSP.Parameters.ParamByName('@CarNumber').Value  := sVehicleId;
  ADOSP.Parameters.ParamByName('@Speed').Value  := iCurrSpeed;
  ADOSP.Parameters.ParamByName('@EventType').Direction := pdInputOutput;
  ADOSP.Parameters.ParamByName('@EventCode').Direction :=  pdInputOutput;
  ADOSP.Open;

  end;
  ADOSP.Close;
  ADOSP.Free;

julyus 26-08-2010 00:58:28

duas dudas ???
 
mi duda es conrespecto que necesito los valores que me regrese
para pasarlos a sus respectivas variables var1 var3 ???

Código Delphi [-]
ADOSP.Parameters.ParamByName('@EventType').Direction := pdInputOutput;
ADOSP.Parameters.ParamByName('@EventCode').Direction :=  pdInputOutput;

Alejandro73 26-08-2010 16:31:25

si tienes el procedimiento almacenado en el motor, defines las variables que necesitas de salida como ej @mivariable1 INT OUTPUT; cuando llamas al procedimiento almacenado debes pasar estos valores y una vez que lo ejecutas preguntas por el valor que trae ese campo referenciando al numero de posicion que tiene el parametro, recuerda que estos van desde cero en adelante y seri mas o menos asi

if dm.adopa_miprocedimiento.parameters[1].value=condicion
then .....
else ....

espero te sirva

Saludos
Alejandro Arancibia
CHILE

TheJHorse 29-08-2010 19:22:34

SQL: base de datos "db_prueba"
La tabla
Código SQL [-]
CREATE TABLE tbl_persona
(
  codigo INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
  nombre VARCHAR(25)
)

un storeprocedure para registrar personas
Código SQL [-]
CREATE PROCEDURE spNuevaPersona
  @vcNombre VARCHAR(25),
  @iRetorno INT OUTPUT
AS
  INSERT INTO tbl_persona (nombre) VALUES (@vcNombre)
  
  SET @iRetorno = @@IDENTITY -- Retornamos el codigo de la persona
GO

En Delphi
Código Delphi [-]
acConeccion: TADOConnection;
spProcedimiento: TADOStoredProc;
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  iResultado: Integer;
begin
  acConeccion.ConnectionString := 'Provider=SQLNCLI.1;Persist Security Info=False;User ID=USUARIO;Password=PASSWORD;Initial Catalog=db_prueba;Data Source=.';

  try
    acConeccion.Open();
  except
    Application.Terminate();
  end;

  spProcedimiento.Close;
  spProcedimiento.Prepared := false;
  spProcedimiento.ProcedureName := 'spNuevaPersona';
  spProcedimiento.Parameters.Refresh;

  spProcedimiento.Parameters.ParamByName('@vcNombre').Value := 'Angeluz';
  spProcedimiento.Parameters.ParamByName('@iRetorno').Value := 0;
  spProcedimiento.Prepared := true;
  spProcedimiento.ExecProc();

  iResultado := spProcedimiento.Parameters.ParamByName('@iRetorno').Value;

  acConeccion.Close();

  Application.MessageBox(PChar('Codigo generado: ' + IntToStr(iResultado)), 'Resultado', 0);
end;


La franja horaria es GMT +2. Ahora son las 14:34:59.

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