2012-07-17 13 views
2

我在Visual Studio 2010中編寫了一個小程序來打開Access數據庫,在表中輸入一個值並打開一個表單。非常簡單,程序在我的筆記本電腦上效果很好。Access.DoCMD.RunSQL上的InteropServices.COMException錯誤

當我嘗試在第二臺PC上運行EXE時出現問題。我無法在表格中輸入值。兩臺計算機都可以使用Visual Studio 2010打開項目。我收到的錯誤,當我運行它是:

「System.Runtime.InteropServices.COMException(0x800A09C5):在RunSQL 操作被取消\在 Microsoft.Office.Interop.Access.DoCmd [R \ n .RunSQL(對象的SQLStatement, 對象的UseTransaction個)\ r \ n在 OpenGasAlarmSheet.Program.Main在\的Program.cs(字串[] args):行47"

我傳遞一些參數爲一個字符串來獲得相當於:

String sql = "INSERT INTO tbl_LOG ([ALARM], [DATE]) 
       VALUES ('KNITERV4', #07-17-2012 10:22:29 AM#);" 

下面是該程序來運行SQL字符串的一部分代碼:

Access.Application oAccess = null; 
oAccess = new Access.Application(); 
oAccess.OpenCurrentDatabase(<file path to mdb>, false); 
oAccess.DoCmd.RunSQL(sql); //This is line 47 

我一直在試圖解決這個錯誤,一個星期左右,我完全被卡住。任何幫助將非常感激!!!

謝謝, 克里斯


編輯:2012年7月18日

下面是我在哪裏....

選項1:

String sql = "INSERT INTO tbl_LOG ([ALARM], [DATE]) 
    VALUES ('KNITERV4', #07-17-2012 10:22:29 AM#);"; 
oAccess.CurrentDb().Execute(sql); //ERROR HERE 

結果在.....

PC#1:正常工作!

PC#2 &#3:錯誤(見下文)

「System.Runtime.InteropServices.COMException(0x8002801D):庫沒有 註冊(從HRESULT異常:0x8002801D (TYPE_E_LIBNOTREGISTERED)) \ r \ n在 Microsoft.Office.Interop.Access.ApplicationClass.CurrentDb(個)\ r \ n在 Test.Program.Main在\的Program.cs(字串[] args):行47"

選項2:

String sql = "INSERT INTO tbl_LOG ([ALARM], [DATE]) 
    VALUES ('KNITERV4', #07-17-2012 10:22:29 AM#);"; 
oAccess.DoCmd.RunSQL(sql); //ERROR HERE 

結果.....

PC#1:正常工作!

PC#2 &#3:錯誤(見下文)

「System.Runtime.InteropServices.COMException(0x800A09C5):將RunSQL 操作被取消\ r \ n在 Microsoft.Office。 .Interop.Access.DoCmd.RunSQL(對象的SQLStatement, 對象的UseTransaction個)\ r \ n在OpenGasAlarmSheet.Program.Main(字符串[] 參數)在\ Program.cs中:行47"

選項3:

cn.ConnectionString = oAccess.CurrentProject.Connection.ConnectionString; //ERROR HERE 
cn.Open(); 

rs.ActiveConnection = cn; 
rs.LockType = ADODB.LockTypeEnum.adLockBatchOptimistic; 
rs.CursorType = ADODB.CursorTypeEnum.adOpenKeyset; 
rs.CursorLocation = ADODB.CursorLocationEnum.adUseClient; 

rs.Open("tbl_LOG"); 
rs.AddNew("ALARM", "KNITERV4"); 
rs.UpdateBatch(); 

結果.....

PC#1 &#3:錯誤(見下文)

「System.Runtime.InteropServices.COMException(0x8000FFFF): 災難性故障(異常來自HRESULT:0x8000FFFF (E_UNEXPECTED))\ r \ n在 Microsoft.Office.Interop.Access._CurrentProject.get_Connection()\ r \ n
at Test.Program.Main(String [] arg收費) \測試\的Program.cs:行 38"

PC#2:正常工作!

我不能讓這個東西在多臺PC上工作。令人沮喪! :(

+0

這聽起來像一個安裝問題,可能與Access驅動程序。你能打開Access數據庫並手動執行插入嗎? – 2012-07-17 17:44:13

+0

兩臺PC的Access版本是否相同? – Botonomous 2012-07-17 17:55:17

+0

@rontornambe是的,我可以使用有問題的計算機手動插入Access數據庫。 – user1532518 2012-07-17 18:26:46

回答

3

它可能爲時已晚,以幫助OP,但希望這會幫助別人像我這樣誰也找不到答案。

對我來說,解決The RunSQL action was canceled.錯誤是打開MDB in Access,然後點擊啓用內容按鈕,這個文件是在客戶端的機器上生成的(當然是在我們的網絡外部),根據事實TortoiseSVN顯示文件在那之後改變了,我可以提交這些改變,似乎啓用的內容在物理上修改了文件,它必須在文件中存儲一些權限,甚至可以在每臺計算機上存儲權限,甚至在通過Interop執行時也可以使用它們。

這是MS Access 2010.