Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Please review this procedure to open a table...
Message
 
 
À
15/06/2009 11:03:29
Information générale
Forum:
Visual FoxPro
Catégorie:
Base de données, Tables, Vues, Index et syntaxe SQL
Versions des environnements
Visual FoxPro:
VFP 9 SP2
Database:
Visual FoxPro
Divers
Thread ID:
01406084
Message ID:
01406092
Vues:
79
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
>
--sb--
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform