Ver Mensaje Individual
  #9  
Antiguo 02-01-2008
waly2k1 waly2k1 is offline
Miembro
 
Registrado: dic 2006
Ubicación: El país de las maravillas(Argentina)
Posts: 251
Reputación: 20
waly2k1 Va por buen camino
Autoincremental...

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.

Última edición por waly2k1 fecha: 02-01-2008 a las 23:30:59.
Responder Con Cita