Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Daten einer Tabelle in eine TComboBox einlesen? (https://www.delphipraxis.net/53519-daten-einer-tabelle-eine-tcombobox-einlesen.html)

smart 18. Sep 2005 09:54

Datenbank: ABS • Version: 488 • Zugriff über: Datascore

Daten einer Tabelle in eine TComboBox einlesen?
 
Ich möchte gern alle Daten eines Feldes von einer Tabelle in eine TComboBox einlesen. Wie machtman das?

Sharky 18. Sep 2005 10:07

Re: Daten einer Tabelle in eine TComboBox einlesen?
 
Zitat:

Zitat von smart
Ich möchte gern alle Daten eines Feldes von einer Tabelle in eine TComboBox einlesen. Wie machtman das?

Hai Heike,

Du musst einfach durch alle Einträge der Tabelle gehen und den Feldinhalt den Items der ComboBox hinzufügen.
Wenn Du in der Tabelle auch ein ID-Feld hast und dieses für weitere Verknüpfungen benötigst kannst Du diese über ein Typcasting auf ein TObject an den Eintrag knüpfen.
Delphi-Quellcode:
procedure TForm1.btn_FillComboBoxClick(Sender: TObject);
var
  inhalt : string;
  id    : integer;
begin
  ComboBox1.Clear;
  with ABSTable1 do
  begin
    First;
    while not (Eof) do
    begin
      inhalt := FieldByName('feldname').AsString;
      id := FieldByName('idfeld').AsInteger;
      ComboBox1.Items.Add(inhalt);
//      ComboBox1.Items.AddObject(inhalt,TOBject(id)); // Mit ID-Feld
      Next;
    end;
  end;
end;

smart 18. Sep 2005 10:34

Re: Daten einer Tabelle in eine TComboBox einlesen?
 
Hallo Stephan!

also ist der eigentliche Punkt um Felder aus zu lesen ?
Delphi-Quellcode:
String := ABSTable1.FieldByName('Feld1').AsString;

Sharky 18. Sep 2005 10:37

Re: Daten einer Tabelle in eine TComboBox einlesen?
 
Zitat:

Zitat von smart
... also ist der eigentliche Punkt um Felder aus zu lesen ?

Jup.
Wenn Du genau weisst in welcher Reihenfolge die Felder in deinem TDataSet stehen kannst Du auch über den Fieldindex daraufzugreifen (ist schneller).
Delphi-Quellcode:
inhalt_Feld1 := Fields[0].AsString;
inhalt_Feld2 := Fields[1].AsString;

smart 18. Sep 2005 10:49

Re: Daten einer Tabelle in eine TComboBox einlesen?
 
Zitat:

Zitat von Sharky
Delphi-Quellcode:
inhalt_Feld1 := Fields[0].AsString;
inhalt_Feld2 := Fields[1].AsString;

Ja, aber das geht dann nicht wenn mehr als ein Feld in der Tabelle ist, oder?

Sharky 18. Sep 2005 10:51

Re: Daten einer Tabelle in eine TComboBox einlesen?
 
Zitat:

Zitat von smart
... Ja, aber das geht dann nicht wenn mehr als ein Feld in der Tabelle ist, oder?

:gruebel:
Ich verstehe jetzt nicht ganz was Du meinst.

smart 18. Sep 2005 10:54

Re: Daten einer Tabelle in eine TComboBox einlesen?
 
Zitat:

Zitat von Sharky
Zitat:

Zitat von smart
... Ja, aber das geht dann nicht wenn mehr als ein Feld in der Tabelle ist, oder?

:gruebel:
Ich verstehe jetzt nicht ganz was Du meinst.

Wenn jetzt mehr als ein Feld in der Tabelle ist, Brauche aber zum auswerten nur ein Feld dann muss ich ja den Feldname angeben können, Oder?

Sharky 18. Sep 2005 10:56

Re: Daten einer Tabelle in eine TComboBox einlesen?
 
Zitat:

Zitat von smart
... Brauche aber zum auswerten nur ein Feld dann muss ich ja den Feldname angeben können, Oder?

Jo,
aber warum nimmst Du überhaupt eine (ABS)Table und kein (ABS)Query? Das finde ich, gerade für solch einen Fall, viel besser!

smart 18. Sep 2005 11:23

Re: Daten einer Tabelle in eine TComboBox einlesen?
 
Zitat:

Zitat von Sharky
Jo,
aber warum nimmst Du überhaupt eine (ABS)Table und kein (ABS)Query? Das finde ich, gerade für solch einen Fall, viel besser!

Ich hatte immer den Eindruck, dass eine Tabelle schneller ist. Ich kenne mich mit Query auch noch nicht so gut aus. Habe schon mal das eine oder andere File geschossen. (Bitte nicht lachen).

Sharky 18. Sep 2005 11:35

Re: Daten einer Tabelle in eine TComboBox einlesen?
 
Zitat:

Zitat von smart
... dass eine Tabelle schneller ist.

Nun ja, bei der ABS ist das nicht sooo wichtig. Aber bei einem richtigen DB-Server würdest Du es ganz schnell merken.
Eine TTable überträgt immer alle Felder und alleZeilen einer Tabelle zum Client. Filterungen finden dann lokal (beim Client stat).
Wenn Du also eine Tabelle in der Datenbank hast die pro Datensatz 1 kByte belegt und es sind 1000 Datensätze vorhanden wird immer 1 MegaByte vom Server zum Client übertragen. Auch dann wenn Du viele der Daten überhaupt nicht benötigst.

Bei einem TQuery wird genau das zum Client gesendet was Du vom Server haben möchtest. Wenn Du zum Beispiel:
SQL-Code:
SELECT feld1 FROM tabellename WHERE ID = 1
an den Server sendest (ID ist ein PK) dann bekommst Du exakt ein Feld (und halt nur die Datenmeng welches es belegt) vom Server zurück.

Um zu deinem Fall zu kommen:
Delphi-Quellcode:
procedure TForm1.btn_FillComboBoxClick(Sender: TObject);
var
  inhalt : string;
begin
  ComboBox1.Clear;
  with ABSQuery1 do
  begin
    Close;
    SQL.Text := 'SELECT feld1 FROM tabelle ORDER BY feld1';
    Open
    First;
    while not (Eof) do
    begin
      inhalt := Fields[0].AsString; // Wir wissen das es Feld 0 sein muss!
      ComboBox1.Items.Add(inhalt);
      Next;
    end;
    Close;
  end;
end;
Wir wissen das der Fielinex 0 sein muss weil wir ja nur ein Feld aus der Tabelle zurückgebenlassen.

smart 18. Sep 2005 11:46

Re: Daten einer Tabelle in eine TComboBox einlesen?
 
Zitat:

Zitat von Sharky
Aber bei einem richtigen DB-Server würdest Du es ganz schnell merken.
Eine TTable überträgt immer alle Felder und alleZeilen einer Tabelle zum Client. Filterungen finden dann lokal (beim Client stat).
Wenn Du also eine Tabelle in der Datenbank hast die pro Datensatz 1 kByte belegt und es sind 1000 Datensätze vorhanden wird immer 1 MegaByte vom Server zum Client übertragen. Auch dann wenn Du viele der Daten überhaupt nicht benötigst.

Bei einem TQuery wird genau das zum Client gesendet was Du vom Server haben möchtest. Wenn Du zum Beispiel:
SQL-Code:
SELECT feld1 FROM tabellename WHERE ID = 1
an den Server sendest (ID ist ein PK) dann bekommst Du exakt ein Feld (und halt nur die Datenmeng welches es belegt) vom Server zurück..

Das wuste ich nicht. Leuchtet aber ein. Ich hatte mich schon gefragt warum so viele immer TQuery benutzen. Vielen Dank für Deine Hilfe. Das Essen ist greifbar ;-)

_SolidSnake_ 6. Feb 2006 21:26

Re: Daten einer Tabelle in eine TComboBox einlesen?
 
Hallo zusammen.

Ich hätt mal eine Frage. Und zwar habe ich eine Combobox wie von Sharky vorgeschlagen mit

Delphi-Quellcode:
ComboBox1.Items.AddObject(inhalt,TOBject(id)); // Mit ID-Feld
erstellt. Wie lese ich das ausgewählte nun aus ?
Wahrscheinlich im ComboBox1Change-Ereignis, aber was muss ich abfragen wenn ich die ID des ausgewählten Feldes haben möchte?

Gruß
Micha

Sharky 7. Feb 2006 06:23

Re: Daten einer Tabelle in eine TComboBox einlesen?
 
Hai _SolidSnake_,

Zitat:

Zitat von _SolidSnake_
... aber was muss ich abfragen wenn ich die ID des ausgewählten Feldes haben möchte? ...

Jetzt musst Du das "Object" (also die ID) wieder in einen Integer casten:
Delphi-Quellcode:
var
  id : integer;
begin
  id := Integer(ComboBox1.Items.Objects[ComboBox1.ItemIndex]);
end;

_SolidSnake_ 7. Feb 2006 09:54

Re: Daten einer Tabelle in eine TComboBox einlesen?
 
Hallo Sharky.

Danke, klappt wunderbar :)

Gruß
Micha

_SolidSnake_ 7. Feb 2006 11:10

Re: Daten einer Tabelle in eine TComboBox einlesen?
 
Hallo zusammen.

Leider muss ich nochmal stören :oops:

Ist es auch umgekehr möglich ? Wenn ich zum Beispiel ein Login erstellen möchte wo ich den Bearbeiter über die Nummer (TEdit) oder eben über eine Auswahl (TComboBox) auswählen kann. Das ändern der Nummer bei Auswahl aus der Liste ist kein Problem, hab ich geschafft. Aber wie sieht es aus wenn ich eine Nummer eingebe, kann ich dann auch die Auswahl entsprechen auf den passenden Benutzer als Default stellen ?

Ich hab ein wenig was ausprobiert, aber es klappt nicht ganz.

Z.B.:

Delphi-Quellcode:
ComboBox1.Items.Objects[ComboBox1.ItemIndex] := TObject(Edit2.Text);
Tut sich nichts bei der Eingabe der Benutzernummer, aber sobald ich jemanden Auswähle bekomme ich nur wirre Zahlen im Edit-Feld

Delphi-Quellcode:
ComboBox1.ItemIndex := StrToInt(Edit2.Text);
Geht im Grunde, aber die ID stimmt nicht, weil der Index ja bei 0 beginnt und meine ID's bei 1 beginnen und nicht unbedingt fortlaufend sind, weil ich ja auch mal Mitarbeiter rausnehme.


Für nen kleinen Tipp wär ich dankbar ...

Gruß
Micha


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:30 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