PDA

Ver la Versión Completa : Como capturar el Id de un operacion de insercion con ADO


lgarcia
07-03-2017, 21:13:44
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:


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.
CREATE TABLE Facturas
(
IDFACTURA int IDENTITY(1,1)
,...
,...
,...
)
Al hacer un
INSERT INTO
y después haces un
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:


INSERT INTO Tabla (campo1, campo2, ... campoN)
OUTPUT INSERTED.NombreCampoId AS AliasCampo
VALUES (valor1, valor2, ... valorN)


Y desde 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;