Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Please review this procedure to open a table...
Message
 
 
To
15/06/2009 11:03:29
General information
Forum:
Visual FoxPro
Category:
Databases,Tables, Views, Indexing and SQL syntax
Environment versions
Visual FoxPro:
VFP 9 SP2
Database:
Visual FoxPro
Miscellaneous
Thread ID:
01406084
Message ID:
01406091
Views:
49
See also message # 1217880 for my variation of it (VFP6 days).

>I've tried to make s simple procedure that will open a table, set the order, set the alias, and set the buffermode, and handle the NoUpdate clause.
>
>Will you all please review it and see if you can suggest any enhancements or better architecture:
>
>
>*=============================================================================  
>*== 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
>
>
>And the supporting SetBuffermode function:
>
>*-----------------------------------------------------------------------
>*--  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
>
If it's not broken, fix it until it is.


My Blog
Previous
Reply
Map
View

Click here to load this message in the networking platform