Einzelnen Beitrag anzeigen

shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: Wie definiere ich ein Lookup-Feld für eine TQuery?

  Alt 9. Jan 2006, 12:33
Mit FieldDefs liegst du falsch. Du musst das Property Fields[] um ein Feld erweitern.
Delphi-Quellcode:
type
   TDataSetCracker = class(TDataSet); // Zugriff auf protected Member ermöglichen
function AddLookupField(ADataSet: TDataSet; AFieldClass: TFieldClass; const AFieldName: string; const AFieldSize: Integer = 0): TField;
   procedure CreateAllFields(DS: TDataSet);
   begin
      with TDataSetCracker(DS) do
      begin
         DestroyFields;
         FieldDefs.Update;
         CreateFields;
      end;
   end;
begin
   Result := nil;

   // Falls keine Felder im DataSet sind werden alle vorhandenen Felder angelegt.
   // Falls Felder vorhanden sind, so darf "CreateAllFields" nicht aufgerufen
   // werden, da die vorhandenen Felder nicht mehr gelöscht werden dürfen.
   if ADataSet.FieldCount = 0 then
      CreateAllFields(ADataSet);

   // Falls das LU Field schon existiert wird nix mehr gemacht.
   if ADataSet.FindField(AFieldName) <> nil then
      Exit;

   // LU Field anlegen, wenn weitere Eigenschaften des Feldes gesetzt
   // werden sollen, kann dies über den Rückgabewert gemacht werden.
   Result := AFieldClass.Create(ADataSet);
   Result.Name := ADataSet.Name + Copy(AFieldClass.ClassName,2,666) + AFieldName;
   Result.FieldName := AFieldName;
   Result.Size := AFieldSize;
   Result.FieldKind := fkLookup;
   Result.DataSet := ADataSet;
end;
Nach dem Öffnen der Query:
Delphi-Quellcode:
with AddLookupField(Fqry, TStringField, 'Landname', 35) do
begin
   LookupDataset := FqryLookup;
   LookupKeyfields := 'LandId';
   LookupResultField := 'Landname_deutsch';
end;
Andreas
  Mit Zitat antworten Zitat