![]() |
ComboBox.ItemIndex aus dem Objekt?
Hallo,
weiß gar nicht wie ich das Thema richtig nennen soll. Auf jeden Fall ich hab hier eine Sache wo ich nicht mehr weiter komme. Ich lade wie folgt aus einer DB-Tabelle den Namen und die ID eines Autors in eine ComboBox. Nun möchte ich das so haben, dass der ItemIndex der ComboBox das ist wo im Object die "id_author" steht. Wie mache ich das nur? z.B. hier der Inhalt der ComboBox: 0, leere Zeile 1, Herr Werber (1 ist die id_author, also in der ersten Spalte stehen die IDs, außer der 0) 2, Frau Merkl 5, Herr Nold Nun soll der Autor mit der ID 5 angezeigt werden, die ItemIndex soll also die 3 sein. Wie erfahre ich also, dass die 5 in der dritten Zeile steht? Danke für eure Hilfe!
Delphi-Quellcode:
// Datensaetze der Tabelle author holen
Form2.AuthorComboBox.Clear; Form2.AuthorComboBox.Items.AddObject(' ', TObject(0)); tb := db.GetTable('SELECT * FROM author'); try if tb.Count > 0 then begin while not tb.EOF do begin Form2.AuthorComboBox.Items.AddObject(tb.FieldAsString(tb.FieldIndex['aname']), TObject(tb.FieldAsInteger(tb.FieldIndex['id_author']))); tb.Next; end; end; finally tb.Free; end; ... // Datensatz der Tabelle media holen tb := db.GetTable('SELECT * FROM media WHERE id_media='+idinb+' '); try if tb.Count > 0 then begin // Das war bisher und ist falsch!!!! Form2.AuthorComboBox.ItemIndex := tb.FieldAsInteger(tb.FieldIndex['fk_author_id']); // Hier will ich es richtig machen, aber es knallt... Form2.AuthorComboBox.ItemIndex := hier möchte ich den Autor mit der fk_author_id=5 anzeigen, also den Herrn Nold end; finally tb.Free; end; ... |
AW: ComboBox.ItemIndex aus dem Objekt?
Ich glaube ich hab' s...
Delphi-Quellcode:
Form2.AuthorComboBox.ItemIndex := Form2.AuthorComboBox.Items.IndexOfObject(TObject(tb.FieldAsInteger(tb.FieldIndex['fk_author_id'])));
oder was sagen die Experten dazu? |
AW: ComboBox.ItemIndex aus dem Objekt?
Prinzipiell kann man das schon so machen, aber ein paar kleine Dinge fallen mir auf:
- Wieso greifst Du ständig auf die globale Variable Form2 zu? - SELECT * sollte man nicht verwenden, sondern lieber die abzufragenden Felder einzeln benennen. - Du solltest nach Möglichkeit SQL-Parameter verwenden, allein schon um die Gefahr der SQL-Injection zu vermeiden oder zumindest zu minimieren. - Statt auf eine ComboBo direkt zuzugreifen, würde ich persönlich mir eine Prozedur schreiben, die ein TStrings-Objekt befüllt, damit ist man flexibler, man kann ihr dann z.B. ComboBox.Items, ListBox.Items oder auch eine TStringlist übergeben. |
AW: ComboBox.ItemIndex aus dem Objekt?
Zitat:
Zitat:
Zitat:
Zitat:
|
AW: ComboBox.ItemIndex aus dem Objekt?
Zitat:
Zitat:
Zitat:
Delphi-Quellcode:
Dadurch wird automatisch nach Möglichkeit ggf. in den passenden Datentyp geparst, Quotes in Stringwerten werden escaped usw. Damit ist eine
Query.SQL.Text := 'SELECT Feld1, Feld2 FROM Tabelle WHERE ID = :Id';
Query.ParamByName('Id').Value := 42; Query.Open; ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:38 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz