Ver Mensaje Individual
  #2  
Antiguo 24-09-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Reputación: 25
__cadetill Va por buen camino
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
Responder Con Cita