- - PR -
C#でAccess(MDB)内のテーブルを更新する際にエラーが。
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-04-17 19:00
C#2005でMDB内のテーブルを更新し、
レポートを表示しようとしています。 まず印刷データを作成し・・・のところで躓いています。 テーブル内に残っているデータをすべて削除してから データを書き込もうとDELETEを発行したところで 次のようなエラーが出てしまいます。 エラーメッセージをGoogleで検索してみましたが これといって参考になる答えを探すことができませんでした。 参照設定も、AccessとOfficeのobjectlibraryにしてあります。 どなたかお知恵をお貸しください。 途中までですがソースも添付いたします(長文すいません ----------------------------------------------------------------------- System.Runtime.InteropServices.COMException はハンドルされませんでした。 Message="RunSQL アクションの実行はキャンセルされました。" Source="" ErrorCode=-2146825787 StackTrace: 場所 Microsoft.Office.Interop.Access.DoCmd.RunSQL(Object SQLStatement, Object UseTransaction) 場所 libs.axsctl.mkDataBar1(String barNum, Int32 maisu, Int32 kuhaku) 場所 D:\source\libs\axsctl.cs:行 102 ------------------------------------------- using System; using System.Collections.Generic; using System.Text; using System.Reflection; using Access = Microsoft.Office.Interop.Access; using Microsoft.Office.Core; namespace libs { class axsctl { #region − public string[] skey = { "1" }; public string this[int index] { get { return skey[index]; } set { skey[index] = value; } } #endregion private Access.Application oAccess = null; private Access.Application axsCn() { Access.Application oAccess = null; oAccess = new Access.ApplicationClass(); cs_share cs = new cs_share(); string appPath = cs.getApppath(); oAccess.OpenCurrentDatabase(appPath + "\\" + "report.mdb", false, ""); return oAccess; } #region プレビュー public void preRP(string rpName) { if (oAccess == null) { oAccess = axsCn(); } oAccess.DoCmd.OpenReport( rpName, Access.AcView.acViewPreview, System.Reflection.Missing.Value, System.Reflection.Missing.Value, Access.AcWindowMode.acWindowNormal, System.Reflection.Missing.Value); oAccess.Visible = true; oAccess = null; } #endregion #region − 印刷データ作成 − public void mkDataBar1(string barNum, int maisu, int kuhaku) { if (oAccess == null) { oAccess = axsCn(); } //作業テーブル内容消去 sqltxt = "DELETE * FROM DT_REPORT"; oAccess.DoCmd.RunSQL(sqltxt, true); ↑ここでエラーになります。 〜〜以下省略〜〜 [ メッセージ編集済み 編集者: バニラミント 編集日時 2007-04-17 19:01 ] | ||||
|
投稿日時: 2007-04-17 19:27
えーと、ソースコードを斜め32度の角度で読んでみたわけですが、とりあえ
ずは mdb を扱うのに Access を PIA でゴソゴソするのはチョ→(だから チョ→言うな)危険なので絶対に止めましょう。 mdb ファイルを更新したりするには、むしろ ADO.NET という伝家の宝刀 がありますので、そちらを利用されると良いかと。というかそれ以外は怖く て手が出せないと思った方がいいですね。 「レポートを表示しようとして」の部分が気になりますが、もしかして Access でレポートを開いて印刷させようということでしょうか。 …それはまぁ止めはしませんが、でもかなり危険があぶないのでいろいろ と考え直した方が…とだけ。 _________________ ぽぴ王子@わんくま同盟 ぽぴ王子の人生プログラミング中 / ぽぴンち。 | ||||
|
投稿日時: 2007-04-17 20:34
せめて mdb のモジュールを呼び出して、そこで実行させた方が良いですよ。
今回のようなエラー (例外) も、mdb 側なら原因の特定が早いです。 何より参照カウントをあまり考えずに済みます。
このあたりを見る限りでは COM における 「参照カウント」 自体をご存知なさそうですけども。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2007-04-18 15:49
アドバイスありがとうございます。
今回の処理を作りにあたり、Googleで 「C# Access 印刷」と検索してヒットしたサイトを参考に 作ってみたのですが全体を理解してなかったので ちょっとパニックになってました。 教えていただいたADO.NETを利用する方法を勉強してみます ありがとうございました。 |
1