Hola Amigos, estoy desarrollando una aplicación en delphi que se conecta con una bd de access via ADO y estoy notando un comportamiento bastante extraño, previamente les mostraré el código que estoy utilizando y luego les describo lo que estoy observando:
Código Delphi
[-]
for I := 0 to Length(Colab)-1 do
begin
with cmdActDatos do
begin
cadSQL:='INSERT INTO tb_maeColabor (nroId, codCarpe, codAbog) VALUES (' + IntToStr(GenerarID(13)) + ',' + IntToStr(PnroRs) + ', ' + IntToStr(Colab[i]) + ')';
CommandText:=cadSQL;
Execute;
end;
end;
el código de arriba lo que hace es enviar un insert a la bd, tengo un procedimiento GenerarID que lo que hace es generar números de id secuenciales, utilizo este procedimiento y no los campos autonuméricos de access porque así esta implementado el sistema y debo continuar con esta estrategia de desarrollo, el tema es que, si envio mas de un insert, el procedimiento generarid, a veces, me devuelve el mismo número, como si en el ciclo anterior del for no hubiese grabado el id. Para comprobar esto, puse un sleep(300) y ahí si funciona, la pregunta sería, ¿existe alguna forma de asegurarse que Access grabe efectivamente el registro, esto dentro de procedimiento GenerarID, para asegurarse que no devuelva un id duplicado?
Si no existe alguna instrucción tipo flush (la ví en algún otro lenguaje), que baje a disco lo que esté en buffer, tendré que dejar el sleep(300) para que funcione.
Gracias por la atención y saludos.