El rollback lo hacia, porque si el proceso se para por clave duplicada y la ejecucion del programa termina, cuando vuelven a empezar todos los registros ya estarian duplicados porque los copio en la primera pasada.
Y el abort, para evitar que me muestre el mensaje de error, y mostrar el que yo quiera, no los 2
Al hacer lo que me comento jachguate, el programa sigue parando al encontrar un duplicado
Este es el codigo que tengo puesto ahora mismo para hacer las pruebas con lo que me dijeron, por si veis algo anormal
Código Delphi
[-]
procedure TDataModule2.TCt_totalPostError(DataSet: TDataSet;
E: EDatabaseError; var Action: TDataAction);
var
Texto : string;
begin
if (E is EDatabaseError) then
if Pos('PRIMARY KEY', UpperCase(E.Message)) <> 0 then
begin
Texto := 'Duplicado el registro con ID: ' + QEasy.FieldByName('ID_CT').AsString;
Application.MessageBox(PChar(Texto), 'Registro duplicado',mb_Ok+MB_ICONEXCLAMATION);
TCT_TOTAL.cancel;
end;
end;
QEasy es la tabla origen
TCT_TOTAL es la talba destino
Conexion con ADO y las 2 tablas estan en diferentes bases de datos, por eso no hago el insert
De este modo es como copio los datos de una tabla a otra
Código Delphi
[-]
while not QEasy.Eof do
begin
TCT_TOTAL.Append;
for i := 0 to QEasy.Fields.Count - 1 do
TCT_TOTAL.Fields[i].Value := QEasy.Fields[i].Value;
TCT_TOTAL.Post;
QEasy.Next;
end;