El problema en Access con los autoincrementales es que hasta que no
hagas el post en la tabla no puedes saber el valor asignado, y otra cosa: A no ser que tu aplicación sea monousuaria no te sirve el MAX() +1, por lo que no sabes cual es el valor real y la unica manera es seleccionando el valor @@IDENTITY. El problema no es de ADO, simplemente te digo que no te hagas problemas con los eventos porque son muchos y me pasó hace un tiempo que la sucesión de eventos no siempre respetaba un orden especifico, [code]supongo se corrigió ese bug, pero por las dudas descarté todo.
Por lo gral. cuando uso campos de tipo autoincremental lo hago cuando si o si inserto el registro y no cuando el usuario pueda cancelar la inserción.
Sino lo que uso es una tabla con un registro donde estan los últimos valores asignados y a un valor de esos le sumo uno, o sea simulo un Autoinc y llevo yo el control y no Access.
Te pego una función que la invoco cuando quiero insertar el registro
Código:
function TData.GetKey( sField:string ) :LongInt;
begin
tblClaves.Requery;
Result := tblClaves.FieldByName( sField ).Value + 1;
end;
Los campos son los nombres de las tablas, entonces paso como parámetro el nombre de la tabla y listo.
Algo así:
Código:
Tabla.FieldByName( 'ID_PROVEEDOR' ).Value:=TData.GetKey('PROVEEDOR');
Edito, me olvidé de decirte que una vez que insertes el registro actualices esa tablita
Código:
procedure TData.SetKey( sField:string );
begin
tblClaves.Edit;
tblClaves.FieldByName( sField ).Value := tblClaves.FieldByName( sField ).Value + 1;
tblClaves.Post;
end;
Algo así:
Código:
TData.SetKey( 'PROVEEDOR');
Bueno espero te sirva de algo, exitos. Y no te compliques mucho.