SYS(1104,100) GO RECNO(100) IN 100Thanks,
>#DEFINE DBNAME SYS(2023)+'\DB______1' >#DEFINE TABLENAME SYS(2023)+'\TABLE______1' > >* You changes the BUFFERINGMODE here >#DEFINE _BUFFERINGMODE 1 >CLEAR >ERASE FORCEEXT(DBNAME,'*') >ERASE FORCEEXT(TABLENAME ,'*') >* OPEN SESSION 1 > >S1=CREATEOBJECT("SESSION") > SET DATASESSION TO S1.DATASESSIONID > * build a DBC for do the test > CREATE DATABASE DBNAME > CREATE TABLE TABLENAME ( F1 I) > APPEND BLANK > * relase exclusive access > CLOSE DATABASES > SET MULTILOCKS OFF > * open share > USE TABLENAME IN 100 ALIAS TABLE_ON_SESSION_1 SHARE > =CURSORSETPROP("Buffering",_BUFFERINGMODE,100) > GO TOP IN 100 > ? [BUFFERING's table :],CURSORGETPROP("Buffering",100) > ? ALIAS(100),"CURRENT RECNO()",RECNO(100),"CURRENT VALUE",TABLE_ON_SESSION_1.F1 > > ******************************************************** > * NOW SIMULATE ANOTHER SESSION, THIS WRITE ON THE TABLE NOW > =anotherSession('transaction_X') > ******************************************************** > SET DATASESSION TO S1.DATASESSIONID > ? > ? "EXTREME BUG: THE SESSION 1 WORKAREA IS NOT TOUCHED, THEN" > ? "EXPECTED 2 because field value on disk it is 2" > > ? ALIAS(100),"CURRENT RECNO()",RECNO(100),"CURRENT VALUE",TABLE_ON_SESSION_1.F1 > ? > ? "NOW RELEASE the table ( VFP release the file handle too" > USE IN 100 > ? "REOPEN THE TABLE, NOW THE VALUE IT IS CORRECT" > USE TABLENAME IN 100 ALIAS TABLE_ON_SESSION_1 EXCLUSIVE > ? ALIAS(100),"CURRENT RECNO()",RECNO(100),"CURRENT VALUE",TABLE_ON_SESSION_1.F1 > RELEASE S1 >CLOSE ALL >ERASE FORCEEXT(TABLENAME ,'*') >ERASE FORCEEXT(DBNAME,'*') > >PROCEDURE anotherSession(_alias) > ? > ? CHR(9),">>>>>>>SIMULATE ANOTHER TRANSACTION, THIS ADD 2 TO THE FIELD VALUE" > WITH CREATEOBJECT("SESSION") > SET DATASESSION TO .DATASESSIONID > USE TABLENAME ALIAS (m._alias) SHARED > ? [BUFFERING's table :],CURSORGETPROP("Buffering") > BEGIN TRANSACTION > REPLACE F1 WITH F1+2 > END TRANSACTION > ? ALIAS(),"CURRENT RECNO()",RECNO(),"CURRENT VALUE",F1 > ENDWITH > ? CHR(9),">>>>>>>TRANSACTION IT IS CLOSED, FIELD HAVE VALUE 2" >ENDPROC >>
>#DEFINE DBNAME SYS(2023)+'\DB______1' >#DEFINE TABLENAME SYS(2023)+'\TABLE______1' > >* You changes the BUFFERINGMODE here >#DEFINE _BUFFERINGMODE 1 >CLEAR >ERASE FORCEEXT(DBNAME,'*') >ERASE FORCEEXT(TABLENAME ,'*') >* OPEN SESSION 1 > >S1=CREATEOBJECT("SESSION") > SET DATASESSION TO S1.DATASESSIONID > * build a DBC for do the test > CREATE DATABASE DBNAME > CREATE TABLE TABLENAME ( F1 I) > APPEND BLANK > * relase exclusive access > CLOSE DATABASES > SET MULTILOCKS OFF > * open share > USE TABLENAME IN 100 ALIAS TABLE_ON_SESSION_1 SHARE > =CURSORSETPROP("Buffering",_BUFFERINGMODE,100) > GO TOP IN 100 > ? [BUFFERING's table :],CURSORGETPROP("Buffering",100) > ? ALIAS(100),"CURRENT RECNO()",RECNO(100),"CURRENT VALUE",TABLE_ON_SESSION_1.F1 > > ******************************************************** > * NOW SIMULATE ANOTHER SESSION, THIS WRITE ON THE TABLE NOW > =anotherSession('transaction_X') > ******************************************************** > SET DATASESSION TO S1.DATASESSIONID > ? > ? "EXPECTED 2 because field value on disk it is 2" > > ? ALIAS(100),"CURRENT RECNO()",RECNO(100),"CURRENT VALUE",TABLE_ON_SESSION_1.F1 > ? > RELEASE S1 >CLOSE ALL >ERASE FORCEEXT(TABLENAME ,'*') >ERASE FORCEEXT(DBNAME,'*') > >PROCEDURE anotherSession(_alias) > ? > ? CHR(9),">>>>>>>SIMULATE ANOTHER TRANSACTION, THIS ADD 2 TO THE FIELD VALUE" > WITH CREATEOBJECT("SESSION") > SET DATASESSION TO .DATASESSIONID > USE TABLENAME ALIAS (m._alias) SHARED > ? [BUFFERING's table :],CURSORGETPROP("Buffering") > REPLACE F1 WITH F1+2 > ? ALIAS(),"CURRENT RECNO()",RECNO(),"CURRENT VALUE",F1 > ENDWITH > ? CHR(9),">>>>>>>TRANSACTION IT IS CLOSED, FIELD HAVE VALUE 2" >ENDPROC >>