none
Microsoft Jet 資料庫引擎無法開啟 '' 檔案 RRS feed

  • 問題

  • 我要連線本機的Excel讀取資料,再轉入SQL Svr 2000,

    我用VS2005的OleDB寫,出現如下訊息:

    "Microsoft Jet 資料庫引擎無法開啟 '' 檔案。它已經被其他的使用者獨佔地開啟,或者您需要有檢視資料的權限。"

    看了其他人類似的問題,還是沒能解決;

    於是改用VS2003,就成功轉入了,而且我還沒改其他權限設定;

    一模一樣的語法,從VS2005貼到VS2003,卻可以用了,

    這是VS2005的Bug?還是兩者語法本就不同?還是VS2005太嚴格了?

    請各位前輩賜教,謝謝。

    如果問錯討論區,也請指正(或建議我去那一區問)。

     

            Dim oleSrc As String = "provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;HDR=YES';data source=" + root + "\member.xls;"

            Dim oleAdpt As New OleDbDataAdapter("select * from [member$]", oleSrc)

            Dim dt As New DataTable

            oleAdpt.Fill(dt)

     

    VS2005在NEW Adapter時出現錯誤訊息,VS2003卻可以用

    2008年10月27日 上午 02:22

解答

  • 你用在哪?

     

    ASP.NET 要注意檔案權限,Excel 當資料庫時,同時之間只能有一支程式存取,包含不能用 Excel 軟體開起。

     

    VS2005 並沒這方面的限制。

     

    錯誤訊息很明確告知:

    它已經被其他的使用者獨佔地開啟,或者您需要有檢視資料的權限。

     

    你應該查找哪個程式正在使用這個檔,網路上也有很多軟體可以查找,微軟也有這方面的工具,可在

    http://www.microsoft.com/taiwan/technet/

    這邊找微軟提供的免費工具。

    • 已標示為解答 Lolota Lee 2009年2月13日 上午 06:45
    2008年10月27日 上午 05:54

所有回覆

  • 你用在哪?

     

    ASP.NET 要注意檔案權限,Excel 當資料庫時,同時之間只能有一支程式存取,包含不能用 Excel 軟體開起。

     

    VS2005 並沒這方面的限制。

     

    錯誤訊息很明確告知:

    它已經被其他的使用者獨佔地開啟,或者您需要有檢視資料的權限。

     

    你應該查找哪個程式正在使用這個檔,網路上也有很多軟體可以查找,微軟也有這方面的工具,可在

    http://www.microsoft.com/taiwan/technet/

    這邊找微軟提供的免費工具。

    • 已標示為解答 Lolota Lee 2009年2月13日 上午 06:45
    2008年10月27日 上午 05:54
  • 謝謝前輩的回覆,

    我用的是VB.NET最高權限在讀本機Excel,不知道是不是也會像網頁一樣有限制?

    前輩的意思是說有有隱藏的程式正在使用嗎?因為除了VS2005外,好像我都已經關閉了。

    前輩給的這個網址是要下載什麼程式?好像只是入口,可以給我關鍵字或名稱嗎?

    才疏學淺,請前輩多多指教,謝謝。

    2008年10月27日 上午 06:40
  • 網頁是因為使用 Users 權限。

    本機使用 Administrators 權限時,就看看是不是被其他軟體鎖住。

     

    點左邊的:Sysinternals

    再點:檔案和磁碟公用程式

     

    裡面很多工具都可以,比如說第一個:

  • AccessChk

    This tool shows you the accesses the user or group you specify has to files, Registry keys or Windows services.

2008年10月27日 上午 10:08
  • 前輩提拱的方法,我會再測試,

    但開發的程式是要用 WinXP 定時執行,Ftp 下載 Excel 再轉入 SQL,

    自動執行很難叫使用者做檢查這樣的事,

    既然 VS2003 沒有這樣的限制,為了省麻煩還是會採用,

    只是還是很想知道 VS2005 為什麼要這樣?

    謝謝前輩的回覆,感恩。

    2008年10月29日 上午 04:00
  • 如果你 ftp 還沒下載完,或是 ftp 軟體還沒完全把檔案釋放,則無法存取。

     

    用工具檢查可以確認誰把檔案卡住,若是是你的程式,表示你在處理時,意外的多開了幾個連線,請自行檢查程式碼。

     

    若是 Ftp 還在抓,請確時控制好 Process Wait 的流程。

     

    沒有檔案鎖定偵測結果無法判讀,但是 VS2005 不會特別有這樣的問題。

     

    至少我用都正常。

    2008年10月29日 上午 06:59
  • 謝謝前輩的回覆,

    我是用 VS2005 My.Computer.Network.DownloadFile(ftp, path, usr, pwd, True, 120, True, FileIO.UICancelOption.DoNothing) 下載檔案,

    如上面所說,是要用 Process 的類別嗎?

    我找了一些說明,好像沒法把 DownloadFile 指給 Process?

    我現在想到的是,先做一個 Download 程式,再用另一個程式呼叫它,

    Dim prc As New System.Diagnostics.Process

    prc = Process.Start("FtpDown.exe")

    While prc.HasExited = False
        System.Threading.Thread.Sleep(2000)
    End While

    還是有什麼更簡捷的方法,可以在同一個程式就完成?

    請前輩多多指教,感恩。

     

     

    2008年10月30日 上午 01:16
  • VB2003 沒有 My 吧...

     

    你是自己程式下的檔案時,下完後,測試 IO.File.Delete 註解掉你的 Excel 連接,看看可不可以刪除,如果不行,就表示 My 還沒把檔案寫入獨佔權釋放,就只能換類別來用。

     

    你原先說 VB2003 可以,而 VB2003 沒有 Ftp 相關類別,所以我才會猜你用其它 ftp 程式在下載,你若是使用內建類別,只能確認檔案是否釋放,My 類別沒辦法 Disponse ,我不確定有沒有強制釋放的命令。

     

    2008年10月30日 上午 04:35
  • 我其實是用 2003 呼叫 2005 DownloadFile

    聽前輩說完後測試,發現只要 DownloadFile 完成後關閉(Me.Close)

    轉入 Sql 都不會有問題,也就是用 2005 呼叫 2005 DownloadFile 也是可以用的,

    但如前輩所說,如果寫在同一支程式裡,檔案似乎會被 DownloadFile 佔據,而無法讀取,

    我應該會用 2005 呼叫 2005 DownloadFile 搭配 Process.HasExited 的方式做,

    謝謝前輩的回覆,感恩。

    2008年10月30日 上午 09:22