Autor Beitrag
Krischa
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 118

Windows 7 64 Bit
Delphi 2007
BeitragVerfasst: Mi 20.05.09 12:38 
Hi,
Ich weiß nicht warum der Index angeblich zu weit läuft. Ich lese eine Datenbank aus und befülle ein CheckListBox. Einmal läuft er durch die While-Schleife komplett und beim zweiten mal springt er bei "if rechn.ValueFromIndex ... checklistbox1.checked[j]:=true;" raus. sre und rechn sind je eine Tstringlist.

CODE:
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:
for i :=0 to sre.Count-1 do
begin
  query1.SQL.Text:='SELECT * FROM '+abe1+' WHERE KUNR="'+sre[i]+[d elphi]'" AND EXPORT_E="" AND RDATUM>="'+dmin+'" AND RDATUM<="'+dmax+'"';
  query1.Open;
  while not query1.eof do
  begin
    rechn.Add(query1.fieldbyname('RENR').value);
    if j>0 then
    begin
      if rechn.ValueFromIndex[j]<>rechn.ValueFromIndex[j-1then
      begin
        checklistbox1.Items.Add(query1.FieldByName('KUNR').Value+', '+query1.FieldByName('RENR').value+', '+query1.fieldbyname('KUNL').value+', '+datetostr(query1.fieldbyname('RDATUM').Value));
        checklistbox1.Checked[j]:=true;
      end;
    end
    else
    begin
      checklistbox1.Items.Add(query1.FieldByName('KUNR').Value+', '+query1.FieldByName('RENR').value+', '+query1.fieldbyname('KUNL').value+', '+datetostr(query1.fieldbyname('RDATUM').Value));
      checklistbox1.Checked[j]:=true;
    end;
    j:=j+1;
    query1.Next;
  end;
query1.First;
end;


Sry, das der Code so unleserlich ist aber im Entwurf waren da noch Tabs. :roll:

Moderiert von user profile iconGausi: Quote- durch Delphi-Tags ersetzt
Moderiert von user profile iconNarses: Titel geändert, war: "Fehlermeldung: Index überschreibt das Maximum"
baka0815
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 489
Erhaltene Danke: 14

Win 10, Win 8, Debian GNU/Linux
Delphi 10.1 Berlin, Java, C#
BeitragVerfasst: Mi 20.05.09 12:46 
Du zählst zum Schluss j hoch (j := j + 1;), setzt j aber nicht wieder zurück, also ist j beim zweiten Durchlauf zu hoch.
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 20.05.09 19:04 
Wo ist eigentlich das Query1.Close? Das sieht so aus, als ob Du immer wieder dieselbe Datenmenge abgrast.

[edit] Übrigens solltest Du Deine Abfrage parametrisieren oder zumindest QuotedStr benutzen, sonst steht SQL-Injection Tür und Tor offen. [/edit]
Krischa Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 118

Windows 7 64 Bit
Delphi 2007
BeitragVerfasst: Mo 25.05.09 08:17 
Hallo,
das j ist ja eingentlich nur für die Checklistbox da, damit Checked=true wird. Ich muss es doch in der Schleife hochzählen. Es wird vor der Schleife auf 0 gesetzt und nach jedem Durchlauf eins hochgezählt damit ich auf die aktuelle Zeile zugreifen kann.
Wenn ich es immer wieder zurücksetzten würde, dann würde er nur in der ersten Zeile das Häckchen setzten.
Das Query.close; habe ich aber wirklich vergessen aber das beseitigt mein Problem trozdem nicht. Ausserdem greif er auch ohne query.close; auf den nächsten Datensatz zu.
Dafür gibt es halt query.next;

Habe mein Indexproblem doch in den griff bekommen. Ich lasse das j weg und benutze:
checklistbox1.Checked[checklistbox1.Items.Count-1]:=true;

Danke für eure Hilfe.

P.S. was meinst du mit
Zitat:
Übrigens solltest Du Deine Abfrage parametrisieren oder zumindest QuotedStr benutzen, sonst steht SQL-Injection Tür und Tor offen.

Ich bin noch ein Neuling und arbeite erst seid kurzem mit Datenbanken und Delphi
ffgorcky
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 573

WIN XP/2000 & 7Prof (Familie:Win95,Win98)

BeitragVerfasst: Mo 25.05.09 08:36 
Setzt Du denn vor der for-Schleife die Variable j? (Also z.B. j:=0)
Denn sonst kann die Variable j ja irgendeinen, vom System gerade angestrebten, Wert haben.
Krischa Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 118

Windows 7 64 Bit
Delphi 2007
BeitragVerfasst: Mo 25.05.09 09:00 
Hi,
j a die wird vorher auf 0 gesetzte. Ich glaube ich habe meinen fehler erkannt. Ich habe j an der falschen stelle erhöht. Er durchläuft zwar manchmal die Schleife aber schreibt nichts in die Checklistbox rein aber j wurde erhöht.

Naja vielen Dank nochmal. :D