Ver Mensaje Individual
  #1  
Antiguo 12-12-2009
r1d2m3 r1d2m3 is offline
Miembro
 
Registrado: nov 2009
Posts: 88
Reputación: 15
r1d2m3 Va por buen camino
Extraño comportamiento de ADO

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;
//              Sleep(300);
            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.
Responder Con Cita