// 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
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;
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;
Table_ARMK.Open;
Table_ARMK.Last;
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;
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
*)