Ver Mensaje Individual
  #2  
Antiguo 04-07-2003
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Reputación: 28
jachguate Va por buen camino
Si estas conectado via BDE (que no lo mencionas), y el campo CODIGO es parte de la llave primaria, no hay forma de hacer lo que pedis... pues el BDE se basa en la llave primaria para identificar al registro.

El comportamiento es que al hacer un POST, el BDE, luego de recibir de nuevo el control, relee el registro de la base de datos (digamos, genera un Select * from tabla where llaveprimaria = llaveprimaria antes de actualizar).

De alli, que si el valor de esta cambia durante el post (mediante triggers), el BDE pierde el registro y te situa al inicio de la tabla.

Lo que si podes hacer para evitar esto, es llamar vos directamente al generador, digamos en el evento BeforePost de la tabla, y asignarle el valor dentro del mismo BDE.

Yo lo hago normalmente llamando a un stored procedure, que obtiene el valor del generador y lo devuelve en un parámetro.

y en el evento BeforePost hago algo cómo:

Código:
Procedure Table1BeforePost(aDataSet : TDataSet);

Begin
  if (Table1.State = dsInsert) and (Table1CODIGO.IsNull) Then
  Begin
     spObtieneCodigoTable1.ExecProc;
     Table1CODIGO.AsInteger := spObtieneCodigoTable1.ParamByName('aID').AsInteger;
  end;
end;
la idea es esa...

Hasta luego

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita