plain text  |  CSS syntax coloring    (use 'plain text' for copying - this code may be inexact)

<MvCOMMENT>************ t r u X o f t   d B   L i b r a r y ***************************
| copyright (c) 1999+ truXoft. Use free but please keep credits.     http://truxoft.com          
| RESORTDB - resorts a database physically
| example call:  resortDB('prod', '/shop/product.dbf', 'prod.d.title')
***************************************************************************</MvCOMMENT>
<MvFUNCTION NAME="ResortDB" PARAMETERS="alias,fileNm,idxExpr">
 <MvOPEN NAME="{l.alias}" DATABASE="{l.fileNm}">
 <MvMAKEINDEX NAME="{l.alias}" INDEXFILE="{glosub(l.fileNm,'.dbf','.mvx')}" EXPR="{&[l.idxExpr];}" FLAGS="ascending,nounique">
 <MvASSIGN NAME="l.struct" VALUE="{glosub(l.fileNm, '.dbf', '-str.dbf')}">
 <MvASSIGN NAME="l.newDb" VALUE="{glosub(l.fileNm, '.dbf', '-new.dbf')}">
 <MvREVEALSTRUCTURE NAME="{l.alias}" DATABASE="{l.struct}">
 <MvOPEN NAME="Struct" DATABASE="{l.struct}">
 <MvIF EXPR="{MvOPEN_Error}">
   <H3>Cannot resort the <MvEVAL EXPR="{l.alias}"> database!</H3>
 <MvELSE>
   <MvASSIGN NAME="l.M" VALUE="MEMO">
   <MvASSIGN NAME="l.N" VALUE="NUMBER">
   <MvASSIGN NAME="l.C" VALUE="CHAR">
   <MvASSIGN NAME="l.B" VALUE="BOOL">
   <MvASSIGN NAME="l.D" VALUE="DATA">
   <MvASSIGN NAME="l.fields" VALUE="">
   <MvWHILE EXPR="{NOT Struct.d.EOF}">
     <MvASSIGN NAME="l.fields" VALUE="{l.fields $ ',' $ Struct.d.field_name $ ' ' $ l.&[Struct.d.field_type]; $ '(' $ Struct.d.field_len $ '.' $ Struct.d.field_dec $ ')'}">
     <MvSKIP NAME="Struct">
   </MvWHILE>

   <MvCREATE NAME="db" DATABASE="{l.newDb}" FIELDS="{substring(l.fields,2,len(l.fields)-1)}">
   <MvIF EXPR="{MvCREATE_Error}">
     <H3>Cannot create new <MvEVAL EXPR="{l.alias}"> database!</H3>
   <MvELSE>
     <MvWHILE EXPR="{NOT &[l.alias];.d.EOF}">
       <MvGO NAME="Struct" ROW="top">
       <MvWHILE EXPR="{NOT Struct.d.EOF}">
         <MvASSIGN NAME="db.d.&[Struct.d.field_name];" VALUE="{&[l.alias];.d.&[Struct.d.field_name];}">
         <MvSKIP NAME="Struct">
       </MvWHILE>
       <MvADD NAME="db">
       <MvSKIP NAME="{l.alias}">
     </MvWHILE>

     <MvCLOSE NAME="db">
     <MvCLOSE NAME="struct">
     <MvCLOSE NAME="{l.alias}">
     <MvIF EXPR="{frename(l.fileNm,glosub(l.fileNm,'.dbf','-old.dbf'))}">
       <MvASSIGN NAME="l.tmp" VALUE="{frename(l.newDb,l.fileNm) $ fdelete(l.struct)}">
       <MvASSIGN NAME="l.dbt" VALUE="{glosub(l.fileNm,'.dbf','.dbt')}">
       <MvIF EXPR="{fexists(l.dbt)}">
         <MvASSIGN NAME="l.tmp" VALUE="{frename(l.dbt, glosub(l.dbt,'.dbt','-old.dbt'))}">
         <MvASSIGN NAME="l.tmp" VALUE="{frename(glosub(l.newDb,'.dbf','.dbt'), l.dbt)}">
       </MvIF>
     </MvIF>
   </MvIF>
 </MvIF>
</MvFUNCTION>