Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Please review this procedure to open a table...
Message
De
15/06/2009 11:31:09
 
 
À
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:
01406098
Vues:
61
>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
>
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.
.·*´¨)
.·`TCH
(..·*

010000110101001101101000011000010111001001110000010011110111001001000010011101010111001101110100
"When the debate is lost, slander becomes the tool of the loser." - Socrates
Vita contingit, Vive cum eo. (Life Happens, Live With it.)
"Life is not measured by the number of breaths we take, but by the moments that take our breath away." -- author unknown
"De omnibus dubitandum"
Précédent
Répondre
Fil
Voir

Click here to load this message in the networking platform