Ver Mensaje Individual
  #1  
Antiguo 13-07-2007
Arturo_ Arturo_ is offline
Miembro
 
Registrado: jul 2007
Posts: 48
Reputación: 0
Arturo_ Va por buen camino
Maxima valor de un nuevo registro

// Versión: 10.0000 - © 1980, 2006 For Tables DELPHI SERVER .DB
// Ejecutar en: El Evento <Table.BeforePos> ****
// Función que Extrae el Valor Maximo para un Nuevo Registro Key
// Ejemplos:
// Form_DDBTLM.ASSEMBLY_RECORD_MaxKey(Table_NN, 'LINK_0001');
// Form_DDBTLM.ASSEMBLY_RECORD_MaxKey(Table_NN, 'LINK_0002');
// Form_DDBTLM.ASSEMBLY_RECORD_MaxKey(Table_NN, 'LINK_0003');
Código Delphi [-]
procedure TForm_DDBTLM.ASSEMBLY_RECORD_MaxKey(var pmt_TABLE: TTable; pmt_FIELD: string);
begin
  // Init_PROPERTIES
  if (Table_ARMK.Active) then Table_ARMK.Close;
  Table_ARMK.Filter := '';
  Table_ARMK.Filtered := False;
  Table_ARMK.IndexFieldNames := '';
  Table_ARMK.MasterFields := '';
  Table_ARMK.MasterSource := nil;
  // Assign_PROPERTIES
  Table_ARMK.DatabaseName := pmt_TABLE.DatabaseName;
  Table_ARMK.SessionName := pmt_TABLE.SessionName;
  Table_ARMK.TableName := pmt_TABLE.TableName;
  Table_ARMK.MasterSource := pmt_TABLE.MasterSource;
  Table_ARMK.MasterFields := pmt_TABLE.MasterFields;
  if (Table_ARMK.MasterFields = '') then
    Table_ARMK.IndexFieldNames := pmt_FIELD
  else
    Table_ARMK.IndexFieldNames := Table_ARMK.MasterFields + ';' + pmt_FIELD;
  // Open_TABLE
  Table_ARMK.Open;
  Table_ARMK.Last;
  // Load_RECORD_KEY
  if (Table_ARMK.RecordCount = 0) then
    pmt_TABLE.FieldByName(pmt_FIELD).AsFloat := 1
  else
    pmt_TABLE.FieldByName(pmt_FIELD).AsFloat := Table_ARMK.FieldByName(pmt_FIELD).AsFloat + 1;
  // Close_TABLE
  Table_ARMK.Close;
end;
(*
Lo que hace este modulo es extraer el numero maximo del ultimo registro grabado luego le suma 1 para el nuevo registro esto funciona con una tabla ó tables master detalle. Lo bueno es que no uso campos incrementales porque a medida que se agranda la tabla puede que la inserción de registros sean lentos con este codigo añadir el registro 1,000,000,000 seria como añadir el primer registro de una tabla en blanco.

Form_DDBTLM.ASSEMBLY_RECORD_MaxKey(Table_NN, 'LINK_0003');

Table_NN - Se pasa todo el componente de la Tabla
LINK_0003 - Es el campo que contendra el ultimo valor del registro.

Los campor LINK_0001 y LINK_0002 son los enlaces de la tabla Padre

*)

Última edición por marcoszorrilla fecha: 13-07-2007 a las 21:58:12.
Responder Con Cita