Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Como capturar el Id de un operacion de insercion con ADO (https://www.clubdelphi.com/foros/showthread.php?t=91575)

lgarcia 07-03-2017 21:13:44

Como capturar el Id de un operacion de insercion con ADO
 
Hola:
Los componentes de Unidac tanto el UniQuery como el StoredProc en una operacion de insercion tienen una propiedad (LastInsertId) que te devuelve el valor del Id de esa operacion, Existe alguna propiedad del ADOQuery o ADOStoredProc que capture eso.

Saludos
Luis Garcia

roman 07-03-2017 21:27:36

No lo sé. Pero muy posiblemente puedas realizar una consulta SQL específica para eso. Por ejemplo, en mysql sería:

Código Delphi [-]
ADOQuery1.SQL.Add('select last_insert_id()');
LastId := ADOQuery1.Fields[0].AsInteger;

En otros motores habrá una consulta similar.

LineComment Saludos

olbeup 09-03-2017 08:42:10

Hola lgarcia,

En SQL Server existe la variable @@IDENTITY y te devuelve el registro insertado siempre y cuando que el campo se haya definido como tal, eje.
Código SQL [-]
CREATE TABLE Facturas
  (
    IDFACTURA int IDENTITY(1,1)
    ,...
    ,...
    ,...
  )
Al hacer un
Código SQL [-]
INSERT INTO
y después haces un
Código SQL [-]
SELECT @@IDENTITY AS LASTID
te devuelve el valor de IDFACTURA

Un saludo.

lgarcia 09-03-2017 15:11:16

Gracias por la respuesta, yo estaba utilizando la opcion que me indica olbeup pero pensaba que podia ser directamente en el codigo de Delphi como hacen los componentes de Unidac.

Saludos
Luis

AgustinOrtu 09-03-2017 19:12:53

Que base de datos?

Casi todas permiten retornar el Id generado en un Insert. Por ejemplo, en SQL Server se hace asi:

Código SQL [-]
INSERT INTO Tabla (campo1, campo2, ... campoN)
OUTPUT INSERTED.NombreCampoId AS AliasCampo
VALUES (valor1, valor2, ... valorN)

Y desde Delphi:

Código Delphi [-]
var
  qry: TADOQuery;
begin
  qry.SQL.Text := setear SQL
  // setear los parametros
  qry.Parameters.ParamByName('valor1').Value := valor1;
  // ejecutar el insert y obtener el id
  qry.Open; 

  Result := qry.FieldByName('AliasCampo').AsInteger;
end;


La franja horaria es GMT +2. Ahora son las 22:44:11.

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