>*============================================================================= >*== OpenTable - Generic Procedure to open a table, set the order, the alias, and the BefferMode >*== 1. Only the first two params are required, other are optional >*== 2. Pass in tnBufferMode=0 to open with NOUPDATE >*== (Although this a not valid VFP BufferMode value, I can catch it and use it to set NOUPDATE) >*== 3. tcAlias and NoUpdate feature will only be implemented if Alias is not already in use >*============================================================================= >Procedure OpenTable > >Lparameters tcTableName, tcIndex, tcAlias, tnBufferMode > >Local lcAgainClause, lcSelectAlias, lcUpdate, llUsedTest > > lcAgainClause='' > llUsedTest=Used(tcTableName) > lcSelectAlias=tcTableName > lcUpdate='' > > If Pcount()>=3 And !Empty(tcAlias) > lcAgainClause=' Again Alias ' + alltrim(tcAlias) > llUsedTest=Used(tcAlias) > lcSelectAlias=tcAlias > Endif > > If Vartype(tnBufferMode)='N' and tnBufferMode=0 > lcUpdate='NoUpdate' > Endif > > If !llUsedTest > Select 0 > Use (tcTableName) &lcAgainClause &lcUpdate > Else > Select(lcSelectAlias) > EndIf > > If !Empty(tcIndex) > Set Order to (tcIndex) > EndIf > > If Vartype(tnBufferMode)='N' and tnBufferMode>0 > SetBuffermode(tnBufferMode) > Endif > > Return (Upper(Alias())==Upper(tcTableName)) > > Endproc >>
>*----------------------------------------------------------------------- >*-- Set buffermode of current table to passed value >*---------------------------------------------------------------------- >Function SetBuffermode > >Lparameters tnBufferMode > >*!* 1 – Sets row and table buffering off. Record locking and data writing are identical to earlier FoxPro versions. (the default). >*!* 2 – Sets pessimistic row buffering on. >*!* 3 – Sets optimistic row buffering on. >*!* 4 – Sets pessimistic table buffering on. >*!* 5 – Sets optimistic table buffering on. > >*!* SET MULTILOCKS must be ON for all Buffering modes except 1 (off). >Set Multilocks On > > If Type('tnBufferMode')='N' > If CursorSetProp('Buffering', tnBufferMode)=.F. > =Messagebox('Error Setting Buffering Property of ' + Alias(), 0) > Endif > Endif > >EndFunc >Do a search here for usefile and usedbf for some ideas going back to 2001 or 2002. I posted some other prgs that do the same (one with foxfix and one with sdt). Just add the buffering mode.