Entwickler-Ecke
Sonstiges (Delphi) - Listbox einlesen und den bearbeiteten Datensatz speichern
Fredy - So 17.05.09 16:17
Titel: Listbox einlesen und den bearbeiteten Datensatz speichern
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.
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
frmRAArtikel.cbArtikel.Clear;
for i := 0 to high(ArtikelArray) do begin frmRAArtikel.cbArtikel.Items.Add(ArtikelArray[i].datBezeichnung); end; frmRAArtikel.lbxRA.Clear;
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; frmRAArtikel.Show;
end; |
Dies ist mein Code für das Bearbeiten eines Eintrags.
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
If cbArtikel.Itemindex = -1 then begin MessageDlg('Bitte vor dem Bearbeiten einen Datensatz auswählen!', mtError, [mbOK], 0); exit; end;
lbxRA.Items[lbxRA.ItemIndex] := cbArtikel.Text;
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];
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; |
Deis ist der Code zum Löschen eines Eintrags.
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 If lbxRA.Itemindex = -1 then begin MessageDlg('Bitte vor dem Löschen einen Datensatz auswählen!', mtError, [mbOK], 0); exit; end; for i := lbxRA.Itemindex to high (Angebot_RechnungArray)-1 do Angebot_RechnungArray[i] :=Angebot_RechnungArray[i+1];
SetLength(Angebot_RechnungArray, Length(Angebot_RechnungArray) -1);
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; |
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:
Delphi-Quelltext
1:
| datArtikel1 : string[20]; |
Mfg. Fredy
SvenAbeln - 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:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| 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.
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| 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 - 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:
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.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!