Autor Beitrag
Fredy
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 57

Win Vista Ultimate

BeitragVerfasst: So 17.05.09 16:17 
Hallo liebe Community,

bin gerade dabei in einer Listbox meine Artikel anzuzeigen und von hier an meine Artikel zu bearbeiten und zu löschen.

Das ist der Code für das öffnen und anzeigen meines Formulars mit der Listbox und einer Combobox.

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
procedure TfrmRABearbeiten.btnStartClick(Sender: TObject);
var i : integer;
begin

  // Combobox leeren
  frmRAArtikel.cbArtikel.Clear;

  // Combobox mit Artikeln füllen
   for i := 0 to high(ArtikelArray) do
    begin
     frmRAArtikel.cbArtikel.Items.Add(ArtikelArray[i].datBezeichnung);
    end// von for

  // ListBox leeren
  frmRAArtikel.lbxRA.Clear;

  // Listox mit den Artikeldatensätzen füllen
  for i := 0 to high(Angebot_RechnungArray) do
    begin
     frmRAArtikel.lbxRA.Items.Add(Angebot_RechnungArray[i].datArtikel1);
     frmRAArtikel.lbxRA.Items.Add(Angebot_RechnungArray[i].datArtikel2);
     frmRAArtikel.lbxRA.Items.Add(Angebot_RechnungArray[i].datArtikel3);
     frmRAArtikel.lbxRA.Items.Add(Angebot_RechnungArray[i].datArtikel4);
     frmRAArtikel.lbxRA.Items.Add(Angebot_RechnungArray[i].datArtikel5);
     frmRAArtikel.lbxRA.Items.Add(Angebot_RechnungArray[i].datArtikel6);
     frmRAArtikel.lbxRA.Items.Add(Angebot_RechnungArray[i].datArtikel7);
     frmRAArtikel.lbxRA.Items.Add(Angebot_RechnungArray[i].datArtikel8);
    end// von for

  // Artikelformular öffnen
  frmRAArtikel.Show;

end;


Dies ist mein Code für das Bearbeiten eines Eintrags.

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
procedure TfrmRAArtikel.btnBearbeitenClick(Sender: TObject);
var i : integer;
begin

  // Prüfen, ob ein Datensatz ausgewählt wurde
  If cbArtikel.Itemindex = -1 then
  begin
    MessageDlg('Bitte vor dem Bearbeiten einen Datensatz auswählen!', mtError, [mbOK], 0);
    exit;
    end// von if


  // Den ausgewählten Eintrag in der Listbox ändern
  lbxRA.Items[lbxRA.ItemIndex] := cbArtikel.Text;


      // ListBox in die Datenfelder übernehmen
            for i := 0 to high(Angebot_RechnungArray) do
                 Angebot_RechnungArray[i].datArtikel1:= lbxRA.Items[0];
                 Angebot_RechnungArray[i].datArtikel2:= lbxRA.Items[1];
                 Angebot_RechnungArray[i].datArtikel3:= lbxRA.Items[2];
                 Angebot_RechnungArray[i].datArtikel4:= lbxRA.Items[3];
                 Angebot_RechnungArray[i].datArtikel5:= lbxRA.Items[4];
                 Angebot_RechnungArray[i].datArtikel6:= lbxRA.Items[5];
                 Angebot_RechnungArray[i].datArtikel7:= lbxRA.Items[6];
                 Angebot_RechnungArray[i].datArtikel8:= lbxRA.Items[7];

      // ListBox leeren und neu Einlesen
          lbxRA.Clear;
            for i := 0 to high(Angebot_RechnungArray) do
                 frmRAArtikel.lbxRA.Items.Add(Angebot_RechnungArray[i].datArtikel1);
                 frmRAArtikel.lbxRA.Items.Add(Angebot_RechnungArray[i].datArtikel2);
                 frmRAArtikel.lbxRA.Items.Add(Angebot_RechnungArray[i].datArtikel3);
                 frmRAArtikel.lbxRA.Items.Add(Angebot_RechnungArray[i].datArtikel4);
                 frmRAArtikel.lbxRA.Items.Add(Angebot_RechnungArray[i].datArtikel5);
                 frmRAArtikel.lbxRA.Items.Add(Angebot_RechnungArray[i].datArtikel6);
                 frmRAArtikel.lbxRA.Items.Add(Angebot_RechnungArray[i].datArtikel7);
                 frmRAArtikel.lbxRA.Items.Add(Angebot_RechnungArray[i].datArtikel8);

end// der Prozedure



Deis ist der Code zum Löschen eines Eintrags.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
procedure TfrmRAArtikel.btnLoeschenClick(Sender: TObject);
var i : integer;
begin
  // Prüfen, ob ein Datensatz ausgewählt wurde
  If lbxRA.Itemindex = -1 then
  begin
    MessageDlg('Bitte vor dem Löschen einen Datensatz auswählen!', mtError, [mbOK], 0);
    exit;
    end// von if

        // Alle Datensätze ab der löschstelle um eine Stelle nach vorne kopieren,
        // damit wird der zu löschende Satz überschrieben.
       for i := lbxRA.Itemindex to high (Angebot_RechnungArray)-1 do
        Angebot_RechnungArray[i] :=Angebot_RechnungArray[i+1];

        // Array um eine Stelle kürzen, d. h. den letzten Satz abschneiden.
        SetLength(Angebot_RechnungArray, Length(Angebot_RechnungArray) -1);

          // ListBox leeren und neu Einlesen
          frmRAArtikel.lbxRA.Clear;
            for i := 0 to high(Angebot_RechnungArray) do
                 frmRAArtikel.lbxRA.Items.Add(Angebot_RechnungArray[i].datArtikel1);
                 frmRAArtikel.lbxRA.Items.Add(Angebot_RechnungArray[i].datArtikel2);
                 frmRAArtikel.lbxRA.Items.Add(Angebot_RechnungArray[i].datArtikel3);
                 frmRAArtikel.lbxRA.Items.Add(Angebot_RechnungArray[i].datArtikel4);
                 frmRAArtikel.lbxRA.Items.Add(Angebot_RechnungArray[i].datArtikel5);
                 frmRAArtikel.lbxRA.Items.Add(Angebot_RechnungArray[i].datArtikel6);
                 frmRAArtikel.lbxRA.Items.Add(Angebot_RechnungArray[i].datArtikel7);
                 frmRAArtikel.lbxRA.Items.Add(Angebot_RechnungArray[i].datArtikel8);
            end// von for



Hat dazu jemand eine Idee an was das liegen kann das dies nicht richtig funktioniert ?

Stehe gerade vor einem großen Problem und ich weiß nicht an was es liegt.

Edit noch die deklaration:

ausblenden Delphi-Quelltext
1:
datArtikel1         : string[20];					


Mfg. Fredy
SvenAbeln
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 334
Erhaltene Danke: 3



BeitragVerfasst: So 17.05.09 17:25 
Du hast einen wichtigen Block vergessen:
Zitat:
Dies ist meine Beschreibung was ich mit "nicht richtig funktioniert" meine.


Was funktioniert denn nicht?
Was sollte passieren und was passiert stattdessen?

Es fällt aber auf, das dein Füllen und Auslesen der Listbox unterschiedlich sind:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
  // Listox mit den Artikeldatensätzen füllen
  for i := 0 to high(Angebot_RechnungArray) do
    begin
     frmRAArtikel.lbxRA.Items.Add(Angebot_RechnungArray[i].datArtikel1);
     frmRAArtikel.lbxRA.Items.Add(Angebot_RechnungArray[i].datArtikel2);
     [...]

Es werden für alle Elemente von Angebot_RechnungArray jeweils 8 Einträge in die Listbox geschrieben.
Beim Auslesen werden aber alle Elemente in diesem Array nur mit Werten der ersten 8 Einträgen gesetzt, es steht
dannach also überall das selbe drin.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
      // ListBox in die Datenfelder übernehmen
            for i := 0 to high(Angebot_RechnungArray) do
                 Angebot_RechnungArray[i].datArtikel1:= lbxRA.Items[0];
                 Angebot_RechnungArray[i].datArtikel2:= lbxRA.Items[1];
                 Angebot_RechnungArray[i].datArtikel3:= lbxRA.Items[2];
    [...]
Fredy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 57

Win Vista Ultimate

BeitragVerfasst: So 17.05.09 17:41 
in den Datensätzen von oben sind nur jeweils 1 Artikel pro Satz. Ich könnte auch anstatt des i auch einfach eine 1 eintragen.

Das Problem ist das er nach dem Bearbeiten und schließen des Programms und speichern bei der nächsten Öffnung irgendwie durcheinander kommt und entweder die Reihenfolge oder einfach ein anderer Artikel drin steht ich kann mir das auch nicht erklären.

Vielleicht liegt es auch an der Eintragung der Artikel das mach ich mit dieser Prozedure:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
procedure TfrmRAEingabe.btnStartClick(Sender: TObject);
begin

  IF Angebot_RechnungSatz.datArtikel1 = '' then
    begin
      Angebot_RechnungSatz.datArtikel1 := cbArtikel.Text;
    exit;
    end;


  IF Angebot_RechnungSatz.datArtikel2 = '' then
    begin
      Angebot_RechnungSatz.datArtikel2 := cbArtikel.Text;
    exit;
    end;


  IF Angebot_RechnungSatz.datArtikel3 = '' then
    begin
      Angebot_RechnungSatz.datArtikel3 := cbArtikel.Text;
    exit;
    end;


  IF Angebot_RechnungSatz.datArtikel4 = '' then
    begin
      Angebot_RechnungSatz.datArtikel4 := cbArtikel.Text;
    exit;
    end;


  IF Angebot_RechnungSatz.datArtikel5 = '' then
    begin
      Angebot_RechnungSatz.datArtikel5 := cbArtikel.Text;
    exit;
    end;


  IF Angebot_RechnungSatz.datArtikel6 = '' then
    begin
      Angebot_RechnungSatz.datArtikel6 := cbArtikel.Text;
    exit;
    end;


  IF Angebot_RechnungSatz.datArtikel7 = '' then
    begin
      Angebot_RechnungSatz.datArtikel7 := cbArtikel.Text;
    exit;
    end;


  IF Angebot_RechnungSatz.datArtikel8 = '' then
    begin
      Angebot_RechnungSatz.datArtikel8 := cbArtikel.Text;
    exit;
    end;

 IF Angebot_RechnungSatz.datArtikel8 <> '' then
    MessageBox(0,'Sie haben die maximale Anzahl an Artikeln überschritten!''Hinweis!', MB_ICONWARNING);

end;

end.


Ist zwar nicht das Gelbe vom Ei müsste aber so funktionieren.