Zitat von
Christian18:
... Diese ComboBox fülle ich mit Daten aus meiner Tabelle Anreden. Um die dritte Normalform nicht zu verletzen, möchte ich nur den Index des Datensatzes in meiner Tabelle Kunden speichern, der in der ComboBox ausgewählt wurde. ...
Hai Christian18,
ich "missbrauche" in solch einem Fall gerne die
Objects Eigenschaft von TStrings. Diese ist ja nur ein Pointer. Und da ein Pointer auch nur eine Zahl ist kann ich die ID durch casten auf TObject dort hinterlegen. Beim auslesen muss ich dann nur wieder zurück casten.
Hier einmal ein Beispiel:
Delphi-Quellcode:
procedure TDemoForm.FormCreate(Sender: TObject);
var
anrede:
string;
id: Cardinal;
begin
with ADOQuery1
do
begin
Close;
SQL.Text := '
SELECT id, anrede FROM anreden';
Open;
while not (eof)
do
begin
id := FieldByName('
id').AsInteger;
anrede := FieldByName('
anrede').AsString;
cb_anreden.Items.AddObject(anrede, TObject(id));
// Die id wird auf TObject gecastet
Next;
end;
end;
end;
procedure TDemoForm.btn_testClick(Sender: TObject);
var
id: Cardinal;
begin
id := Cardinal(cb_anreden.Items.Objects[cb_anreden.ItemIndex]);
// Hier wird wieder auf Cardinal gecastet.
ShowMessageFmt('
Die aktuelle Auswahl hat die ID %d', [id]);
end;
Dadurch habe ich die id immer mit einer "Zeile" der Combobox (oder allem anderen was TStrings ist).
Stephan B.