Entwickler-Ecke

Datenbanken - 2 Datenbank Felder in Combobox anzeigen lassen


Ace87 - Di 26.09.06 09:22
Titel: 2 Datenbank Felder in Combobox anzeigen lassen
Wie kann ich 2 Felder (Name und Vorname) aus der Datenbank auslesen lassen und nebeneinander in eine Combobox einfügen??

zum Hintergrund
habe eine Tabelle mit dein spalten ID(Primärschlüssel), Name, Vorname und ect.

ich will das der Name und Vorname in der Combobox nebeneinander steht


Mit freundlichen Grüßen

David


ZeitGeist87 - Di 26.09.06 09:44

HI!

Kommt drauf an was für Komponenten du verwendest!
Ich geh mal davon aus das du n TQuery-Objekt verwendest und n DBgrid


SQL-Anweisung
1:
2:
 query1.sql.text:= 'Select Name, Vorname from meineTabelle order by Name';
 query1.open;


und dann..


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
var i: integer;
...
 for i:= 1 to dbgrid1.datasource.dataset.recordcount do
 begin
  meinComboBox.items.add(dbgrid1.fields[0].asstring + ', ' + dbgrid1.fields[1].asstring);
  dbgrid1.datasource.dataset.recordcount;
 end;


und schon hast du deinen Personen im Format "Name, Vorname" nach Namen sortiert in der ComboBox.

LG
Stefan


Ace87 - Di 26.09.06 10:08

also habe 3 Name und vornamen gerade in meiner Tabelle
aber es wird nur 3 mal der 3te in die Combobox geschrieben


ZeitGeist87 - Di 26.09.06 10:18

was für komponenten verwendest du?
wie sieht dein statement aus?


Ace87 - Di 26.09.06 10:24

Benutze das normale DBGrid und die normale Combobox aus Delphi 5
ich lass mir alles aus der Tabelle anzeigen


SQL-Anweisung
1:
select * from T_Bewerber                    



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TForm5.FormCreate(Sender: TObject);
var
  i: Integer;
begin
  for i:= 1 to dbgrid1.datasource.dataset.recordcount do
  begin
    ComboBox1.items.add(dbgrid1.fields[1].asstring + ', ' + dbgrid1.fields[2].asstring);
    dbgrid1.datasource.dataset.recordcount;
  end;
end;

genau wie du nur das ich sie nicht sortieren lasse


ZeitGeist87 - Di 26.09.06 10:32

wah sorry!!!
mein Fehler!!!

in der schleife statt

Delphi-Quelltext
1:
2:
3:
4:
 .recordcount 
 //muss
 .moveby(1);
 //hin!!!


also so


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
var i: Integer;
begin
  for i:= 1 to dbgrid1.datasource.dataset.recordcount do
  begin
    ComboBox1.items.add(dbgrid1.fields[1].asstring + ', ' + dbgrid1.fields[2].asstring);
    dbgrid1.datasource.dataset.moveby(1);
  end;
end;


Sorry!!!


Ace87 - Di 26.09.06 10:37

musst dich doch nicht entschuldigen
ich muss mich bedanken funktioniert super
vielen dank^^


hansa - Di 26.09.06 12:11

Lass das doch direkt die DB machen :


SQL-Anweisung
1:
SELECT VORNAME||', '||NACHNAME AS NAME_OUT                    


Spendiere der Combobox ein kleines Dataset und schreibe ins SelectSQL diese eine Zeile rein und fertig.


Klabautermann - Di 26.09.06 12:54

Hallo,

warum der Umweg über das DBGrid?

Hier eine kleine Alternatife um die Daten aus dem Query in das Combobox Feld zu bekommen:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
query1.sql.text:= 'Select Name, Vorname from meineTabelle order by Name';
query1.open;
while not query1.eof do begin
  meinComboBox.items.add(query1.FieldByName('Vorname').AsString + ' ' + query1.FieldByName('Nachname').AsString);
  query1.Next;
end;


Das Funktioniert natütlich auch, wenn du die Felder von der Datenbank vereinen lässt:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
query1.sql.text:= 'SELECT VORNAME||''||NACHNAME AS NAME_OUT';
query1.open;
while not query1.eof do begin
  meinComboBox.items.add(query1.FieldByName('NAME_OUT').AsString);
  query1.Next;
end;


Gruß
Klabautermann