Derzeit instanzierst du in ComboBox_fuellen nur ein Objekt und hängst dieses an alle Einträge ran. Im FormCreate hingegen erstellst du für jeden Eintrag eine eigene Instanz. Ist das so von dir gewollt?
Ausserdem: Pass doch auch im FormCreate die Schleife für die Datensätze an
Delphi-Quellcode:
procedure ComboBox_fuellen(ComboBox : TVisiComboBox; VddQuery : TVddQuery;
Spalten : TStringlist; Tabelle : String);
var i : Integer;
begin
VddQuery.SQL.Clear;
VddQuery.SQL.Add('Select ');
for i := 0 to Spalten.Count -1 do
begin
VddQuery.SQL.Add(Spalten.Strings[i]+ ', ');
end;
VddQuery.SQL.Add('From ' + Tabelle);
VddQuery.SQL.Add('Order By ' +Spalten[0]);
VddQuery.Open;
VddQuery.First;
While not VddQuery.EoF do
begin
PoolData := TPoolData.Create;
PoolData.var1 := VddQuery.FieldByName(Spalten[1]).asString;
PoolData.var2 := VddQuery.Fieldbyname(Spalten[0]).asString;
Combobox.Items.AddObject(VddQuery.FieldByName(Spalten[0]).asString, PoolData);
VddQuery.Next;
end;
end;
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var id, Bez : String;
begin
Treibermodule.LoginDialog.Execute;
VddQuery1.SQL.Clear;
VddQuery1.SQL.Add('Select * From ADRPOOL');
VddQuery1.Open;
VddQuery1.First;
while not VddQuery1.eof do
begin
ID := VddQuery1.FieldByName('ID').asString;
Bez := VddQuery1.FieldByName('Bezeichnung').asString;
PoolData := TPoolData.Create;
PoolData.ID := VddQuery1.FieldByName('ID').asinteger;
PoolData.Bezeichnung := VddQuery1.Fieldbyname('Bezeichnung').asstring;
VisiCombobox1.Items.AddObject(Bez + ' ' + ID, PoolData);
VddQuery1.Next;
end;
end;