Comportamento anomalo dbrlock/dbunlock

Moderator: Enrico Maria Giordano

Post Reply
Patrizio
Posts: 90
Joined: Wed Nov 07, 2007 8:56 am
Location: Italy
Contact:

Comportamento anomalo dbrlock/dbunlock

Post by Patrizio »

Ciao a tutti,

anche se non è proprio il forum più indicato... vi è mai capitato un comportamento analogo?

Eseguendo questo esempio, compilato con le versioni aggiornate di xHarbour.com o xHarbour.org, alla seconda iterazione il lock di alcuni record (tipo l'805) non va a buon fine senza una motivazione logica.

L'unica differenza è che la versione compilata con l'xHarbour.org genera il comportamento strano solo se contestualmente crea il dbf, la versione xHarbour.com sempre.

Dopo vari tentativi ho scoperto che ordinando l'array con i record da bloccare pare funzionare, ma non mi sembra molto stabile come soluzione.

Code: Select all

#include "set.ch"
#include "dbinfo.ch"
REQUEST DBFCDX, DBFFPT

FUNC Main()
   LOCAL aRek     := {797,1197,805,5341,5112,804,9650,3492,3491,807,802,803,1209,9662,5113,808,800,801,806,809,798,811,812,5111,1196,3129,1198,1200,2776,5342,895,2027,1234,5110,5109,799}
   LOCAL aStruct  := {}
   LOCAL n, nRek
   rddSetDefault("DBFCDX")
   SET DBFLOCKSCHEME TO DB_DBFLOCK_CLIP
   IF !os_iswtsclient()
      os_netregok(.T.)
   ENDIF
   set( _SET_MBLOCKSIZE, 64 )
   set( _SET_AUTOPEN,   1 )
   set( _SET_AUTORDER,  1 )
   set( _SET_AUTOSHARE, 1 )
   set( _SET_OPTIMIZE, .T.)
   disablewaitlocks(.T.)

   IF !File("Test.dbf")
      aAdd(aStruct, { "ID",         "C",  4, 0 } )
      dbCreate("Test.dbf",aStruct)
      USE ("Test.dbf") NEW
      INDEX ON FIELD->ID       TAG "I1"
      FOR n := 1 TO 9999
         Test->(dbAppend())
         Test->ID  := StrZero(n,4)
      NEXT
      USE
   ENDIF
   USE ("Test.dbf") NEW SHARED
   FOR n := 1 TO 2
      FOR EACH nRek IN aRek
         Test->(dbGoTo(nRek))
         IF Test->(!dbrLock(RecNo()))
            ? 'Bad lock', Test->(RecNo())
         ENDIF
      NEXT
      Test->(dbUnlock())
   NEXT
   ? 'End'
RETURN NIL
 
Post Reply