Momenteel ben ik bezig met iets te proggen in D7, alleen kom ik iets heel raars tegen in een for lus 
Kijk en huiver:

Het vakje rechtonder zijn de watches op het moment van de blauwe balk
Met bijbehorend stukje code:
Zoals je zit heb ik een plaatje gemaakt met 3 watches: integer i, tblSupportDesk.Fields.count en tblSupportDesk.Fields.count-1, waarbij tblSupportDesk.Fields.count-1 ALTIJD 15 is, zelfs in de for-lus tijdens debuggen.
Wat er in de bovenstaande code gebeurd is dat de i in de for-lus tijdens telkens met 1 wordt opgehoogt TOT 15 (tblSupportDesk.Fields.count-1 is immers ten alle tijden 15) alleen na de 15 hoogt hij i nog een keer met 1 op waardoor i 16 wordt
gevolg is dus dat ik een index out of bounds krijg tijdens het benaderen van het FIelds array van de TADOTable (tblSupportDesk.Fields[i].fieldname)..
Wat ik al geprobeerd heb is boven de for-lus een aparte interger de waarde van tblSupportDesk.Fields.count-1 toe te kennen en daarna pas de for-lus in te gaan, hier wordt i ook nog steeds 16.
Zeg ik for i:=0 to 15 do dan werkt het wel....
Wie weet wat ik over het hoofd zie of wat er fout gaat?
Kijk en huiver:

Het vakje rechtonder zijn de watches op het moment van de blauwe balk
Met bijbehorend stukje code:
Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| if (tblSupportDesk.State = dsEdit) then begin for i:= 0 to (tblSupportDesk.Fields.count-1) do begin try if (tblSupportDesk.Fields[i].fieldname <> 'Sleutel') then begin if(tblVergelijkSD.FieldByName(tblSupportDesk.Fields[i].fieldname).asString <> tblSupportDesk.FieldByName(tblSupportDesk.Fields[i].fieldname).asString) then begin // als er iets anders in vergelijkSG staat dan in tblsupportdesk // regel toevoegen aan s ChangeNote.add(tblSupportDesk.Fields[i].fieldname+' > "'+tblVergelijkSD.FieldByName(tblSupportDesk.Fields[i].fieldname).asString+'" = "'+tblSupportDesk.FieldByName(tblSupportDesk.Fields[i].fieldname).asString+'"'); end; end; except end; end; |
Zoals je zit heb ik een plaatje gemaakt met 3 watches: integer i, tblSupportDesk.Fields.count en tblSupportDesk.Fields.count-1, waarbij tblSupportDesk.Fields.count-1 ALTIJD 15 is, zelfs in de for-lus tijdens debuggen.
Wat er in de bovenstaande code gebeurd is dat de i in de for-lus tijdens telkens met 1 wordt opgehoogt TOT 15 (tblSupportDesk.Fields.count-1 is immers ten alle tijden 15) alleen na de 15 hoogt hij i nog een keer met 1 op waardoor i 16 wordt
Wat ik al geprobeerd heb is boven de for-lus een aparte interger de waarde van tblSupportDesk.Fields.count-1 toe te kennen en daarna pas de for-lus in te gaan, hier wordt i ook nog steeds 16.
Zeg ik for i:=0 to 15 do dan werkt het wel....
Wie weet wat ik over het hoofd zie of wat er fout gaat?
[ Voor 17% gewijzigd door remier op 15-12-2004 16:54 . Reden: Syntax codeblok ]
Heah what?!?? O, signature??