Delphi-Quellcode:
const SQL_Names: array [0..Spalten] of String = (<Spaltenname1>, <Spaltenname1>, ...);
const 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 := False;
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;
qrMain.FieldByName('Order_Type').AsString;
gauge1.Visible:= True;
gauge1.maxvalue := qrMain.recordcount;
lvAnzeige.Items.BeginUpdate;
lv_Anzeige.Columns.Clear;
for i := 0 to Spalten-1 do
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;
ListItem.Caption:=qrMain.FieldByName('Order_Type').AsString;
for i := 0 to Spalten-1 do
begin
if CheckListBox1.Checked[i] then
begin
if bFirst then
begin
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
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;
Also, das Programm braucht noch eine CheckListBox, in der drinnensteht, welche Spalten angezeigt werden sollen. Alternativ kannst du auch ein Array verwenden. Vor dem Einfügen von Daten in die Listview werden die Spalten nochmals neu eingetragen. Anschließend geht die Schleife alle Spalten durch, und falls eine Spalte angezeigt werden soll, wird der Text hinzugefügt. Die Unterscheidung mit bFirst ist hoffentlich offensichtlich, da das erste Element mit Caption, die nachfolgenden aber über SubItems angesprochen werden. Ich hoffe der Code funzt, ich habe ihn nicht getestet.