Como a mi no me gustan los campos lockup, te explicaré cómo hacerlo con campos calculados
Seleccionas el Dataset de Detalle Facturas y le haces doble clic. En la pantalla que saldrá, haz clic con el botón derecho y escoge Add All Fields. Ahora acabas de crear los TFields de la tabla en cuestión (los campos persistentes).
Vuelve a hacer clic con el botón derecho y escoge Add New Field (o algo así, lo estoy poniendo de memoria). Te aparecerá una pantalla. En ella deves poner el nombre del nuevo campo, así como el tipo y la longitud.
Ahora biene la diferencia al crear un campo calculado o loockup. Verás que tienes un radio group para escoger el tipo de campo (Data, Calculated, loockup).
Los campos Data son aquellos campos que se encuentran definidos físicamente en la tabla de la base de datos.
Si sigues queriendo campos loockup, marca la opción de éste e informa las 4 variables de acontinuación (tabla de referencia, campo de referencia, ....) y ya lo tendrás
Si lo quieres como calculado, selecciona la opción de éste y acepta la pantalla.
Con loockup ya has terminado el tabajo, pero con los calculados, tendrás que programar el evento OnClacFields del DataSet para extraer la información de la descripción del artículo con algo como
Código:
var
Q : TQuery; // o los componentes que utilices (IBX, ....)
begin
Q := TQuery.Create(Self);
try
Q.Database := TTable(Dataset).Database;
Q.SQL.Text := 'select descripcion from articulos ' +
'where codigo = ' + QuotedStr(TablaCodigo.AsString);
Q.Open;
if Q.Fields[0].IsNull then
TablaDescripcion.AsString := ''
else
TablaDescripcion.AsString := Q.Fields[0].AsString;
finally
FreeAndNil(Q);
end;
end;
he supuesto que el codigo del articulo (campo Codigo) es alfanumerico (de ahi el QuotedStr) y que el campo calculado que has creado se llama Descripcion
Como ves, da más trabajo el realizar campos calculados, pero como he dicho antes, a mi me gustan más ya que, en un momento dado que quieras, puedes desactivarlos (con una propiedad del Dataset) o cambiar su comportamiento,.....
Para el tema de la fecha, puedes informar el evento OnNewRecord del Dataset y poner algo como....
Código:
procedure TDataModule1.TablaNewRecord(Dataset: TDataset);
begin
TablaCampoFecha.AsDateTime := Date;
end;
Bueno, espero te sirva
PD: lo he puesto todo de memoria, por lo que seguramente habrá algun error