Page 2 of 2

Re: Very strange indexing problem

PostPosted: Thu Dec 11, 2014 8:28 am
by Antonio Linares
Done :-)

Re: Very strange indexing problem

PostPosted: Thu Dec 11, 2014 1:54 pm
by Antonio Linares
Michel,

I need your help to build a PRG without FWH that reproduces the error.

I just sent you an email, please have a look at it :-)

thanks,

Re: Very strange indexing problem

PostPosted: Tue Dec 16, 2014 1:31 am
by Jose Dolar
Hi All,

Any update?

Thank you,

Jose

Re: Very strange indexing problem

PostPosted: Tue Dec 16, 2014 9:50 am
by Antonio Linares
Jose,

Michel solved it. He modified some lines in his code and the problem went away.

His code is complex so I don't know for sure what made the trick, but it worked :-)

Re: Very strange indexing problem

PostPosted: Tue Dec 16, 2014 2:18 pm
by driessen
Antonio,

Thanks again for all your efforts in helping me.

I let my application do its task in another way after which the problem didn't occur anymore.
I really don't know what went wrong. But at the moment, my problem is solved. And that is the main thing.

Re: Very strange indexing problem

PostPosted: Tue Dec 16, 2014 5:05 pm
by Jose Dolar
Thank you guys for the quick reply.

How about Tim's observation on his app?

Hello Tim. Kindly comment. Thank you very much.

I am a bit worried because we have scheduled testing of our app built with Harbour 3.2 and FWH 14.11 early next year.

Regards to all,

Jose

Re: Very strange indexing problem

PostPosted: Tue Dec 16, 2014 6:48 pm
by joseluispalma
Hello, can you please share how you solved it please?.

Thank you.

Re: Very strange indexing problem

PostPosted: Tue Dec 16, 2014 8:19 pm
by Antonio Linares
Michel,

Could you compare your old code and the new one, using UltraCompare or any other similar tool, and post here the differences ?

many thanks :-)

Re: Very strange indexing problem

PostPosted: Tue Dec 16, 2014 8:51 pm
by driessen
Guys,

I put here the old code and the changed code. It won't be easy to compare them.

The old code :
Code: Select all  Expand view
FOR Agi=1 TO AgTel

    IF actie = "Insert"
       UnAGCODE := SPACE(10)
       FOR CreTel = 1 TO 100
           CreRecA1 := 0
           CreRecA1 := AddRecJuda()
           IF CreRecA1 <> 0 .AND. EMPTY(AG->AGINGDAT) .AND. EMPTY(AG->AGINGEVER)
              CreTel := 100
           ENDIF
       NEXT
       IF CreRecA1 <> 0 .AND. CreRecA1 = AG->(RECCOUNT())
          UnAGCODE := LeesAgUniek()
          GOTO CreRecA1
          OldPar[3] := RECNO()
       ELSE
          dRet := .F.
       ENDIF
    ENDIF

    BT_ET_Contr("cAGBTIJD","cAGETIJD")

    IF !cAGAGRAP
       IF !EMPTY(cAGBTIJD) .AND. ALLTRIM(cAGBTIJD) <> ":" .AND. !EMPTY(cAGRTIJD) .AND. ALLTRIM(cAGRTIJD) <> "00:00" .AND. ALLTRIM(cAGRTIJD) <> ":"
          UurVersch("cAGBTIJD","dAGBTIJD","cAGRTIJD","cNIETS1",.F.)
       ELSE
          dAGBTIJD := cAGBTIJD
       ENDIF
       IF !EMPTY(cAGETIJD) .AND. ALLTRIM(cAGETIJD) <> ":" .AND. !EMPTY(cAGRTIJD) .AND. ALLTRIM(cAGRTIJD) <> "00:00" .AND. ALLTRIM(cAGRTIJD) <> ":"
          UurVersch("cAGETIJD","dAGETIJD","cAGRTIJD","cNIETS1",.T.)
       ELSE
          dAGETIJD := cAGETIJD
       ENDIF
    ENDIF

    IF actie = "Update" .AND. CTOD(cAGDATUM) <> CTOD(pAGDATUM) .AND. MsgNoYes("U wijzigde de datum van dit agendapunt !!!" + CHR(13) + CHR(13) + "Moet dit agendapunt op de originele datum ook bewaard blijven ?","Kies "+CHR(34)+"JA"+CHR(34)+" of "+CHR(34)+"NEE"+CHR(34))
       UnAGCODE := SPACE(10)
       FOR CreTel = 1 TO 100
           CreRecA1 := 0
           CreRecA1 := AddRecJuda()
           IF CreRecA1 <> 0 .AND. EMPTY(AG->AGINGDAT) .AND. EMPTY(AG->AGINGEVER)
              CreTel := 100
           ENDIF
       NEXT
       IF CreRecA1 <> 0 .AND. CreRecA1 = AG->(RECCOUNT())
          UnAGCODE := LeesAgUniek()
          GOTO CreRecA1
          OldPar[3] := RECNO()
          oOrig     := .T.
       ELSE
          dRet := .F.
       ENDIF
    ENDIF

    SELECT AG
    IF dRet .AND. RecLockJuda(2,PROCNAME(),PROCLINE(),2,TaalCode)
       IF VAL(UnAGCODE) <> 0
          AG->AGCODE := UnAGCODE
       ENDIF
       AG->AGUSER    := &("cAGUSER"   + STR(Agi,1,0))
       AG->AGUSERN   := &("cAGUSERN"  + STR(Agi,1,0))
       AG->AGUSERNS  := &("cAGUSERNS" + STR(Agi,1,0))
       AG->AGDOSKOP  := cAGDOSKOP

       NaamSamen("AG->AGDOSSIER",cAGDOS1,cAGDOS2,cAGSDOS)

       SELECT DOSS
       SET ORDER TO 5
       SEEK(UPPER(ALLTRIM(AG->AGDOSSIER)))
       IF FOUND()
          cBKBEHE    := DOSS->DBEHENR
       ENDIF
       SELECT AG
       AG->AGBEHEER  := cBKBEHE
       cBKBEHE       := SPACE(7)

       AG->AGDATUM   := CTOD(cAGDATUM)
       AG->AGGROEP   := cAGGROEP
       AG->AGSRTNR   := cAGSRTNR
       AG->AGSRTNRN  := cAGSRTNRN
       AG->AGVERGNR  := cAGVERGNR
       AG->AGVERGNRN := cAGVERGNRN

       IF !cAGAGRAP
          IF !EMPTY(cAGBTIJD) .AND. ALLTRIM(cAGBTIJD) <> ":" .AND. !EMPTY(cAGRTIJD) .AND. ALLTRIM(cAGRTIJD) <> "00:00" .AND. ALLTRIM(cAGRTIJD) <> ":"
             UurVersch("cAGBTIJD","dAGBTIJD","cAGRTIJD","cNIETS1",.F.)
          ELSE
             dAGBTIJD := cAGBTIJD
          ENDIF
          IF !EMPTY(cAGETIJD) .AND. ALLTRIM(cAGETIJD) <> ":" .AND. !EMPTY(cAGRTIJD) .AND. ALLTRIM(cAGRTIJD) <> "00:00" .AND. ALLTRIM(cAGRTIJD) <> ":"
             UurVersch("cAGETIJD","dAGETIJD","cAGRTIJD","cNIETS1",.T.)
          ELSE
             dAGETIJD := cAGETIJD
          ENDIF
       ELSE
          dAGBTIJD   := "99:99"
          dAGETIJD   := "99:99"
       ENDIF

       AG->AGBTIJD   := IF(!cAGAGRAP,IF(EMPTY(cAGBTIJD) .OR. ALLTRIM(cAGBTIJD)="00:00" .OR. ALLTRIM(cAGBTIJD)=":",PAR->STBTIJD,cAGBTIJD),"99:99")
       AG->AGETIJD   := IF(!cAGAGRAP,IF(EMPTY(cAGETIJD) .OR. ALLTRIM(cAGETIJD)="00:00" .OR. ALLTRIM(cAGETIJD)=":",PAR->STETIJD,cAGETIJD),"99:99")
       AG->AGRTIJD   := IF(EMPTY(cAGRTIJD) .OR. ALLTRIM(cAGRTIJD)="00:00" .OR. ALLTRIM(cAGRTIJD)=":","00:00",cAGRTIJD)

       IF !cAGAGRAP
          IF EMPTY(cAGRTIJD) .OR. ALLTRIM(cAGRTIJD)=":" .OR. ALLTRIM(cAGRTIJD) = "00:00" .OR. ALLTRIM(cAGRTIJD) = "99:99"
             AG->AGERTIJD := 10000 + (Uur60To100(cAGETIJD) * 100)
          ELSE
             UurVersch("AG->AGETIJD","cAGERTIJD","AG->AGRTIJD",,.T.,.F.)
             AG->AGERTIJD := 10000 + (Uur60To100(cAGERTIJD) * 100)
          ENDIF
       ELSE
          AG->AGERTIJD := 0
       ENDIF

       AG->AGBCODE   := UPPER(&("cAGUSER"+STR(Agi,1,0))+DTOS(CTOD(cAGDATUM))+LEFT(dAGBTIJD,2)+RIGHT(dAGBTIJD,2))
       AG->AGECODE   := UPPER(&("cAGUSER"+STR(Agi,1,0))+DTOS(CTOD(cAGDATUM))+LEFT(dAGETIJD,2)+RIGHT(dAGETIJD,2))
       AG->AGBCODC   := RIGHT(AG->AGBCODE,12)
       AG->AGECODC   := RIGHT(AG->AGECODE,12)

       AG->AGOMSCH   := cAGOMSCH
       AG->AGALARM   := IF(!cAGAFGESL,cAGALARM,.F.)
       IF cAGALARM .AND. CTOD(cAGDATUM) <> CTOD(oAGDATUM)
          IF oAANTDAG <> 0 .AND. MsgYesNo("Mag de alarmdatum in verhouding aangepast worden"+CHR(13)+"aan de ingegeven datum van het alarmpunt ?","Kies "+CHR(34)+"JA"+CHR(34)+" of "+CHR(34)+"NEE"+CHR(34))
             AG->AGALDAG := CTOD(cAGDATUM) - oAANTDAG
          ELSEIF MsgYesNo("Mag de alarmdatum aan de datum"+CHR(13)+"van het agendapunt aangepast worden ?","Kies "+CHR(34)+"JA"+CHR(34)+" of "+CHR(34)+"NEE"+CHR(34))
             AG->AGALDAG := CTOD(cAGDATUM)
          ENDIF
       ELSE
          AG->AGALDAG := IF(!cAGAFGESL .AND. cAGALARM,CTOD(cAGALDAG),CTOD("  /  /    "))
       ENDIF
       AG->AGALUUR   := IF(!cAGAFGESL .AND. cAGALARM .AND. !EMPTY(cAGALUUR) .AND. ALLTRIM(cAGALUUR) <> ":",cAGALUUR,"99:99")
       AG->AGALCODE  := IF(!cAGAFGESL .AND. cAGALARM,UPPER(&("cAGUSER"+STR(Agi,1,0))+DTOS(AG->AGALDAG)+IF(AG->AGALUUR<>"99:99",LEFT(AG->AGALUUR,2)+RIGHT(AG->AGALUUR,2),"0000")),SPACE(19))
       AG->AGVOORL   := IF(!cAGAGRAP,cAGVOORL,.F.)
       AG->AGPRNR    := cAGPRNR
       AG->AGPRNRN   := cAGPRNRN
       AG->AGANNR    := cAGANNR
       AG->AGANNRN   := cAGANNRN
       AG->AGMETWIE  := cAGMETWIE
       AG->AGAGDOS   := IF(!cAGAGRAP,cAGAGDOS,.F.)
       AG->AGAGKAN   := IF(!cAGAGRAP,cAGAGKAN,.F.)
       AG->AGAGPRO   := IF(!cAGAGRAP,cAGAGPRO,.F.)
       AG->AGAGPER   := IF(!cAGAGRAP,cAGAGPER,.F.)
       AG->AGAGRAP   := cAGAGRAP
       AG->AGHOOFD   := IF(!cAGAGRAP,cAGHOOFD,.F.)
       AG->AGAFGESL  := IF(oOrig,.F.,cAGAFGESL)
       AG->AGINGDAT  := CTOD(cAGINGDAT)
       AG->AGINGEVER := cAGINGEVER
       AG->AGCHADAT  := DATE()
       AG->AGCHANGER := US->UAFKORT
       AG->AGOUTLID  := cAGOUTLID
       AG->AGOUTLDAT := cAGOUTLDAT
       AG->AGEXPORT  := cAGEXPORT
       AG->AGKM      := cAGKM
       AG->AGMEMO    := cAGMEMO
    ENDIF
    RecUnLockJuda(2,PROCNAME(),PROCLINE())

    EDossier := AG->AGDOSSIER

NEXT
The changed code :
Code: Select all  Expand view
FOR Agi=1 TO AgTel

    IF actie = "Insert"
       UnAGCODE := SPACE(10)
       FOR CreTel = 1 TO 100
           CreRecA1 := 0
           CreRecA1 := AddRecJuda()
           IF CreRecA1 <> 0 .AND. EMPTY(AG->AGINGDAT) .AND. EMPTY(AG->AGINGEVER)
              CreTel := 100
           ENDIF
       NEXT
       IF CreRecA1 <> 0 .AND. CreRecA1 = AG->(RECCOUNT())
          UnAGCODE := LeesAgUniek()
          GOTO CreRecA1
          OldPar[3] := RECNO()
       ELSE
          dRet := .F.
       ENDIF
    ENDIF

    BT_ET_Contr("cAGBTIJD","cAGETIJD")

    IF !cAGAGRAP
       IF !EMPTY(cAGBTIJD) .AND. ALLTRIM(cAGBTIJD) <> ":" .AND. !EMPTY(cAGRTIJD) .AND. ALLTRIM(cAGRTIJD) <> "00:00" .AND. ALLTRIM(cAGRTIJD) <> ":"
          UurVersch("cAGBTIJD","dAGBTIJD","cAGRTIJD","cNIETS1",.F.)
       ELSE
          dAGBTIJD := cAGBTIJD
       ENDIF
       IF !EMPTY(cAGETIJD) .AND. ALLTRIM(cAGETIJD) <> ":" .AND. !EMPTY(cAGRTIJD) .AND. ALLTRIM(cAGRTIJD) <> "00:00" .AND. ALLTRIM(cAGRTIJD) <> ":"
          UurVersch("cAGETIJD","dAGETIJD","cAGRTIJD","cNIETS1",.T.)
       ELSE
          dAGETIJD := cAGETIJD
       ENDIF
    ENDIF

    cAGRECORD := OldPar[3]
    cAGDELETE := .F.

    IF actie = "Update" .AND. CTOD(cAGDATUM) <> CTOD(pAGDATUM)
       UnAGCODE  := SPACE(10)
       FOR CreTel = 1 TO 100
           CreRecA1 := 0
           CreRecA1 := AddRecJuda()
           IF CreRecA1 <> 0 .AND. EMPTY(AG->AGINGDAT) .AND. EMPTY(AG->AGINGEVER)
              CreTel := 100
           ENDIF
       NEXT
       IF CreRecA1 <> 0 .AND. CreRecA1 = AG->(RECCOUNT())
          UnAGCODE := LeesAgUniek()
          GOTO CreRecA1
          IF !MsgNoYes("U wijzigde de datum van dit agendapunt !!!" + CHR(13) + CHR(13) + "Moet dit agendapunt op de originele datum ook bewaard blijven ?","Kies "+CHR(34)+"JA"+CHR(34)+" of "+CHR(34)+"NEE"+CHR(34))
             cAGDELETE := .T.
          ENDIF
          OldPar[3] := RECNO()
          oOrig     := .T.
       ELSE
          dRet := .F.
       ENDIF
    ENDIF

    IF dRet .AND. RecLockJuda(2,PROCNAME(),PROCLINE(),2,TaalCode)
       IF VAL(UnAGCODE) <> 0
          AG->AGCODE := UnAGCODE
       ENDIF
       AG->AGUSER    := &("cAGUSER"   + STR(Agi,1,0))
       AG->AGUSERN   := &("cAGUSERN"  + STR(Agi,1,0))
       AG->AGUSERNS  := &("cAGUSERNS" + STR(Agi,1,0))
       AG->AGDOSKOP  := cAGDOSKOP

       NaamSamen("AG->AGDOSSIER",cAGDOS1,cAGDOS2,cAGSDOS)

       SELECT DOSS
       SET ORDER TO 5
       SEEK(UPPER(ALLTRIM(AG->AGDOSSIER)))
       IF FOUND()
          cBKBEHE    := DOSS->DBEHENR
       ENDIF
       SELECT AG
       AG->AGBEHEER  := cBKBEHE
       cBKBEHE       := SPACE(7)

       AG->AGDATUM   := CTOD(cAGDATUM)
       AG->AGGROEP   := cAGGROEP
       AG->AGSRTNR   := cAGSRTNR
       AG->AGSRTNRN  := cAGSRTNRN
       AG->AGVERGNR  := cAGVERGNR
       AG->AGVERGNRN := cAGVERGNRN

       IF !cAGAGRAP
          IF !EMPTY(cAGBTIJD) .AND. ALLTRIM(cAGBTIJD) <> ":" .AND. !EMPTY(cAGRTIJD) .AND. ALLTRIM(cAGRTIJD) <> "00:00" .AND. ALLTRIM(cAGRTIJD) <> ":"
             UurVersch("cAGBTIJD","dAGBTIJD","cAGRTIJD","cNIETS1",.F.)
          ELSE
             dAGBTIJD := cAGBTIJD
          ENDIF
          IF !EMPTY(cAGETIJD) .AND. ALLTRIM(cAGETIJD) <> ":" .AND. !EMPTY(cAGRTIJD) .AND. ALLTRIM(cAGRTIJD) <> "00:00" .AND. ALLTRIM(cAGRTIJD) <> ":"
             UurVersch("cAGETIJD","dAGETIJD","cAGRTIJD","cNIETS1",.T.)
          ELSE
             dAGETIJD := cAGETIJD
          ENDIF
       ELSE
          dAGBTIJD   := "99:99"
          dAGETIJD   := "99:99"
       ENDIF

       AG->AGBTIJD   := IF(!cAGAGRAP,IF(EMPTY(cAGBTIJD) .OR. ALLTRIM(cAGBTIJD)="00:00" .OR. ALLTRIM(cAGBTIJD)=":",PAR->STBTIJD,cAGBTIJD),"99:99")
       AG->AGETIJD   := IF(!cAGAGRAP,IF(EMPTY(cAGETIJD) .OR. ALLTRIM(cAGETIJD)="00:00" .OR. ALLTRIM(cAGETIJD)=":",PAR->STETIJD,cAGETIJD),"99:99")
       AG->AGRTIJD   := IF(EMPTY(cAGRTIJD) .OR. ALLTRIM(cAGRTIJD)="00:00" .OR. ALLTRIM(cAGRTIJD)=":","00:00",cAGRTIJD)

       IF !cAGAGRAP
          IF EMPTY(cAGRTIJD) .OR. ALLTRIM(cAGRTIJD)=":" .OR. ALLTRIM(cAGRTIJD) = "00:00" .OR. ALLTRIM(cAGRTIJD) = "99:99"
             AG->AGERTIJD := 10000 + (Uur60To100(cAGETIJD) * 100)
          ELSE
             UurVersch("AG->AGETIJD","cAGERTIJD","AG->AGRTIJD",,.T.,.F.)
             AG->AGERTIJD := 10000 + (Uur60To100(cAGERTIJD) * 100)
          ENDIF
       ELSE
          AG->AGERTIJD := 0
       ENDIF

       AG->AGBCODE   := UPPER(&("cAGUSER"+STR(Agi,1,0))+DTOS(CTOD(cAGDATUM))+LEFT(dAGBTIJD,2)+RIGHT(dAGBTIJD,2))
       AG->AGECODE   := UPPER(&("cAGUSER"+STR(Agi,1,0))+DTOS(CTOD(cAGDATUM))+LEFT(dAGETIJD,2)+RIGHT(dAGETIJD,2))
       AG->AGBCODC   := RIGHT(AG->AGBCODE,12)
       AG->AGECODC   := RIGHT(AG->AGECODE,12)

       AG->AGOMSCH   := cAGOMSCH
       AG->AGALARM   := IF(!cAGAFGESL,cAGALARM,.F.)
       IF cAGALARM .AND. CTOD(cAGDATUM) <> CTOD(oAGDATUM)
          IF oAANTDAG <> 0 .AND. MsgYesNo("Mag de alarmdatum in verhouding aangepast worden"+CHR(13)+"aan de ingegeven datum van het alarmpunt ?","Kies "+CHR(34)+"JA"+CHR(34)+" of "+CHR(34)+"NEE"+CHR(34))
             AG->AGALDAG := CTOD(cAGDATUM) - oAANTDAG
          ELSEIF MsgYesNo("Mag de alarmdatum aan de datum"+CHR(13)+"van het agendapunt aangepast worden ?","Kies "+CHR(34)+"JA"+CHR(34)+" of "+CHR(34)+"NEE"+CHR(34))
             AG->AGALDAG := CTOD(cAGDATUM)
          ENDIF
       ELSE
          AG->AGALDAG := IF(!cAGAFGESL .AND. cAGALARM,CTOD(cAGALDAG),CTOD("  /  /    "))
       ENDIF
       AG->AGALUUR   := IF(!cAGAFGESL .AND. cAGALARM .AND. !EMPTY(cAGALUUR) .AND. ALLTRIM(cAGALUUR) <> ":",cAGALUUR,"99:99")
       AG->AGALCODE  := IF(!cAGAFGESL .AND. cAGALARM,UPPER(&("cAGUSER"+STR(Agi,1,0))+DTOS(AG->AGALDAG)+IF(AG->AGALUUR<>"99:99",LEFT(AG->AGALUUR,2)+RIGHT(AG->AGALUUR,2),"0000")),SPACE(19))
       AG->AGVOORL   := IF(!cAGAGRAP,cAGVOORL,.F.)
       AG->AGPRNR    := cAGPRNR
       AG->AGPRNRN   := cAGPRNRN
       AG->AGANNR    := cAGANNR
       AG->AGANNRN   := cAGANNRN
       AG->AGMETWIE  := cAGMETWIE
       AG->AGAGDOS   := IF(!cAGAGRAP,cAGAGDOS,.F.)
       AG->AGAGKAN   := IF(!cAGAGRAP,cAGAGKAN,.F.)
       AG->AGAGPRO   := IF(!cAGAGRAP,cAGAGPRO,.F.)
       AG->AGAGPER   := IF(!cAGAGRAP,cAGAGPER,.F.)
       AG->AGAGRAP   := cAGAGRAP
       AG->AGHOOFD   := IF(!cAGAGRAP,cAGHOOFD,.F.)
       AG->AGAFGESL  := IF(oOrig,.F.,cAGAFGESL)
       AG->AGINGDAT  := CTOD(cAGINGDAT)
       AG->AGINGEVER := cAGINGEVER
       AG->AGCHADAT  := DATE()
       AG->AGCHANGER := US->UAFKORT
       AG->AGOUTLID  := cAGOUTLID
       AG->AGOUTLDAT := cAGOUTLDAT
       AG->AGEXPORT  := cAGEXPORT
       AG->AGKM      := cAGKM
       AG->AGMEMO    := cAGMEMO
    ENDIF
    RecUnLockJuda(2,PROCNAME(),PROCLINE())

    EDossier := AG->AGDOSSIER

    IF cAGDELETE .AND. cAGRECORD <> 0
       GOTO cAGRECORD
       IF RecLockJuda(2,PROCNAME(),PROCLINE(),2,TaalCode)
          DELETE
       ENDIF
       RecUnLockJuda(2,PROCNAME(),PROCLINE())
       cAGRECORD := 0
       cAGDELETE := .F.
       GOTO OldPar[3]
    ENDIF

NEXT
I hope it can be a help.

Re: Very strange indexing problem

PostPosted: Tue Dec 16, 2014 9:01 pm
by Antonio Linares
Michel,

Thanks! :-)

Re: Very strange indexing problem

PostPosted: Wed Dec 17, 2014 7:03 pm
by TimStone
I mentioned that a few of my clients had some problems but I do not have anything further.

I am doing a major revision / optimization to my application so I won't see if the problem still exists until early 2015. It may be cleared up as I check all of the code very carefully to be sure all files properly close at the correct time.

Tim

Re: Very strange indexing problem

PostPosted: Thu Dec 18, 2014 1:16 am
by James Bott
Michel,

I notice that your code is rather hard to read. I hope you don't mind me making a few suggestions.

One issue is that all your fieldnames begin with the same first two characters (AG), which I assume is your code for the file from which they belong. Unfortunately, this uses up 2 of the 8 characters you have for fieldnames and all the fieldnames begin to look alike.

If you use database objects you can solve both problems. Instead of this:

AG->AGGROEP := cAGGROEP
AG->AGSRTNR := cAGSRTNR
AG->AGSRTNRN := cAGSRTNRN
AG->AGVERGNR := cAGVERGNR
AG->AGVERGNRN := cAGVERGNRN

You would have this:

oAG:GROEP := cGROEP
oAG:SRTNR := cSRTNR
oAG:SRTNRN := cSRTNRN
oAG:VERGNR := cVERGNR
oAG:VERGNRN := cVERGNRN

You can also increase the length of your fieldnames to 8 characters so they are more readable. Granted this is not feasible for an existing app.

However, you don't even need to use memory variables, you can assign data directly like this:

oAG:GROEP := "cat"
oAG:SRTNR := "mouse"
oAG:SRTNRN := "frog"
oAG:VERGNR := "dog"
oAG:VERGNRN := "goose"

Now, since you are using the database object instead of memory variables the database ID is obvious (oAG) and you still have more readable fieldnames. I don't know your language, but for example, in English, you can use syntax like:

oCustomer:Address

Which is pretty clear. Much more clear than something like cCUADR.

Also, when using the above syntax, you eliminate all the scatter/gather code and just assign data directly to the database object. Note that the data is being assigned to a buffer so you can cancel the transaction if desired. To cancel you just do nothing, or to save it to the DBF you just do:

oCustomer:save()

Wow, how simple is that!

Once you start coding like this, you can write much smaller routines that are easier to read, and thus you will have fewer bugs. Also, since the code is smaller it will use less memory and execute faster.

You can read more about database objects on my website at http://www.gointellitech.com.

James

Re: Very strange indexing problem

PostPosted: Sun Dec 21, 2014 1:14 pm
by David Williams
Michel,

That is very good advice from James. I'm glad you have solved your (our) problem.

Merry Christmas to Everyone.

David :D