home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 16 / CD_ASCQ_16_0994.iso / news / 4611 / fw16d.ins / SAMPLES / DBFW.PRG < prev    next >
Text File  |  1994-06-01  |  5KB  |  236 lines

  1. //----------------------------------------------------------------------------//
  2. //  FiveWin 1.6 - Ejemplos
  3. //  (c) A.Linares, F.Pulpón 1993
  4. //----------------------------------------------------------------------------//
  5.  
  6. /*
  7. ┌─ Programa ───────────────────────────────────────────────────────────────┐
  8. │   Aplicación: Cambia de Formato Oem a Ansi y viceversa                   │
  9. │      Fichero: DBFW.PRG                                                   │
  10. │        Autor: Ignacio Ortiz de Zúñiga Echeverría                         │
  11. └──────────────────────────────────────────────────────────────────────────┘
  12. */
  13.  
  14. #include "fivewin.ch"
  15.  
  16. #define OEM_TO_ANSI      1
  17. #define ANSI_TO_OEM      2
  18. #define MAX_CHECK       10
  19.  
  20.  
  21. Static oWnd, oMeter, oAtoO, oOtoA
  22. Static nActual := 0
  23.  
  24. //----------------------------------------------------------------------------//
  25.  
  26. FUNCTION Main()
  27.  
  28.      LOCAL oIcon
  29.  
  30.      DEFINE ICON oIcon RESOURCE "ICON_DBFW"
  31.  
  32.      MsgInfo( If( IsAnsi( "Hola" ), "Ok", "No" ) )
  33.  
  34.      DEFINE WINDOW oWnd FROM 1, 1 TO 9, 60 ;
  35.           TITLE OemToAnsi("Conversión de Ficheros DBF") ;
  36.           ICON oIcon ;
  37.           BORDER NONE ;
  38.           COLOR "B/W" ;
  39.           NOZOOM
  40.  
  41.      WndCenter(oWnd:hWnd)
  42.  
  43.      ACTIVATE WINDOW oWnd ;
  44.           ON INIT Showcontrols()
  45.  
  46. RETURN (NIL)
  47.  
  48. //----------------------------------------------------------------------------//
  49.  
  50. STATIC FUNCTION ShowControls()
  51.  
  52.      @ 02,01 METER oMeter VAR nActual TOTAL 100 ;
  53.           SIZE 455,20 ;
  54.           OF oWnd
  55.  
  56.      @ 5,12 BUTTON oOtoA PROMPT "&Oem to Ansi" ;
  57.            DEFAULT ;
  58.            OF oWnd ;
  59.            ACTION Conversion(OEM_TO_ANSI) ;
  60.            SIZE 100,25
  61.  
  62.      @ 5,40 BUTTON oAtoO PROMPT "&Ansi to Oem" ;
  63.            DEFAULT ;
  64.            OF oWnd ;
  65.            ACTION Conversion(ANSI_TO_OEM) ;
  66.            SIZE 100,25
  67.  
  68.  
  69. RETURN (NIL)
  70.  
  71. //----------------------------------------------------------------------------//
  72.  
  73. STATIC FUNCTION Conversion(nType)
  74.  
  75.      LOCAL aData
  76.      LOCAL bBlock
  77.      LOCAL cFichero, cCaption
  78.      LOCAL nTotal, nMeter
  79.  
  80.      cFichero := GetFichero()
  81.  
  82.      IF empty(cFichero)
  83.           RETURN NIL
  84.      ENDIF
  85.  
  86.      oAtoO:disable()
  87.      oOtoA:disable()
  88.  
  89.      cCaption := oWnd:cCaption
  90.  
  91.      oWnd:cTitle({"Oem to Ansi","Ansi to Oem"} [nType] + ;
  92.                  ":  ["+SubStr(cFichero, Rat("\",cFichero)+1)+"]")
  93.  
  94.  
  95.      IF nType == OEM_TO_ANSI
  96.  
  97.           bBlock := {|val,elem| iif(Valtype(Val)=="C"             ,;
  98.                                     Fieldput(elem,OemtoAnsi(val)) ,;
  99.                                     NIL ) }
  100.  
  101.      ELSE
  102.  
  103.           bBlock := {|val,elem| iif(Valtype(Val)=="C"             ,;
  104.                                     Fieldput(elem,AnsitoOem(val)) ,;
  105.                                     NIL ) }
  106.  
  107.      ENDIF
  108.  
  109.      USE (cFichero) NEW EXCLUSIVE
  110.      SET INDEX TO
  111.  
  112.      IF CheckRec(nType,cFichero)
  113.  
  114.           oWnd:cTitle(cCaption)
  115.           oAtoO:enable()
  116.           oOtoA:enable()
  117.  
  118.           CLOSE ALL
  119.           RETU NIL
  120.  
  121.      ENDIF
  122.  
  123.      GO TOP
  124.  
  125.      nTotal := lastrec()
  126.  
  127.      oMeter:nTotal = RecCount()
  128.  
  129.      DO WHILE !EOF()
  130.  
  131.           aData := Scatter()
  132.  
  133.           Aeval(aData ,bBlock)
  134.  
  135.           SKIP
  136.  
  137.           oMeter:Set( RecNo() )
  138.           SysRefresh()
  139.      ENDDO
  140.  
  141.      CLOSE ALL
  142.  
  143.      MsgBeep()
  144.  
  145.      oMeter:Set(0)
  146.      oWnd:cTitle(cCaption)
  147.      oAtoO:enable()
  148.      oOtoA:enable()
  149.  
  150. RETURN (NIL)
  151.  
  152. //----------------------------------------------------------------------------//
  153.  
  154. STATIC FUNCTION GetFichero()
  155.  
  156.      LOCAL cFile := ""
  157.  
  158.      cFile := cGetFile("*.dbf"           ,;
  159.                        "Elija la base de datos")
  160.  
  161.      IF "*"$cFile .OR. !file(cFile)
  162.           cFile := ""
  163.      ENDIF
  164.  
  165. Return (cFile)
  166.  
  167. //----------------------------------------------------------------------------//
  168.  
  169. STATIC Function scatter()
  170.  
  171.      local fvals := {} , fnum := 1
  172.  
  173.      Asize(fvals,fcount())
  174.  
  175.      aeval(fvals, {|| fvals[fnum++] := fieldget(fnum)})
  176.  
  177. Return(fvals)
  178.  
  179. //----------------------------------------------------------------------------//
  180.  
  181. STATIC Function CheckRec(nType, cFichero)
  182.  
  183.  
  184.      LOCAL aData
  185.      LOCAL bBlock
  186.      LOCAL nCounter := 0
  187.      LOCAL lAlert   := .F.
  188.  
  189.      IF nType == OEM_TO_ANSI
  190.  
  191.           bBlock := {|val| iif(Valtype(Val)=="C" .AND. IsAnsi(val) ,;
  192.                                lAlert := .T.                       ,;
  193.                                NIL ) }
  194.  
  195.      ELSE
  196.  
  197.           bBlock := {|val| iif(Valtype(Val)=="C" .AND. IsOem(val)  ,;
  198.                                lAlert := .T.                       ,;
  199.                                NIL ) }
  200.  
  201.      ENDIF
  202.  
  203.      CursorWait()
  204.  
  205.      DO WHILE !Eof() .OR. nCounter <= MAX_CHECK
  206.  
  207.           aData := Scatter()
  208.  
  209.           Aeval(aData ,bBlock)
  210.  
  211.           IF lAlert
  212.                EXIT
  213.           ENDIF
  214.  
  215.           SKIP
  216.  
  217.           nCounter++
  218.  
  219.      ENDDO
  220.  
  221.      GO TOP
  222.  
  223.      CursorArrow()
  224.  
  225.      IF lAlert
  226.  
  227.           lAlert := !MsgYesNo(OemtoAnsi("¿Ya esta en formato ")+;
  228.                               {"Ansi","Oem"}[nType]+", desea Continuar?",;
  229.                               cFichero)
  230.  
  231.      ENDIF
  232.  
  233. RETURN lAlert
  234.  
  235. //----------------------------------------------------------------------------//
  236.