subitems

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Joachim Raap
Beiträge: 143
Registriert: Mo 30. Mär 2020, 12:37

subitems

Beitrag von Joachim Raap »

Hallo, auf einer Form sind eine Reihe von Feldern dargestellt, die nach dem anklicken eines Satzes in einer Listview auf dem gleichen Form mit den entsprechenden Inhalten gefüllt werden sollen. Nun kommt aber die Fehlermeldung "List Index (30) out of bounds" was mich zu der Vermutung bringt, daß nur max 29 Subitems möglich sind. Stimmt das?
Wenn ja, wie kann man denn die restlichen SubItems darstellen??

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 5783
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Niederösterreich
Kontaktdaten:

Re: subitems

Beitrag von af0815 »

Zählst du richtig ? 0-29 = 30 Elemente. Meistens meinent man aber 1-30. Nur fangen die Listen etc. immer 0 basierend an.

Aussagekräftiges Code = Beispiel würde viel Licht in die Glaskugel bringen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

TBug
Beiträge: 172
Registriert: Mi 2. Sep 2015, 11:09
OS, Lazarus, FPC: Lazaurus 2.2.4 FPC 3.2.2
CPU-Target: Windows 32/64bit

Re: subitems

Beitrag von TBug »

af0815 hat geschrieben:
Di 6. Dez 2022, 17:56
Zählst du richtig ? 0-29 = 30 Elemente. Meistens meinent man aber 1-30. Nur fangen die Listen etc. immer 0 basierend an.
Erschwerend kommt noch hinzu, dass das erste Element in der ListView-Darstellung kein SubItem ist.

Sieht man in einer ListView 10 Einträge nebeneinander, dann hat man nur 9 SubItems wobei das letzte Item den Index 8 hat.

Joachim Raap
Beiträge: 143
Registriert: Mo 30. Mär 2020, 12:37

Re: subitems

Beitrag von Joachim Raap »

........alles richtig was ihr sagt und auch klar. Hier der Code:

Code: Alles auswählen

procedure TFMArtikel.LVArtikelClick(Sender: TObject);
  begin
   if LVArtikel.Selected<>nil
    then begin
          Fehlermeldung(99);
          Date:=now;
          //Füllen der Editfelder mit dem ausgewälten Datensatz
          EDTArtID.Text:=LVArtikel.Selected.Caption;
          EDTArtNr.Text:=LVArtikel.Selected.Subitems[0];
          EdtArtBez.Text:=LVArtikel.Selected.Subitems[1];
          EDTArtAnlg.Text:=LVArtikel.Selected.SubItems[2];
          CBArtEKto.Text:=LVArtikel.Selected.SubItems[3];
          EDTArtMonUms.Text:=LVArtikel.Selected.SubItems[4];
          EDTArtJahresUms.Text:=LVArtikel.Selected.SubItems[5];
          EDTArtVorMonUms.Text:=LVArtikel.Selected.SubItems[6];
          EDTArtVorJahresUms.Text:=LVArtikel.Selected.SubItems[7];
          EDTArtEKP.Text:=LVArtikel.Selected.SubItems[8];
          EDTArtEKP1.Text:=LVArtikel.Selected.SubItems[9];
          EDTArtEKP2.Text:=LVArtikel.Selected.SubItems[10];
          EDTArtEKP3.Text:=LVArtikel.Selected.SubItems[11];
          EDTArtEKP4.Text:=LVArtikel.Selected.SubItems[12];
          EDTArtEKP5.Text:=LVArtikel.Selected.SubItems[13];
          EDTArtVKP1.Text:=LVArtikel.Selected.SubItems[14];
          EDTArtVKP2.Text:=LVArtikel.Selected.SubItems[15];
          EDTArtVKP3.Text:=LVArtikel.Selected.SubItems[16];
          EDTArtVKP4.Text:=LVArtikel.Selected.SubItems[17];
          EDTArtVKP5.Text:=LVArtikel.Selected.SubItems[18];
          EDTArtEKPgueab.Text:=LVArtikel.Selected.SubItems[19];
          EDTArtEKPgueab1.Text:=LVArtikel.Selected.SubItems[20];
          EDTArtEKPgueab2.Text:=LVArtikel.Selected.SubItems[21];
          EDTArtEKPgueab3.Text:=LVArtikel.Selected.SubItems[22];
          EDTArtEKPgueab4.Text:=LVArtikel.Selected.SubItems[23];
          EDTArtEKPgueab5.Text:=LVArtikel.Selected.SubItems[24];
          EDTArtVKPgueab.Text:=LVArtikel.Selected.SubItems[25];
          EDTArtVKPgueab1.Text:=LVArtikel.Selected.SubItems[26];
          EDTArtVKPgueab2.Text:=LVArtikel.Selected.SubItems[27];
          EDTArtVKPgueab3.Text:=LVArtikel.Selected.SubItems[28];
          EDTArtVKPgueab4.Text:=LVArtikel.Selected.SubItems[29];
          EDTArtVKPgueab5.Text:=LVArtikel.Selected.SubItems[30];
          if not Zeile then Zeile_sichtbar(true);
          Modus:=2;
         end
    else Fehlermeldung(14);
  end;               

charlytango
Beiträge: 671
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz 2.2.4
CPU-Target: Win 32Bit, 64bit
Wohnort: Wien

Re: subitems

Beitrag von charlytango »

bei mir hakt es einfach mit dem Verständnis besonders bei dieser Zeile:

Code: Alles auswählen

//Füllen der Editfelder mit dem ausgewälten Datensatz
Das können datenbanksensitive Controls ja automatisch und quasi gratis. (zb TDBText, TDBEdit und Konsorten).
Solche Controls mit einer TDatasource verbinden die zB an einer TSQLQuery hängt. Die Feldnamen in die Controls reinschreiben und fertig. (mehrere Controls können so mit einer TDataSource verbunden werden dann sind alle synchron am gleichen Datensatz)

Das ist nicht ganz das Gelbe vom Ei, gibt aber einen Einblick

Aber vielleicht denke ich zu kompliziert

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 5783
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Niederösterreich
Kontaktdaten:

Re: subitems

Beitrag von af0815 »

Der Code sagt genaugenommen nichts aus. Nur das du ganz einfach Items den Feldern zuweist.

Was mir generell bei einem solchen Code fehlt, besonders wenn man von einem dynamischen Gebilde etwas in eine starre Struktur zuweist, eine Prüfung ob zumindest die Anzahl der Items vorhanden ist, die du erwartest. Du weist etwas blind zu, ohne Prüfung, auch komplett ohne Exception handling und erwartest das alles funktioniert. Fehler die vorher schon eingebaut wurden, tauchen jetzt erst auf, wenn es knallt.

Ich sage dir anhand des Codes, dein Inhalt der LVArtikel stimmt nicht mit dem erwarteten Inhalt zusammen. Punkt.

Das sind Probleme sie man zusammen mit dem Debugger und Logger relativ rasch in den Griff bekommt. LazLogger rein und zumindest eine Zeile Debugln hinein, wo ich mir die wichtigsten Sachen des LVArtikel auf der Konsole anzeigen lasse.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Mathias
Beiträge: 5489
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunc)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: subitems

Beitrag von Mathias »

Das sind Probleme sie man zusammen mit dem Debugger und Logger relativ rasch in den Griff bekommt.
Oder was noch viel einfacher ist, mit Writeln auf die Konsole ausgeben.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 5783
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Niederösterreich
Kontaktdaten:

Re: subitems

Beitrag von af0815 »

Mathias hat geschrieben:
Mi 7. Dez 2022, 08:40
Das sind Probleme sie man zusammen mit dem Debugger und Logger relativ rasch in den Griff bekommt.
Oder was noch viel einfacher ist, mit Writeln auf die Konsole ausgeben.
Genau das ist gefährlich, mit "writeln auf die Konsole" auszugeben, das macht nur solange man nicht für andere Plattformen arbeitet. Writeln funktioniert nicht auf allen Plattformen, weil manche Plattformen keine Konsole anbinden, dann macht dein Programm einfach eine Exception und du schaust blöd aus der Wäsche. Nein nein, Debugln ist aus diesem Grund Plattformsicher implementiert und wird auch innerhalb von Lazarus selbst verwendet. Deswegen funktioniert es unheimlich stabil auf allen Plattformen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Joachim Raap
Beiträge: 143
Registriert: Mo 30. Mär 2020, 12:37

Re: subitems

Beitrag von Joachim Raap »

#afAF815
....diesen "Logger" kenne ich nicht und weiß so natürlich auch nicht, wie man ihn anwendet. Wo kann ich mich darüber informieren?
by the way - die Anzahl der Felder stimmt

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 5783
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Niederösterreich
Kontaktdaten:

Re: subitems

Beitrag von af0815 »

Joachim Raap hat geschrieben:
Mi 7. Dez 2022, 10:29
....diesen "Logger" kenne ich nicht und weiß so natürlich auch nicht, wie man ihn anwendet. Wo kann ich mich darüber informieren?
Bei google mal "Lazarus wiki Lazlogger" probieren, erster Fund ist https://wiki.freepascal.org/LazLogger

Generell mit "Lazarus Wiki" und dann einen Begriff findet man sehr viel Information.

Und du hast wirklich 31 Felder in den Subitems, nicht nur 30 ?!

Edit: Beispiel hinzugefügt
Dateianhänge
lvtest.zip
(139.72 KiB) 16-mal heruntergeladen
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Joachim Raap
Beiträge: 143
Registriert: Mo 30. Mär 2020, 12:37

Re: subitems

Beitrag von Joachim Raap »

31 SubItems + 1 Caption macht 32 in Summe
Oder wie zählt ihr in Ösiland?

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 5783
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Niederösterreich
Kontaktdaten:

Re: subitems

Beitrag von af0815 »

Es kommt nicht nur aufs Zählen im Ösi Land an, es müssen auch die Objekte dahinter da sein, zumindest im Ösi Land ist das der Fall.

Ich habe bei meinem Programmen, normalerweise keine Out of Bounds und wenn, dann finde ich das gleich. Lazarus bietet dafür viele Möglichkeiten.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
Winni
Beiträge: 1575
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: subitems

Beitrag von Winni »

Joachim Raap hat geschrieben:
Mi 7. Dez 2022, 15:44
Oder wie zählt ihr in Ösiland?
Hi!

In felix Austria wurde 1 : 7 gerechnet.
So hab ich das als Kind gelernt, wenn Oma besucht wurde.

1 DM = 7 Schillinge

Winni

Antworten