home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 16 / CD_ASCQ_16_0994.iso / news / 4611 / fw16d.ins / SAMPLES / DBFBUILD.PRG < prev    next >
Text File  |  1994-02-07  |  4KB  |  159 lines

  1. #include "FiveWin.ch"
  2.  
  3. //----------------------------------------------------------------------------//
  4.  
  5. function Main()
  6.  
  7.    local oDlg, oGet, oType, oLen, oDec, oLbx, oBtnAdd, oBtnEdit
  8.    local cName    := Space( 10 )
  9.    local cType    := "C"
  10.    local nLen     := 10
  11.    local nDec     :=  0
  12.    local cField   := Space( 20 )
  13.    local cTypes   := "CNLDM"
  14.    local aLens    := { 10, 10, 1, 8, 8 }
  15.    local cDbfName := Space( 12 )
  16.    local lEditing := .f.
  17.  
  18.    SET 3DLOOK ON
  19.  
  20.    DEFINE DIALOG oDlg RESOURCE "DbfBuild"
  21.  
  22.    REDEFINE GET oGet VAR cName ID 110 OF oDlg
  23.  
  24.    REDEFINE COMBOBOX oType VAR cType  ITEMS { "C", "N", "L", "D", "M" } ;
  25.       ON CHANGE ( nLen := aLens[ At( cType, cTypes ) ], oLen:Refresh() );
  26.       ID 120 OF oDlg
  27.  
  28.    REDEFINE GET oLen VAR nLen PICTURE "9999" ID 130 OF oDlg
  29.  
  30.    REDEFINE GET oDec VAR nDec PICTURE "9"    ID 140 OF oDlg
  31.  
  32.    REDEFINE BUTTON oBtnAdd ID 150 OF oDlg ;
  33.       ACTION AddField( oLbx, oGet, oBtnAdd, oBtnEdit,;
  34.                        @cName, cType, nLen, nDec, @lEditing )
  35.  
  36.    REDEFINE BUTTON ID 160 OF oDlg ACTION oDlg:End()
  37.  
  38.    REDEFINE LISTBOX oLbx VAR cField ID 170 OF oDlg
  39.  
  40.    REDEFINE BUTTON oBtnEdit ID 180 OF oDlg ;
  41.       ACTION EditField( oBtnAdd, oBtnEdit,;
  42.                         cField, @cName, @cType, @nLen, @nDec, @lEditing,;
  43.                         oGet, oType, oLen, oDec )
  44.  
  45.    REDEFINE BUTTON ID 190 OF oDlg ACTION oLbx:Del()
  46.  
  47.    REDEFINE GET cDbfName ID 210 OF oDlg
  48.  
  49.    REDEFINE BUTTON ID 220 OF oDlg ;
  50.       ACTION BuildDbf( cDbfName, oLbx )
  51.  
  52.    REDEFINE BUTTON ID 230 OF oDlg ;
  53.       ACTION ( WinHelp( "Order.hlp" ), WinExec( "Write.exe FiveWin.doc" ) )
  54.  
  55.    ACTIVATE DIALOG oDlg CENTERED
  56.  
  57.    SET 3DLOOK OFF
  58.  
  59. return
  60.  
  61. //----------------------------------------------------------------------------//
  62.  
  63. static function AddField( oLbx, oGet, oBtnAdd, oBtnEdit,;
  64.                           cName, cType, nLen, nDec, lEditing )
  65.  
  66.    if Empty( cName )
  67.       MsgInfo( "I need a field name", "Sorry" )
  68.    else
  69.       if ! lEditing
  70.          oLbx:Add( xPadR( cName, 100 ) + Chr( 9 ) + cType + ;
  71.                    xPadL( Str( nLen, 3 ), 50 ) + xPadL( Str( nDec, 1 ), 20 ),;
  72.                    oLbx:GetPos() )
  73.             else
  74.          oLbx:Modify( xPadR( cName, 100 ) + Chr( 9 ) + cType + ;
  75.                       xPadL( Str( nLen, 3 ), 50 ) + xPadL( Str( nDec, 1 ), 20 ) )
  76.          oBtnAdd:SetText( "&Add" )
  77.          oBtnEdit:Enable()
  78.          lEditing = .f.
  79.       endif
  80.       cName = Space( 10 )
  81.       oGet:Refresh()
  82.       oGet:SetFocus( .t. )
  83.    endif
  84.  
  85. return
  86.  
  87. //----------------------------------------------------------------------------//
  88.  
  89. static function BuildDbf( cDbfName, oLbx )
  90.  
  91.    local aFields := {}
  92.    local n
  93.  
  94.    if Empty( cDbfName )
  95.       MsgAlert( "I need a DBF name", "Sorry" )
  96.       return
  97.    endif
  98.  
  99.    if Len( oLbx:aItems ) == 0
  100.       MsgAlert( "No fields defined", "Sorry" )
  101.       return
  102.    endif
  103.  
  104.    if At( ".", cDbfName ) == 0
  105.       cDbfName += ".dbf"
  106.    endif
  107.  
  108.    if File( cDbfName )
  109.       if ! MsgYesNo( "Create it again?", "That DBF already exists" )
  110.          return
  111.       endif
  112.    endif
  113.  
  114.    for n = 1 to Len( oLbx:aItems )
  115.       AAdd( aFields, FieldInfo( AllTrim( oLbx:aItems[ n ] ) ) )
  116.    next
  117.  
  118.    DbCreate( cDbfName, aFields )
  119.    MsgInfo( "DBF created!", "AllRight" )
  120.  
  121. return
  122.  
  123. //----------------------------------------------------------------------------//
  124.  
  125. static function FieldInfo( cItem )
  126.  
  127. return { StrToken( cItem, 1 ),;
  128.          StrToken( cItem, 2 ),;
  129.          Val( StrToken( cItem, 3 ) ),;
  130.          Val( StrToken( cItem, 4 ) ) }
  131.  
  132. //----------------------------------------------------------------------------//
  133.  
  134. static function EditField( oBtnAdd, oBtnEdit, cField,;
  135.                            cName, cType, nLen, nDec, lEditing,;
  136.                            oName, oType, oLen, oDec )
  137.  
  138.    if ! Empty( cField )
  139.       oBtnAdd:SetText( "&Replace" )
  140.       oBtnEdit:Disable()
  141.       lEditing = .t.
  142.  
  143.       cName = StrToken( cField, 1 )
  144.       cType = StrToken( cField, 2 )
  145.       nLen  = Val( StrToken( cField, 3 ) )
  146.       nDec  = Val( StrToken( cField, 4 ) )
  147.  
  148.       oName:Refresh()
  149.       oType:Refresh()
  150.       oLen:Refresh()
  151.       oDec:Refresh()
  152.    else
  153.       MsgInfo( "Select a field to edit", "Please" )
  154.    endif
  155.  
  156. return
  157.  
  158. //----------------------------------------------------------------------------//
  159.