Delphi-Quellcode:
const
Spalten = 3;
SQL_Names: array [0..Spalten] of String = (<Spaltenname1>, <Spaltenname1>, ...);
List_Names: array [0..Spalten-1] of String = (<Spaltenname1>, <Spaltenname1>, ...);
procedure TForm1.FormCreate(Sender: TObject);
var
i: Integer;
begin
for i := to Spalten-1 do
begin
CheckListBox1.Items.Add(List_Names[i]);
CheckListBox1.Checked[i] := True;
end;
end;
procedure TForm1.bSucheClick(Sender: TObject);
var
bFirst: Boolean;
i: Integer;
ListItem : TlistItem;
begin
bFirst := True;
Screen.Cursor := crHourGlass;
lfertig.Caption:= '';
lInfo.Caption:='';
Memo1.Lines.Clear;
dbMain.HostName:=SetupForm.edServer.Text; //Server
dbMain.User:=SetupForm.edLogin.Text; //Benutzername
dbMain.Password:=SetupForm.edPassword.Text; //Passwort
dbMain.Database:=SetupForm.edDB.Text; //Name der Datenbank
dbMain.Connected:=True; //Verbindung herstellen
lvAnzeige.Items.Clear;
try
qrMain.SQL.Text :=
'SELECT * ' +
'FROM ' +
'table_ordertracking T,' +
'kundenmg K ' +
'WHERE ' +
'T.Customer_Number=K.Customer_Number ' +
'AND ' +
'T.Customer_Number like ''' + edknr.Text + '''"%" ' +
'AND ' +
'T.Order_Number like ''' + edatnr.Text + '''"%" ' +
'ORDER BY ' +
'T.DPrint;';
qrMain.Open;
//** Diese Zeile könnte die Lösung sein. **
qrMain.FetchAll;
//*****************************************
qrMain.FieldByName('Order_Type').AsString;
gauge1.Visible:= True;
gauge1.maxvalue := qrMain.recordcount;
lvAnzeige.Items.BeginUpdate;
lv_Anzeige.Columns.Clear;
lv_Anzeige.Items.Clear;
for i := 0 to Spalten-1 do //Spaltenarray durchlaufen und alle "gewählten" Spalten hinzufügen.
begin
if CheckListBox1.Checked[i] then
lv_Anzeige.Columns.Add.Caption := List_Names[i];
end;
while not qrMain.Eof do
begin
ListItem := lvAnzeige.Items.Add; //Neues Element in die ListView
for i := 0 to Spalten-1 do //Alle möglichen Spalten durchgehen
begin
if CheckListBox1.Checked[i] then //Soll die gewählte Spalte angezeigt werden?
begin
if bFirst then //Ist diese Spalte die erste?
begin //ja => Caption setzen
if SQL_Names[i] = 'First_Event' then
ListItem.Caption := FormatDateTime('dd.mm.yyyy hh:mm:ss', qrMain.FieldByName(SQL_Names[i]).AsDateTime);
else
ListItem.Caption := qrMain.FieldByName(SQL_Names[i]).AsString;
bFirst := False;
end
else //Nein => SubItem hinzufügen
begin
if SQL_Names[i] = 'First_Event' then
ListItem.SubItems.Add(qrMain.FieldByName(FormatDateTime('dd.mm.yyyy hh:mm:ss', qrMain.FieldByName(SQL_Names[i]).AsDateTime));
else
ListItem.SubItems.Add(qrMain.FieldByName(SQL_Names[i]).AsString);
end;
end;
end;
gauge1.progress := gauge1.progress + 1;
end;
lvAnzeige.Items.EndUpdate;
gauge1.progress := 0;
gauge1.Visible:= false;
finally
dbMain.Connected:=False; //Verbindung trennen
Screen.Cursor := Cursor;
end;
end;
@celina: Ich habe den Code wiederum nicht getestet, ich habe keine Zeit... aber ich werde mir ihn in naher Zukunft vorknöpfen, aber theoretisch fügt dieser Code alle Spalten hinzu, gibt ihnen Überschriften und fügt Elemente ein, solange welche vorhanden sind.
[add]Ich kenne die TZQuery-Komponente ja nicht, aber probier mal den Code einzufügen, der zwischen großen Kommentarstrichen steht. Vielleicht hilft das mit den Items. Außerdem verstehe ich den Sinn der Zeile darunter nicht...wieso ist die drinnen?[/add]