** Written by Brandon Harker ** 2009-Oct-26 ** Program induces Foxpro index errors when used with SMB2 ** Switching to SMB eliminates errors close data all SET ESCAPE ON SET EXCLUSIVE OFF SET REPROCESS TO 5 SET TABLEVALIDATE TO 3 IF MESSAGEBOX("Server?",4+32+0)=6 ** this is the 1st Vista computer ** create c:\ice folder and share it before running this program IF !DIRECTORY('c:\ice') MESSAGEBOX("Please create and share c:\ice before running this program") RETURN ENDIF SET DEFAULT TO c:\ice IF FILE('icedbc.dbc') DELETE file c:\ice\icedbc.* DELETE FILE c:\ice\icenums.* DELETE FILE c:\ice\icetable.* ENDIF CREATE DATABASE 'ICEDBC.DBC' ***** Table setup for TRANSACTIONS ***** CREATE TABLE 'ICETABLE.DBF' NAME 'ICETABLE' (; PK I NOT NULL, ; SOURCE C(10) NOT NULL, ; SOURCENUM I NOT NULL, ; DATE_TIME T NOT NULL) ***** Create each index for TRANSACTIONS ***** SET COLLATE TO 'GENERAL' ALTER TABLE 'ICETABLE' ADD PRIMARY KEY PK TAG PK INDEX ON SOURCE TAG SOURCE INDEX ON SOURCENUM TAG SOURCENUM INDEX ON SOURCE+STR(SOURCENUM) TAG SOSO ***** Table setup for ICENUMS ***** CREATE TABLE 'ICENUMS.DBF' NAME 'ICENUMS' (; TABLENAME C(30) NOT NULL, ; FIELDNAME C(30) NOT NULL, ; FIELDVALUE I NOT NULL) INSERT INTO icenums (tablename, fieldname, fieldvalue) ; VALUES ("icetable","pk",1) ELSE ** this is the 2nd Vista computer ** so point to the 1st Vista's ice share SET DEFAULT TO \\serverpc\ice ENDIF LOCAL lnPK,lnX,lnLoops,lcSource,lnSourceNum DO WHILE .T. close data all TRY OPEN DATABASE icedbc SHARED USE icenums SHARED IN 0 USE icetable SHARED IN 0 CATCH ** oh well ENDTRY IF USED('icetable') lnLoops=INT(RAND()*200) lcSource=SYS(2015) lnSourceNum=INT(RAND()*5000) BEGIN TRANSACTION FOR lnX=1 TO lnLoops SELECT icenums LOCATE FOR tablename="icetable" AND fieldname="pk" IF FOUND() IF LOCK() lnPK=icenums.fieldvalue replace icenums.fieldvalue WITH lnPK+1 INSERT INTO icetable ; (pk,source,sourcenum,date_time) ; VALUES ; (lnPK,lcSource,lnSourceNum,DATETIME()) ENDIF ENDIF ENDFOR ** rollback every once in a while IF INT(RAND()*5)=4 ? 'rolled back'+TTOC(DATETIME()) ROLLBACK ELSE ? 'committed '+TTOC(DATETIME()) END TRANSACTION ENDIF UNLOCK ALL ENDIF WAIT WINDOW 'waiting .1 second' TIMEOUT .1 ENDDO close data all