Hola a todos...
Tengo una tabla en cache que se le cargan datos...
Imaginemos esto, supongamos una tabla Clientes, donde tenemos el ID, y el Nombre del Cliente...
Para generar ese ID, busco el mayor numero de ID en la tabla de Clientes y le sumo 1...
Ahora resulta que tengo que cargar varios clientes, dentro de una misma transaccion.. por lo que la tabla clientes esta en cached...
Recupero mi siguiente ID de clientes y a partir de aca, como la tabla esta en cached, y para la misma transaccion mi numero de ID siempre va a ser el mismo....
Cuando realizo el applyUpdates, me da error de clave duplicada... (hasta aca es tal cual necesito que ande...)
Ahora mi pregunta es, como puedo ir corriendo el ID a medida que me voy recuperando del error de clave duplicada...
Yo lo estaba haciendo en el Evento OnUpdateError de esta forma:
Código SQL
[-]
With EIBO_ISCError(E) do
begin
Case ErrCode of
335544665: //PRIMARY KEY
//if ErrorCodes[ErrorCodes.Count - 1] = '2' then //PRIMARY KEY
begin
spNewCodigo.Close;
spNewCodigo.Open;
DataSet.Edit;
DataSet['ID'] := spNewCodigo.FieldByName('ID').AsInteger;
DataSet.Post;
UpdateAction := uaRetry;
end;
335544345: //Lock conflict on no wait transaction
begin
Sleep(100); //Esperamos un tiempo para que termine la transaccion.
UpdateAction := uaRetry;
end
end;
end;
Pero me dice que el registro no puede editarse.... y si le saco el edit, me dice que el registro no esta en Edit or Insert Modes....
Saludos...