2009年11月3日 星期二

Access 資料庫檔案中產生錯誤訊息:「無效的引數」

一位遠從南投開車來家裡問問題的學生,帶來的問題....

他們單位做了一個資料庫,處理一千多人的基本資料。日前在作業時一值出現「無效的引數」,然後就不能儲存紀錄。在到處詢問未能得到解決之下,輾轉由其他老師轉介到我這裡來。因為最近沒有機會到南投,所以只好請他移駕。

在了解問題狀況後,知道這是我沒碰過的問題。二話不說,Google一下....果真在Microsoft 技術支援網站裡找到這篇資料

在大型 Access 資料庫檔案中執行新增查詢、執行產生資料表查詢,或是匯入資料時,會產生錯誤訊息:「無效的引數」

問題原因

當中提到「當 Access 資料庫檔案的大小接近 2 GB 的大小限制時,就會發生這個問題。」

解決方法:

方法 1:壓縮 Access 資料庫檔案

您可以執行 [壓縮及修復資料庫] 公用程式,來減少 Access 資料庫檔案的大小。如果要執行這項操作,請依照下列步驟執行。
注意 如果您想要壓縮共用 Access 資料庫檔案 (位於伺服器上或是在共用資料夾中),就必須確定在網路上沒有其他使用者開啟了此 Access 資料庫檔案。您必須在獨佔模式下開啟此 Access 資料庫檔案。
  1. 啟動 Access。
  2. [工具] 功能表上,指向 [資料庫公用程式],然後按一下 [壓縮及修復資料庫]
    注意 在 Access 2007 中,按一下 [Microsoft Office 按鈕],指向 [管理],然後按一下[壓縮及修復資料庫]
  3. [壓縮資料庫來源] 對話方塊中,選取您要壓縮的 Access 檔案,然後按一下 [壓縮]
  4. [壓縮資料庫成為] 對話方塊中,選取已壓縮 Access 資料庫檔案的名稱。
  5. 按一下 [儲存]

方法 2:分割 Access 資料庫檔案

您也可以將 Access 資料庫檔案分割成多個 Access 資料庫檔案,來解決這個問題。如果 Access 資料庫檔案包含具有許多程式碼的模組,您就可以考慮使用程式庫資料庫來儲存程式碼。您也可以考慮使用「資料庫分割精靈」,來將單一 Access 資料庫檔案分割成兩個 Access 資料庫檔案。使其中一個 Access 資料庫檔案包含所有資料表。另一個 Access 資料庫檔案則包含其餘的資料庫物件,例如表單和報表。如果要執行這項操作,請依照下列步驟執行:
  1. 啟動 Access。
  2. 開啟有問題的 Access 資料庫檔案。
  3. [工具] 功能表上,指向 [資料庫] 視窗中的 [資料庫公用程式],然後按一下 [資料庫分割]
    注意 在 Access 2007 中,於 [資料庫工具] 索引標籤上,按一下 [移動資料] 群組中的[Access 資料庫]
  4. [資料庫分割] 對話方塊中,按一下 [分割資料庫]
  5. [建立後端資料庫] 對話方塊中,於 [檔案名稱] 方塊中輸入後端 Access 資料庫檔案的名稱,然後按一下 [分割]
  6. 按一下 [確定]

不過呢...這並沒有解決這位同學的問題....

因為他的資料表裡有一個欄位是「照片」,資料類型是「OLE物件」。而且是插入「點陣圖」。光資料表就接近2G的容量了。

可是令人費解的是……明明收集照片時都有交代圖片不要給超過100KB呀!照片總容量應該不會超過的呀?

其實問題就出在Access資料庫裡插入的是「點陣圖」,並不是一般照片檔的JPG格式。

說白一點....就是說我們一般的照片檔是以JPG格式「壓縮」過的。放到Access資料庫裡的OLE物件欄位,卻是以「點陣」型態(沒壓縮)儲存在資料表中,所以她在資料表中所占空間是不能以JPG格式的大小來計算的....

最後忙了一天得到的結論就是.....照片點數再縮小些,以縮小資料庫檔案大小,離2GB遠一點.....

4 則留言:

匿名 提到...

您好:
可以將圖片改用附件方式儲存,即可解決該問題

黑輪 提到...

你是指用連結吧!
這當然是一種解決方式...

Jerry 提到...

黑輪大哥...
很抱歉,找不到您Blog留言的地方,只好留言在此^^
想跟您請教一下如何把access database放在server上 (or 網路上),讓同事們可以共用這個資料庫,也可以新增跟修改資料呢?
1. 如果將資料庫拆成兩半,一個是資料表,放在server上,一個是表單,放在個人PC上,大家去共同存取server上的資料表 --> 是不是速度會很慢,而且一定要上網才能使用這個access database
2. 如果不是用方法1, 我可以讓每個user電腦裡都有一份 access database, 他們可以不用連上網路就能使用這套 access database,他們也可以在自己電腦上新增跟編輯,最後...讓他們按個功能鍵,就能把更改的部份更新到server上,請問一下...這做得到嗎?

現在我是完全沒概念,麻煩黑輪大哥建議一下囉...
感謝啦!!

黑輪 提到...

Jerry
如果你和你的同事是在區域網路中,可以透過分享資料夾,共用Access檔案,其他人透過連結方式共用資料表及查詢取得資料。
如果有寫入權限當然也可以寫入。
如果是網際網路,那就乾脆寫好網頁程式當作介面。讓大家輸入....
先試試看吧!
有問題直接寫mail給我Allen@Chen.name