分享

如何修复VFP坏的表|交流区

 郑学甫360 2017-08-14
 A.修復 DBF 檔,程式碼如下:
  L_cDBFFileName 代表損毀的 DBF 檔,由錯誤訊息中可以得到該檔案名稱 (含完整路徑)。

代碼:

    W1_nHandleOfDBFFile = FOPEN(L_cDBFFileName, 2) && 以讀寫方式開啟資料表格檔
    IF W1_nHandleOfDBFFile = -1
      * 自行處理內容
    ELSE
      * 檔案長度
      W1_nFileSize = FSEEK(W1_nHandleOfDBFFile,0,2)
      =FSEEK(W1_nHandleOfDBFFile, 0, 0)
      * 截取檔頭記錄
      W1_cHeaderRecords     = FREAD(W1_nHandleOfDBFFile,32)
      * 原始值
      W1_cHead_Reccount     = SUBSTR(W1_cHeaderRecords,05,04)  && 檔案中的資料記錄數目
      W1_cHead_1stLocation  = SUBSTR(W1_cHeaderRecords,09,02)  && 第一筆資料記錄的位置
      W1_cHead_RecordLength = SUBSTR(W1_cHeaderRecords,11,02)  && 每筆資料記錄的長度 (包括刪除記號)
      * 轉換為 10 進位制數
      W1_nHead_Reccount     = Word2Dec(LEFT(W1_cHead_Reccount, 2)) + Word2Dec(RIGHT(W1_cHead_Reccount, 2)) * 65535
      W1_nHead_1stLocation  = Word2Dec(W1_cHead_1stLocation)
      W1_nHead_RecordLength = Word2Dec(W1_cHead_RecordLength)
      IF W1_nFileSize < W1_nHead_1stLocation OR W1_nHead_1stLocation <= 64
        * 自行處理內容
      ELSE
        * > 計算檔案中的資料記錄數目
        W1_nCorrectRecs = (W1_nFileSize - W1_nHead_1stLocation) / W1_nHead_RecordLength
        * > 修正後轉換為雙位元組(WORD)二進制字串
        W1_cCorrectRecs = Dec2Word(W1_nCorrectRecs-INT(W1_nCorrectRecs/65535)*65535) + Dec2Word(INT(W1_nCorrectRecs/65535))
        * > 寫入正確資訊
        =FSEEK(W1_nHandleOfDBFFile,4,0)
        =FWRITE(W1_nHandleOfDBFFile,W1_cCorrectRecs,4)
      ENDIF
      =FCLOSE(W1_nHandleOfDBFFile)
    ENDIF

详细看这个帖子:http://vfp./viewtopic.php?p=9179

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多