AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Schleife / Ungültige Zeigeroperation!?

Ein Thema von morri · begonnen am 28. Jun 2006 · letzter Beitrag vom 28. Jun 2006
Antwort Antwort
morri

Registriert seit: 6. Jun 2006
Ort: Wuppertal
106 Beiträge
 
Delphi 7 Professional
 
#1

Schleife / Ungültige Zeigeroperation!?

  Alt 28. Jun 2006, 11:26
Hallo zusammen.


Folgender Code:


Delphi-Quellcode:
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;
Er geht alles durch, aber wenn er die For-Schleife durch hat, und oben dann i=13 ist, kommt sofort die Meldung:
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
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Schleife / Ungültige Zeigeroperation!?

  Alt 28. Jun 2006, 11:30
Hi

Zitat von morri:
[...] aber wenn er die For-Schleife durch hat, und oben dann i=13 ist, kommt sofort die Meldung:
Ungültige Zeigeroperation.
Wie kann i den Wert 13 annehmen, wenn die Zählvariable von 1 bis 12 läuft?
  Mit Zitat antworten Zitat
mquadrat

Registriert seit: 13. Feb 2004
1.113 Beiträge
 
Delphi XE2 Professional
 
#3

Re: Schleife / Ungültige Zeigeroperation!?

  Alt 28. Jun 2006, 11:33
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.
  Mit Zitat antworten Zitat
morri

Registriert seit: 6. Jun 2006
Ort: Wuppertal
106 Beiträge
 
Delphi 7 Professional
 
#4

Re: Schleife / Ungültige Zeigeroperation!?

  Alt 28. Jun 2006, 11:33
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.



edit:

Zitat:
Ich tippe eher in der nächsten Zeile nach der Schleife auf den Fehler.
aber das ist das Problem.
Danach ist nur noch das end; der Prozedur.
  Mit Zitat antworten Zitat
mquadrat

Registriert seit: 13. Feb 2004
1.113 Beiträge
 
Delphi XE2 Professional
 
#5

Re: Schleife / Ungültige Zeigeroperation!?

  Alt 28. Jun 2006, 11:36
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
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.338 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Schleife / Ungültige Zeigeroperation!?

  Alt 28. Jun 2006, 11:40
Oder i ist global deklariert und kommt nach dem Prozedur-Aufruf aun eine Zeile, die mit dem Wert 13 nichts anfangen kann.
Peter
  Mit Zitat antworten Zitat
morri

Registriert seit: 6. Jun 2006
Ort: Wuppertal
106 Beiträge
 
Delphi 7 Professional
 
#7

Re: Schleife / Ungültige Zeigeroperation!?

  Alt 28. Jun 2006, 11:42
Um den Code noch zu erweitern:

Delphi-Quellcode:
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;
Nach dem Fehler Springt er ans ende des Buttonclick-ereignisses.
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.338 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Schleife / Ungültige Zeigeroperation!?

  Alt 28. Jun 2006, 11:48
Mach mal nur zum Test folgendes:
Delphi-Quellcode:
// statt
  setlength(monat,12,zqapg.RecordCount);
// ändern zu:
  setlength(monat,13,zqapg.RecordCount);
Theoretisch dürfte das keine Auswirkungen haben. Aber Theorie und Praxis....
Peter
  Mit Zitat antworten Zitat
morri

Registriert seit: 6. Jun 2006
Ort: Wuppertal
106 Beiträge
 
Delphi 7 Professional
 
#9

Re: Schleife / Ungültige Zeigeroperation!?

  Alt 28. Jun 2006, 11:49
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 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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:11 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz