Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Listview Spalten zur Laufzeit? (https://www.delphipraxis.net/21192-listview-spalten-zur-laufzeit.html)

celinaw 29. Apr 2004 00:10


Listview Spalten zur Laufzeit?
 
Hi

Hab mal wieder ein Problem!
Mit untem stehendem Code füge ich das Abfrage Ergebnis in eine Listview ein.
Wie kann ich es jetzt machen, das ich mit Hilfe von Checkboxen auswählen kann welche Spalten aus der SQL Abfrage in das Listview eingefügt werden?
Nach möglichkeit möchte ich die Spaltenüberschrift aber weiterhin selber angeben und nicht aus der SQL übernehmen. Z.B. steht in der SQL DB die Spalte "Customer_Number"! Ich möchte aber das Sie in der Listview "Kunden Nr" heißt!

Ist das überhaupt machbar? Also im Moment habe ich ja die Spaltenüberschriften fest vorgegeben :gruebel:


Delphi-Quellcode:
procedure TForm1.bSucheClick(Sender: TObject);
var
   ListItem : TlistItem;
begin
  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;
     while not qrMain.Eof do
  begin

    ListItem := lvAnzeige.Items.Add;
    ListItem.Caption:=qrMain.FieldByName('Order_Type').AsString;
    ListItem.SubItems.Add(qrMain.FieldByName('Customer_Number').AsString);
    ListItem.SubItems.Add(qrMain.FieldByName('Order_Number').AsString);
    ListItem.SubItems.Add(FormatDateTime('dd.mm.yyyy  hh:mm:ss', qrMain.FieldByName('First_Event').AsDateTime));
    ListItem.SubItems.Add(qrMain.FieldByName('DPrint').AsString);
    ListItem.SubItems.Add(qrMain.FieldByName('PrePrint').AsString);
    ListItem.SubItems.Add(qrMain.FieldByName('Print').AsString);
    ListItem.SubItems.Add(qrMain.FieldByName('BMSLogout').AsString);
    ListItem.SubItems.Add(qrMain.FieldByName('Count_DPrint').AsString);
    ListItem.SubItems.Add(qrMain.FieldByName('CeWe_Batch').AsString);
    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;

Gruß Celina

alcaeus 29. Apr 2004 04:25

Re: Listview Spalten zur Laufzeit?
 
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.

celinaw 29. Apr 2004 07:06

Re: Listview Spalten zur Laufzeit?
 
Hi Alcaeus

:shock: Super !! :thuimb:

Du bist ein Schatz! Danke das du dir so viel mühe gemacht hast!
Ich werde mal versuchen nachzuvollziehen was du da gemacht hast, und den Code dann testen. :coder:

Vielen Vielen Dank!

Melde mich wieder...

Liebe Grüße Celina

celinaw 29. Apr 2004 23:02

Re: Listview Spalten zur Laufzeit?
 
Hi...

Kann sich mal einer ansehen was hier nicht stimmt :gruebel:

Alcaeus versucht mir zu helfen eine Listview mit den Felder zu füllen, die in der Checklistbox
gewählt sind.




Delphi-Quellcode:
//###########################################################################

const Spalten=3;

const SQL_Names: array [0..Spalten-1] of String = ('Order_Type', 'Order_Number', 'Customer_Number');
const List_Names: array [0..Spalten-1] of String = ('Type', 'Auftrag', 'Kunde');


procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
begin
  Memo1.Lines.Clear;
  for i := 0 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;
  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.Customer_Number;';

    qrMain.Open;
    qrMain.FieldByName('Order_Type').AsString;
    gauge1.Visible:= True;
    gauge1.maxvalue := qrMain.recordcount;
    lvAnzeige.Items.BeginUpdate;
    lvAnzeige.Columns.Clear;
    for i := 0 to Spalten-1 do
    begin
      if CheckListBox1.Checked[i] then
        lvAnzeige.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
             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;

Gruß Celina

celinaw 29. Apr 2004 23:50

Re: Listview Spalten zur Laufzeit?
 
Hi Alcaeus :hello:

Irgendwas ist noch falsch :gruebel:

Das Programm läuft zwar, aber es wird nichts in die Listview eingetragen. In der CheckListBox hab ich alle 3 Möglichkeiten ausgewählt. In der TlistView werden aber nur zwei Spaltenüberschriften angezeigt :gruebel:
Daten kommen leider gar keine. Irgendwo hat sich da ein Fehler ...... :?:


Gruß Celina

kiar 30. Apr 2004 00:04

Re: Listview Spalten zur Laufzeit?
 
hallo celina,

nirgendwo wird bfirst gestetzt, der kann keine daten reinschreiben, da bfirst := false ist.

raik

celinaw 30. Apr 2004 00:08

Re: Listview Spalten zur Laufzeit?
 
Hi Raik :hi:

:gruebel: Bfirst:= true; :?:

Ich denke das muss so ausehen oder :?:

Delphi-Quellcode:
  if CheckListBox1.Checked[i] then
        begin
          if bFirst = true then
          begin
             ListItem.SubItems.Add(qrMain.FieldByName(SQL_Names[i]).AsString);
Gruß Celina

kiar 30. Apr 2004 00:11

Re: Listview Spalten zur Laufzeit?
 
nur wenn bfirst = true ist schreibt er die daten darein.

du hast aber bfirst oben auf false gesetzt, und nie wieder geändert, frage was macht bfirst?

raik

celinaw 30. Apr 2004 00:14

Re: Listview Spalten zur Laufzeit?
 
:shock:

Zitat:

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.
Das hat Alcaeus dazu geschrieben :?

kiar 30. Apr 2004 00:20

Re: Listview Spalten zur Laufzeit?
 
schreibe mal zum test bfirst:= true vor die abfrage
Delphi-Quellcode:
if bfirst then

celinaw 30. Apr 2004 00:32

Re: Listview Spalten zur Laufzeit?
 
:wall:

Es geht leider Trozdem nicht :cry:

Gruß Celina

kiar 30. Apr 2004 00:42

Re: Listview Spalten zur Laufzeit?
 
setze doch mal einen haltepunkt in diese procedure und gehe mal schrittweise durch,

wenn du eine pe version von delphi hast musst du strg und f5 drücken und dir dort die werte anzeigen lassen.

raik

celinaw 30. Apr 2004 00:47

Re: Listview Spalten zur Laufzeit?
 
:shock: mom... das teste ich mal :gruebel:

celinaw 30. Apr 2004 00:55

Re: Listview Spalten zur Laufzeit?
 
Geht irgendwie nix. :gruebel:

Weiß garnicht wie und wo ich nen haltepunkt setzen soll. Komme nicht damit klar. Habe soetwas noch nicht gemacht :oops:

Gruß Celina

kiar 30. Apr 2004 01:08

Re: Listview Spalten zur Laufzeit?
 
Delphi-Quellcode:
procedure TForm1.bSucheClick(Sender: TObject);
var
  bFirst: Boolean;
  i: Integer;
  ListItem : TlistItem;
  col:TListColumn;
begin
......
    for i := 0 to Spalten-1 do
    // hier werden die spalten namen festgelegt
    begin
       col:=lvAnzeige.Columns.Add
        if CheckListBox1.Checked[i] then
           col.Caption := List_Names[i];
    end;
    while not qrMain.Eof do
    begin
    // hier das item und subitem
      ListItem := lvAnzeige.Items.Add;
          with ListItem do
               begin
               ListItem.Caption:=
                             qrMain.FieldByName('Order_Type').AsString;
          for i := 0 to Spalten-1 do
            begin
               if CheckListBox1.Checked[i] then
               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;
hallo celina, versuche mal so, alles ungetestet

raik

celinaw 30. Apr 2004 01:27

Re: Listview Spalten zur Laufzeit?
 
Hi,

:shock: WoW.. Danke :love:

Ich werde es mal testen und sehen ob es geht!
Du hörst von mir....

Gruß Celina

celinaw 30. Apr 2004 01:56

Re: Listview Spalten zur Laufzeit?
 
Hi :cry:

Genau das selbe! Es funktioniert immer noch nicht. Irgendwo muss da ein Fehler sein :gruebel:

Gruß Celina

kiar 30. Apr 2004 02:04

Re: Listview Spalten zur Laufzeit?
 
fehlermeldung bitte ?

celinaw 30. Apr 2004 02:10

Re: Listview Spalten zur Laufzeit?
 
:shock: Da gibt es keine Fehlermeldung! :gruebel:

Das Programm läuft mit dem Code.

Wenn ich das
Delphi-Quellcode:
 lvAnzeige.Items.BeginUpdate;
und
Delphi-Quellcode:
 lvAnzeige.Items.EndUpdate;
mal raus lasse, werden zwei von den drei Spaltennamen angezeigt. Mehr passiert nicht!

Gruß Celina

kiar 30. Apr 2004 02:23

Re: Listview Spalten zur Laufzeit?
 
schiesse mal ein screenshot vom ergenis, also die spalten in dem listview.

celinaw 30. Apr 2004 02:41

Re: Listview Spalten zur Laufzeit?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hier ..........

kiar 30. Apr 2004 02:55

Re: Listview Spalten zur Laufzeit?
 
hallo celina folgender quelltext, liefert zu mindestens erstmal die spaltennamen
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, CheckLst, ComCtrls;
const
spalten = 3;
listcolum: array[0..spalten-1] of string = ('kunde','num','auftrag');
type
  TForm1 = class(TForm)
   
    btn1: TButton;
    ListView1: TListView;
    procedure btn1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.btn1Click(Sender: TObject);
var
  i:integer;
  col:TListColumn;
begin
   for i:=0 to high(listcolum) do
   begin
    col:=listview1.Columns.Add;
    col.Caption:=listColum[i];
   end;
end;

end.
einfach ein button und ein listview auf die form, versuche erstmal das listview zu verstehen.

so das wars für heute , bis morgen raik

celinaw 30. Apr 2004 03:03

Re: Listview Spalten zur Laufzeit?
 
Ja, das funktioniert :mrgreen:

alcaeus 30. Apr 2004 04:12

Re: Listview Spalten zur Laufzeit?
 
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]

celinaw 30. Apr 2004 04:33

Re: Listview Spalten zur Laufzeit?
 
Hi, Guten Morgen Alcaeus! :hi:

Werde ich mal ausprobieren. Melde mich wieder..


Gruß Celina

celinaw 30. Apr 2004 06:00

Re: Listview Spalten zur Laufzeit?
 
Hi

Diese Funktion
Zitat:

qrMain.FetchAll;
gibt es bei den Zeos Kompos wohl nicht. :gruebel:

Wofür ist die ?

Ich denke die Zeos Kompos werden etwas ähnliches unter einem anderen Namen haben :?:

Gruß Celina

alcaeus 30. Apr 2004 06:03

Re: Listview Spalten zur Laufzeit?
 
FetchAll müsste alle Datensätze in den lokalen Cache holen. Lass dir mal mit ShowMessage ein Meldungsfenster anzeigen, und zwar jedesmal wenn er ein Feld hinzufügen soll, also unter folgender Zeile im Quellcode:
Delphi-Quellcode:
if CheckListBox1.Checked[i] then  //Soll die gewählte Spalte angezeigt werden?
begin
Du fügst einfach
Delphi-Quellcode:
ShowMessage('i='+IntToStr(i));
ein, dadurch siehst du den Zähler, und du siehst, wieviel Elemente wirklich hinzugefügt werden.

celinaw 30. Apr 2004 06:26

Re: Listview Spalten zur Laufzeit?
 
Hi

Die Message ist i=0 :gruebel:
i=1
i=2

und wieder von vorn....

alcaeus 30. Apr 2004 09:42

Re: Listview Spalten zur Laufzeit?
 
Ja, die Ausgabe müsste stimmen, das heißt dass dir deine Werte eingefügt werden. Bist du sicher dass in der Datenbank etwas drinnensteht?

celinaw 30. Apr 2004 20:53

Re: Listview Spalten zur Laufzeit?
 
Hi

Klar bin ich mir sicher :mrgreen:

Ich denke das fast 90.000 Datensätze genügen sollten :gruebel:

Es funktioniert ja auch der Code den ich bissher verwende. Ist nur leider nicht möglich die Spalten aus zu wählen.

Gruß Celina

alcaeus 30. Apr 2004 20:55

Re: Listview Spalten zur Laufzeit?
 
Ok, 90000 sind ein ganzer Haufen....und du hast wirklich den gesamten Code richtig zusammenkopiert? Ich musste den ersten Code doch ein bisschen ändern...hab mich ein wenig vertan. Zeigt er die Spaltenüberschriften mittlerweile an oder nicht?

celinaw 30. Apr 2004 21:12

Re: Listview Spalten zur Laufzeit?
 
Ja, wie gesagt! Er zeigt von drei gewählten Spalten die ersten beiden an.
Und dann passiert nix mehr. Der Cursor bleibt als Sandur stehen!

alcaeus 30. Apr 2004 21:16

Re: Listview Spalten zur Laufzeit?
 
Probier mal, diesen Codeteil:
Delphi-Quellcode:
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;
ausukommentieren, und definiere die Spalten manuell, also im Designmodus. Anschließend führe das ganze aus, mich würde interessieren ob er so irgendwelche Werte in die List kriegt...

celinaw 30. Apr 2004 21:21

Re: Listview Spalten zur Laufzeit?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Also so funktioniert der Code. Natürlich sind so alle Spalten fest vorgegeben!

Delphi-Quellcode:
procedure TForm1.bSucheClick(Sender: TObject);
var
   ListItem : TlistItem;
begin
  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;
     while not qrMain.Eof do
  begin

    ListItem := lvAnzeige.Items.Add;
    ListItem.Caption:=qrMain.FieldByName('Order_Type').AsString;
    ListItem.SubItems.Add(qrMain.FieldByName('Customer_Number').AsString);
    ListItem.SubItems.Add(qrMain.FieldByName('Order_Number').AsString);
    ListItem.SubItems.Add(FormatDateTime('dd.mm.yyyy  hh:mm:ss', qrMain.FieldByName('First_Event').AsDateTime));
    ListItem.SubItems.Add(qrMain.FieldByName('DPrint').AsString);
    ListItem.SubItems.Add(qrMain.FieldByName('PrePrint').AsString);
    ListItem.SubItems.Add(qrMain.FieldByName('Print').AsString);
    ListItem.SubItems.Add(qrMain.FieldByName('BMSLogout').AsString);
    ListItem.SubItems.Add(qrMain.FieldByName('Count_DPrint').AsString);
    ListItem.SubItems.Add(qrMain.FieldByName('CeWe_Batch').AsString);
    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;

alcaeus 30. Apr 2004 21:27

Re: Listview Spalten zur Laufzeit?
 
Ja, den code kenne ich, aber ich will dass du genau den neuen Code ohne das dynamische Spaltenhinzufügen ausprobierst. Sorry, aber mir gehen langsam auch die Ideen aus. Du könntest auch versuchen, jeden Wert den du zur Liste hinzufügst mit einer Messagebox auszugeben, so kannst du sehen ob die Daten auch wirklich von der Datenbank kommen. Es könnte natürlich auch sein dass irgendwo beim Daten holen ein Fehler ist und deswegen das Programm hängen bleibt. Musst du es immer abschießen?

celinaw 30. Apr 2004 21:41

Re: Listview Spalten zur Laufzeit?
 
Nun, ich werde es mal so versuchen wie du gesagt hast. Einen Fehler beim Datenholen schließe ich allerdings aus, da der andere Code ja auch Problemlos läuft. Melde mich wieder...


Gruß Celina

celinaw 30. Apr 2004 21:49

Re: Listview Spalten zur Laufzeit?
 
Also auch wenn ich die Spalten vorgebe und den Code dafür weglasse wird nichts eingefügt!

alcaeus 30. Apr 2004 21:53

Re: Listview Spalten zur Laufzeit?
 
Und das mit der MessageBox? Also was ich meine ist, dass du einen Wert in einer MB ausgibst, anstatt ihn nur der List hinzuzufügen:
Delphi-Quellcode:
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
      MessageBox(SQL_Names[i]+': '+qrMain.FieldByName(SQL_Names[i]).AsString);
Dann müsste er dir jedes Element ausgeben, vorausgesetzt er kann es ordnungsgemäß von der Datenbank einlesen.

celinaw 30. Apr 2004 21:59

Re: Listview Spalten zur Laufzeit?
 
Fehler Inkompatible Typen HWND und String!

alcaeus 30. Apr 2004 22:04

Re: Listview Spalten zur Laufzeit?
 
:wall: :wall: :wall: Nicht MessageBox, sondern ShowMessage, sorry
Ich bin übrigens weg, falls du mehr hilfe brauchst: PN oder Mail


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:40 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz