phfsj.prg

来自「一个非常好用的财务软件源程序」· PRG 代码 · 共 175 行

PRG
175
字号
* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
*  文件名: PHFSJ.PRG <-- 本文件由 UnFoxAll 创建
* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-


 BQD = .T.
 BZDRJ = ''
 CLOSE DATABASES ALL
 DO FORM hfsj
 IF  .NOT. BQD
    RETURN 
 ENDIF 
 SET COMPATIBLE ON
 BERR = .F.
 ON ERROR do pjc1
 IF EMPTY(BZDRJ)
    IF MESSAGEBOX('恢复时要确保没有其它操作员使用,插入第一张数据盘后继续',65,'提示信息') <>  ;
   1
       RETURN 
    ENDIF 
    I = 1
    DO WHILE I = 1
       IF  .NOT. FILE('a:\zwsj.arj') .OR.  .NOT. FILE('a:\kcount.dbf')
          IF MESSAGEBOX('A:驱动器没有第一张数据盘,是否插入盘后重试',33,'提示信息') <> 1
             = MESSAGEBOX('恢复未完成',64,'提示信息')
             RETURN 
          ENDIF 
       ELSE 
          I = 0
       ENDIF 
    ENDDO 
    BNAME = CURDIR() + '\zwsj.arj'
    DO WHILE .T.
        copy file a:\zwsj.arj to &bname
       USE a:\kcount
       BCOUNT = FCOUNT
       IF TYPE('fname') = 'U'
          BSY = .T.
       ELSE 
          BSY = IIF(EMPTY(FNAME),.T.,.F.)
          BZTH = ALLTRIM(SUBSTR(FNAME,3,15))
       ENDIF 
       USE 
       IF BERR
          IF MESSAGEBOX('是否换盘重试',33,'提示信息') <> 1
             = MESSAGEBOX('数据恢复未完成!',64,'提示信息')
             RETURN 
          ENDIF 
          LOOP 
       ENDIF 
       EXIT 
    ENDDO 
    FOR P = 2 TO BCOUNT
       IF MESSAGEBOX('请插入第' + ALLTRIM(STR(P,2)) + '张盘',64,'提示信息') <> 1
          = MESSAGEBOX('恢复未完成',64,'提示信息')
          RETURN 
       ENDIF 
       KK = ALLTRIM(STR(P - 1,2))
       KK = IIF(LEN(KK) = 1,'0' + KK,KK)
       BNAME0 = 'a:\zwsj.a' + KK
       BNAME1 = CURDIR() + 'zwsj.a' + KK
       DO WHILE .T.
          BERR = .F.
          DO WHILE  .NOT. FILE(BNAME0)
             IF MESSAGEBOX('第' + ALLTRIM(STR(P,2)) + '张盘不存在,是否换盘后重试',33,'提示信息') <>  ;
            1
                = MESSAGEBOX('恢复未完成',64,'提示信息')
                RETURN 
             ENDIF 
          ENDDO 
           copy file &bname0 to &bname1
          IF BERR
             IF MESSAGEBOX('是否换盘重试',33,'提示信息') <> 1
                = MESSAGEBOX('数据恢复未完成!',64,'提示信息')
                RETURN 
             ENDIF 
             LOOP 
          ENDIF 
          EXIT 
       ENDDO 
    ENDFOR 
 ELSE 
    IF MESSAGEBOX('恢复时要确保没有其它操作员使用,是否继续',65,'提示信息') <> 1
       RETURN 
    ENDIF 
    BBB = BZDRJ + 'kcount'
     use &bbb
    BCOUNT = FCOUNT
    IF TYPE('fname') = 'U'
       BSY = .T.
    ELSE 
       BSY = IIF(EMPTY(FNAME),.T.,.F.)
       BZTH = ALLTRIM(SUBSTR(FNAME,3,15))
    ENDIF 
    USE 
    BNAME = BZDRJ + '\zwsj.arj'
 ENDIF 
 BNAME0 = IIF(EMPTY(BZDRJ),CURDIR() + 'zwsj.a*',BZDRJ + 'zwsj.a*')
 BNAME1 = SUBSTR(BSJWZ,1,3)
 DDD = FDATE(BNAME)
 IF MESSAGEBOX('该数据为' + DTOC(DDD) + '备份,是否使用该数据恢复?',65,'提示信息') <> 1
    = MESSAGEBOX('数据恢复未完成!',64,'提示信息')
    RETURN 
 ENDIF 
 DO PTSXX
 MOVE WINDOW WTSXX TO 1 , 85
 IF BSY
    IF MESSAGEBOX('请仔细检查备份盘数据是否确实为本机多帐套数据,使用本功能后本机所有帐套数据将被覆盖?',33,'提示信息') <>  ;
   1
       RETURN 
    ENDIF 
    IF MESSAGEBOX('请再次确认,覆盖后数据将不可恢复?',33,'提示信息') <> 1
       RETURN 
    ENDIF 
    _COMMAND = 'arj x ' + BNAME0 + ' ' + BNAME1 + ' -y'
    _FILE = FCREATE('comper.bat')
    = FPUTS(_FILE,_COMMAND)
    = FPUTS(_FILE,'echo 12345 > id.txt')
    = FCLOSE(_FILE)
    RUN /n2 comper.pif
    DO WHILE  .NOT. FILE('id.txt')
    ENDDO 
    DELETE File id.txt
 ELSE 
    _COMMAND = 'arj x ' + BNAME0 + ' -y'
    _FILE = FCREATE('comper.bat')
    = FPUTS(_FILE,_COMMAND)
    = FPUTS(_FILE,'echo 12345 > id.txt')
    = FCLOSE(_FILE)
    DELETE File id.txt
    RUN /n2 comper.pif
    DO WHILE  .NOT. FILE('id.txt')
    ENDDO 
    DELETE File id.txt
    BFILE = CURDIR() + BZTH + '\kuser'
    SELECT 0
     use &bfile
    BCOMPANY1 = ALLTRIM(FNAME)
    USE 
    IF BCOMPANY <> BCOMPANY1
       IF MESSAGEBOX("备份盘中不是'" + BCOMPANY + "'数据,是否继续进行数据恢复操作?",33,'提示信息') <>  ;
      1
          RETURN 
       ENDIF 
       IF MESSAGEBOX("请再次确认,原有'" + BCOMPANY + "'帐套将被'" + BCOMPANY1 + "'帐套覆盖!",33,'提示信息') <>  ;
      1
          RETURN 
       ENDIF 
    ENDIF 
    _COMMAND = 'arj e ' + BNAME0 + ' ' + BSJWZ1 + ' -y'
    _FILE = FCREATE('comper.bat')
    = FPUTS(_FILE,_COMMAND)
    = FPUTS(_FILE,'echo 12345 > id.txt')
    = FCLOSE(_FILE)
    RUN /n2 comper.pif
    DO WHILE  .NOT. FILE('id.txt')
    ENDDO 
    DELETE File id.txt
 ENDIF 
 RELEASE WINDOW WTSXX
 = MESSAGEBOX('数据恢复完成',64,'提示信息')
 RETURN 

PROCEDURE pjc1
 IF  .NOT. BERR
    DO CASE 
    CASE ERROR() = 1002 .OR. ERROR() = 202 .OR. ERROR() = 108
       = MESSAGEBOX('A盘没有软盘或软盘损坏',64,'提示信息')
    ENDCASE 
 ENDIF 
 BERR = .T.
 RETURN 
ENDPROC
*------*

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?