Registriert seit: 2. Mär 2004
5.508 Beiträge
Delphi 5 Professional
|
Re: Wie definiere ich ein Lookup-Feld für eine TQuery?
9. Jan 2006, 13: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
|
|
Zitat
|