從表單中刪除二進位制資料

有時崩潰始終以單一形式或報告發生,或僅在列印時發生。表單/報表中的二進位制資料可能已損壞。

將表單/報表物件另存為文字有兩個未記錄的函式。Application.SaveAsText 和 Application.LoadFromText。你可以使用這些函式匯出表單/報表定義,清理定義,然後再次匯入。

  1. 在繼續之前備份資料庫
  2. 轉到 VBA 立即視窗(Control + G)
  3. 輸入 Application.SaveAsText acForm, "MyForm", CurrentProject.Path & "\MyForm.txt"(將 MyForm 替換為 Form / Report 的名稱。如果是正在修復的損壞報告,請使用 acReport)
  4. 在資料庫視窗中重新命名原始表單項(例如,重新命名為 MyForm.Bak)

清理表單/報告定義檔案

  1. 在記事本中開啟匯出的檔案(例如 MyForm.txt)

  2. 刪除“Checksum =”行(應該在第 3 行)

  3. 清除二進位制資料

    1. 識別二進位制資料塊。檢視檔案,你將看到以“Parameter = Begin”開頭的行。在這些行之後,你將擁有編碼二進位制資料行。最後,二進位制塊將以僅包含 End 的行結束。二進位制資料塊包括第一行(帶有 Begin 語句)和所有行,包括最後一行(帶有 End 語句)。

      注意:所有這些塊應該出現在窗體控制元件定義之前

    2. 刪除以下引數的二進位制資料塊:

      • NameMap
      • PrtMip
      • PrtDevMode
      • PrtDevNames
      • PrtDevModeW
      • PrtDevNamesW
  4. 尋找其他問題。開啟檔案時,滾動檔案的其餘部分並查詢引人注目的內容,尤其是底部的 VBA 模組程式碼。你將尋找任何與其他人相關的東西,可能是腐敗。

  5. 儲存檔案。

將表單/報表載入回 Access 和 Test

  1. 將表單載入回 Access。
    • 在 Access 中,轉到即時視窗(Control + G)
    • 輸入 Application.LoadFromText acForm, "MyForm", CurrentProject.Path & "\MyForm.txt"
    • 反編譯/壓縮修復/重新編譯(參見文件中的其他示例)
    • 開啟表單/報告進行測試。希望現在一切正常。
    • 刪除舊的損壞表格(例如 MyForm.bak)

防止將來發生這種腐敗

報表/表單中損壞的二進位制資料的最常見原因是多個計算機/使用者使用相同的資料庫客戶端檔案而不是擁有自己的單獨副本。這就是為什麼每個使用者都應該在他們執行的桌面上擁有自己的客戶端檔案。