Ver Mensaje Individual
  #2  
Antiguo 09-03-2012
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Reputación: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
La mejor opción:
En los componentes de base de datos seguramente tienes un evento BeforePost. Es este evento deberías poner tu código de validación o buscar el número que le asignarás.
Por ejemplo, en mis programas hago algo parecido a esto:
Código Delphi [-]
OnBeforePost(DataSet)
begin
   // Asigno MAX(CODIGO)+1
   if (DataSet.State = dsInsert) then
   begin
      DataSet.FieldByName('CODIGO').AsInteger := BuscaMaxCodigo + 1;
   end;
end;

Un caso real de clientes en mi aplicación:
Código Delphi [-]
procedure TDMClientes.QMClientesNewRecord(DataSet: TDataSet);
var
  ...
begin
  QMClientesEMPRESA.AsInteger := Entorno.Empresa;
  QMClientesEJERCICIO.AsInteger := Entorno.Ejercicio;
  QMClientesCANAL.AsInteger := Entorno.Canal;
  QMClientesCLIENTE.AsInteger := 0;
  ...

procedure TDMClientes.QMClientesBeforePost(DataSet: TDataSet);
var
  ...
begin
  // Si esta en modo insercion y no le ha asignado a mano un nro de cliente
  if ((DataSet.State = dsInsert) and (QMClientesCLIENTE.AsInteger = 0)) then
     QMClientesCLIENTE.AsInteger := DMMain.Contador_E('CLI');
  ...

Última edición por duilioisola fecha: 09-03-2012 a las 08:49:21.
Responder Con Cita