![]() |
Schleife / Ungültige Zeigeroperation!?
Hallo zusammen.
Folgender Code:
Delphi-Quellcode:
Er geht alles durch, aber wenn er die For-Schleife durch hat, und oben dann i=13 ist, kommt sofort die Meldung:
FOR i:=1 TO 12 DO
begin he2:=1; if i<9 then begin repeat zqapg.SQL.Text:='select * from liste INNER JOIN listeorte on reklamnr=liste where (`orte`='''+inttostr(he2)+''') AND (`reklamdatum`>='''+jahr+'-0'+inttostr(i)+'-01'') AND (`reklamdatum`<'''+jahr+'-0'+inttostr(i+1)+'-01'')'; zqapg.Open; monat[i-1,he2]:=zqapg.RecordCount; he2:=he2+1; until he2=he; end; if i=9 then begin repeat zqapg.SQL.Text:='select * from liste INNER JOIN listeorte on reklamnr=liste where `orte`='''+inttostr(he2)+''' AND (`reklamdatum`>='''+jahr+'-0'+inttostr(i)+'-01'') AND (`reklamdatum`<'''+jahr+'-'+inttostr(i+1)+'-01'')'; zqapg.Open; monat[i-1,he2]:=zqapg.RecordCount; he2:=he2+1; until he2=he; end; if (i=10) or (i=11) then begin repeat zqapg.SQL.Text:='select * from liste INNER JOIN listeorte on reklamnr=liste where `orte`='''+inttostr(he2)+''' AND (`reklamdatum`>='''+jahr+'-'+inttostr(i)+'-01'') AND (`reklamdatum`<'''+jahr+'-'+inttostr(i+1)+'-01'')'; zqapg.Open; monat[i-1,he2]:=zqapg.RecordCount; he2:=he2+1; until he2=he; end; if i=12 then begin repeat zqapg.SQL.Text:='select * from liste INNER JOIN listeorte on reklamnr=liste where `orte`='''+inttostr(he2)+''' AND (`reklamdatum`>='''+jahr+'-'+inttostr(i)+'-01'') AND (`reklamdatum`<'''+jahrund1+'-01-01'')'; zqapg.Open; monat[i-1,he2]:=zqapg.RecordCount; he2:=he2+1; until he2=he; end; end; Ungültige Zeigeroperation. Irgendwie blicke ich gerade da nicht durch, wo der Fehler ist. Es ist sicherlich etwas umständlich programmiert, aber sollte iegentlich funktionieren. hmm Kann mir da jemand helfen? Gruß, Morri |
Re: Schleife / Ungültige Zeigeroperation!?
Hi
Zitat:
|
Re: Schleife / Ungültige Zeigeroperation!?
i hat nach dem letzten Schleifendruchlauf den Wert 13 und bewirkt dann den Schleifenabbruch.
Ich tippe eher in der nächsten Zeile nach der Schleife auf den Fehler. |
Re: Schleife / Ungültige Zeigeroperation!?
Sollte nicht, aber wenn du die Schritte einzeln durchgehst und nach dem 12. Durchgang wieder in die For Zeile kommst, hat i den Wert 13.
Das habe ich auch gerade bei einer simplen for schleife in bds2006 ausprobiert. Auf jeden Fall kommt dann genau der Fehler. :gruebel: edit: Zitat:
Danach ist nur noch das end; der Prozedur. |
Re: Schleife / Ungültige Zeigeroperation!?
mhh dann wäre noch möglich, dass das Objekt in dem die Methode steckt unter Umständen schon freigegeben wurde. Hört sich doof an, ich weiß, aber wenn der Speicher nicht anderweitig verwendet wurde, stehen noch die gleichen Daten drin, so dass trotz free eine Methode noch halbwegs durchlaufen kann. Aber das ist jetzt wirklich geraten
|
Re: Schleife / Ungültige Zeigeroperation!?
Oder i ist global deklariert und kommt nach dem Prozedur-Aufruf aun eine Zeile, die mit dem Wert 13 nichts anfangen kann.
|
Re: Schleife / Ungültige Zeigeroperation!?
Um den Code noch zu erweitern:
Delphi-Quellcode:
Nach dem Fehler Springt er ans ende des Buttonclick-ereignisses.
procedure Tgrafiken.Button1Click(Sender: TObject);
begin jahr:='2006'; jahrund1:='2007'; apg; end; procedure tgrafiken.apg; var he,he2:integer; monat: array of array of integer; i,z:integer; BEGIN he:=1; zqapg.SQL.Text:='select * from fehlerorte'; zqapg.Open; setlength(monat,12,zqapg.RecordCount); z:=zqapg.RecordCount; repeat chart3.AddSeries(tbarseries.Create(self)); chart3.Series[he].Title:=zqapg.FieldValues['bez']; chart3.Series[he].SeriesColor:=farben[he]; zqapg.Next; he:=he+1; until zqapg.Eof; he2:=1; { repeat zqapg.SQL.Text:='select * from listeorte where `orte`='''+inttostr(he2)+''''; zqapg.Open; chart3.Series[he2].AddXY(1,zqapg.RecordCount,'Januar',farben[he2]); he2:=he2+1; until he2=he; } FOR i:=1 TO 12 DO begin he2:=1; if i<9 then begin repeat zqapg.SQL.Text:='select * from liste INNER JOIN listeorte on reklamnr=liste where (`orte`='''+inttostr(he2)+''') AND (`reklamdatum`>='''+jahr+'-0'+inttostr(i)+'-01'') AND (`reklamdatum`<'''+jahr+'-0'+inttostr(i+1)+'-01'')'; zqapg.Open; monat[i-1,he2]:=zqapg.RecordCount; he2:=he2+1; until he2=he; end; if i=9 then begin repeat zqapg.SQL.Text:='select * from liste INNER JOIN listeorte on reklamnr=liste where `orte`='''+inttostr(he2)+''' AND (`reklamdatum`>='''+jahr+'-0'+inttostr(i)+'-01'') AND (`reklamdatum`<'''+jahr+'-'+inttostr(i+1)+'-01'')'; zqapg.Open; monat[i-1,he2]:=zqapg.RecordCount; he2:=he2+1; until he2=he; end; if (i=10) or (i=11) then begin repeat zqapg.SQL.Text:='select * from liste INNER JOIN listeorte on reklamnr=liste where `orte`='''+inttostr(he2)+''' AND (`reklamdatum`>='''+jahr+'-'+inttostr(i)+'-01'') AND (`reklamdatum`<'''+jahr+'-'+inttostr(i+1)+'-01'')'; zqapg.Open; monat[i-1,he2]:=zqapg.RecordCount; he2:=he2+1; until he2=he; end; if i=12 then begin repeat zqapg.SQL.Text:='select * from liste INNER JOIN listeorte on reklamnr=liste where `orte`='''+inttostr(he2)+''' AND (`reklamdatum`>='''+jahr+'-'+inttostr(i)+'-01'') AND (`reklamdatum`<'''+jahrund1+'-01-01'')'; zqapg.Open; monat[i-1,he2]:=zqapg.RecordCount; he2:=he2+1; until he2=he; end; end; end; |
Re: Schleife / Ungültige Zeigeroperation!?
Mach mal nur zum Test folgendes:
Delphi-Quellcode:
Theoretisch dürfte das keine Auswirkungen haben. Aber Theorie und Praxis....
// statt
setlength(monat,12,zqapg.RecordCount); // ändern zu: setlength(monat,13,zqapg.RecordCount); |
Re: Schleife / Ungültige Zeigeroperation!?
Boah neee.
Habe den Fehler gefunden ! Ich depp habe zwar an die Varialble i-1 gedacht, wenn ich Werte in das Array einlese, aber blöderweise den Wert von he2 vergessen. Da der ja dynamisch vom Recordcount kommt, (Beispiel 8 vorhandene Records) heißt es ja
Delphi-Quellcode:
.
setlength (12,8)
Was bedeutet: [0-11 und 0-7] Also muss auch bei he2 die -1 hinten dran. Blöder Fehler. Seltsam nur, dass der Fehler erst ganz am ende auftritt und er vorher bei der Zuweisung direkt nichts sagt. Vielen Dank für eure schnelle Hilfe. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:05 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz