Visual Studio 2010で、Accessデータベースを開き、テーブルに値を入力してフォームを開くための小さなプログラムを作成しました。非常にシンプルで、プログラムは私のラップトップでうまく機能します。
2台目のPCでexeを実行しようとすると、問題が発生します。テーブルに値を入力できません。どちらのコンピューターも、VisualStudio2010でプロジェクトを問題なく開くことができます。実行時に受け取るエラーは次のとおりです。
"System.Runtime.InteropServices.COMException(0x800A09C5):RunSQLアクションがキャンセルされました。\ r \ nMicrosoft.Office.Interop.Access.DoCmd.RunSQL(Object SQLStatement、Object UseTransaction)\ r \ natOpenGasAlarmSheet.Program。 Main(String [] args)in \ Program.cs:line 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
私はこのエラーを約1週間修正しようとしてきましたが、完全に行き詰まっています。どんな助けでも大歓迎です!!!
ありがとう、クリス
編集: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テスト時.Program.Main(String [] args)in \ Program.cs:line 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 \ nMicrosoft.Office.Interop.Access.DoCmd.RunSQL(Object SQLStatement、Object UseTransaction)\ r \ natOpenGasAlarmSheet.Program。 Main(String [] args)in \ Program.cs:line 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 [] args)in \ Test \ Program.cs:line 38 "
PC#2:正しく動作します!!!
これを複数のPCで動作させることはできません。フラストレーション!!! :(