Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Delphi INSERT clave Primaria (https://www.clubdelphi.com/foros/showthread.php?t=94684)

mjjj 22-05-2020 13:29:22

Delphi INSERT clave Primaria
 
Estimados, estoy por empezar un nuevo proyecto con Delphi XE5, Firebird 2.5 y una fuente de dato externa.

Diariamente realizaré una consulta a la fuente externa de los datos de ese día y los resultados los voy a registrar en Firebird por medio de Delphi.
Si por algún motivo realizo la consulta más de una vez en el día se podrían duplicar registros.

La idea es recorrer los registros de la consulta e ir Insertándolos en Firebird, pero quiero evitar consultar por la llave primaria previamente si existe el registro antes de insertarlo.

Como puedo hacer más eficiente esto, quizás el mismo motor de Firebird pueda descartar cuando esto ocurra y que la sentencia INSERT este dentro de un TRY.

Código Delphi [-]
...
clientdataset1.First;
while not clientdataset1.Eof do
begin

inc(contador);

try

ibsql1.sql.Clear;
ibsql1.SQL.Add('insert into tabla (llave, descripcion, monto)');
ibsql1.SQL.Add('values');
ibsql1.SQL.Add('(:llave, :descripcion, :monto)');
ibsql1.ExecQuery;
except

end;


clientdataset1.Next;
end;
...


Se les ocurre alguna otra forma de hacerlo ??

Saludos.

Casimiro Notevi 22-05-2020 17:39:51

Mś bien:
Código Delphi [-]
ibsql1.sqltext := 'insert into tabla (llave, descripcion, monto) values :llave, :descripcion, :monto)';

clientdataset1.First;
while not clientdataset1.Eof do
begin
  try
    ibsql1.close;
    ibsql1.params[0].asloquesea := clientedatset1....
    ibsql1.params[1].asloquesea := clientedatset1....
    ibsql1.params[2].asloquesea := clientedatset1....
    ibsql1.ExecQuery;
  except
  end;
  clientdataset1.Next;
end;

cloayza 22-05-2020 21:19:17

Puedes usar update or insert

Código SQL [-]
ibsql1.sql.Clear;
ibsql1.SQL.Add('update or insert into tabla (llave, descripcion, monto)');
ibsql1.SQL.Add('values(:llave, :descripcion, :monto)');
ibsql1.ExecQuery;

Saludos cordiales

Casimiro Notevi 22-05-2020 21:26:49

Cita:

Empezado por cloayza (Mensaje 537374)
Puedes usar update or insert

^\||/^\||/^\||/

MAXIUM 23-05-2020 22:14:00

Cita:

Empezado por cloayza (Mensaje 537374)
Puedes usar update or insert

No sabía que se podía hacer eso :eek:


La franja horaria es GMT +2. Ahora son las 20:10:27.

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