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 |
|