Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Please review this procedure to open a table...
Message
From
15/06/2009 11:27:53
 
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:
01406096
Views:
64
I've always just set the known path to the data in a Set Path call and then I call this method with just the table name.

However, I see your point, and thanks for pointing that out.



>The code will not work as you expect if table name (tcTableName) includes extension or/and path.
>
>>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
>>
Previous
Reply
Map
View

Click here to load this message in the networking platform