community.borland.com

Article #19548: Creating Lookup Fields at Runtime

 Technical Information Database

TI4548D.txt - Creating Lookup Fields at Runtime

Category   :Database Programming
Platform   :All-32Bit
Product    :All32Bit,   

Description:
Creating a lookup field at runtime differs in only a few ways from
creating any standard TField object. (for more explicit information 
on this topic and other related topics see the TI entitled
"Dynamically creating a TTable & fields at runtime".) Three properties 
of a field that must be set in order to function as a Lookup field 
are LookUpDataset, LookUpKeyFields and LookUpResultField.  The sample 
code below demonstrates how to create a Lookup field at runtime using 
the two DBDEMOS tables 'customer.DB' and 'orders.DB'.  

Start a new application (File|New Application).
Drop two TTables, a TButton, a TDBLookupComboBox and a TDataSource
    on a form.
Set the two TTables 'DatabaseName' property to 'DBDEMOS'.
Set Table1's 'TableName' property to 'CUSTOMER.DB' and Table2's 
    'TableName' property to 'ORDERS.DB'.
Right click on the TTable object for Table2 and launch the field 
    editor.  Add the 'CustNo' field object (right click on the fields 
    editor and choose 'Add Fields', then select 'CustNo' from the list).
Copy and paste the code below into the code editor.

Example:

unit Unit1;

interface

uses
  Forms, Classes, Controls, StdCtrls, Db, DBTables, DBCtrls;


type
  TForm1 = class(TForm)
    Table1: TTable;   // DBDemos customer table
    Table2: TTable;   // DBDemos orders table
    Button1: TButton;
    DBLookupComboBox1: TDBLookupComboBox;
    DataSource1: TDataSource;
    Table2CustNo: TFloatField;  // CustNo key field object used 
                                // for Lookup  
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
  with TStringField.Create(Table2) do begin
    FieldName := 'MyLookup';
    FieldKind:= fkLookup;
    DataSet := Table2;  
    Name := Dataset.Name + FieldName;
    KeyFields:= 'CustNo';
    LookUpDataset:= Table1;
    LookUpKeyFields:= 'CustNo';
    LookUpResultField:= 'Company';
    DbLookupCombobox1.DataField:= FieldName;
    DataSource1.DataSet:= Dataset;
    Table2.FieldDefs.Add(Name, ftString, 20, false);
  end;
  DbLookupCombobox1.DataSource:= Datasource1;
  Table1.Active:= True;
  Table2.Active:= True;
end;

end.

Reference:
 

4/22/99 12:29:17 PM
 

Last Modified: 01-SEP-99