- PR -

C#でAccess(MDB)内のテーブルを更新する際にエラーが。

1
投稿者投稿内容
バニラミント
ベテラン
会議室デビュー日: 2005/05/27
投稿数: 58
投稿日時: 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 ]
ぽぴ王子
ぬし
会議室デビュー日: 2006/03/24
投稿数: 475
お住まい・勤務地: お住まい:城・勤務地:城
投稿日時: 2007-04-17 19:27
えーと、ソースコードを斜め32度の角度で読んでみたわけですが、とりあえ
ずは mdb を扱うのに Access を PIA でゴソゴソするのはチョ→(だから
チョ→言うな)危険なので絶対に止めましょう

mdb ファイルを更新したりするには、むしろ ADO.NET という伝家の宝刀
がありますので、そちらを利用されると良いかと。というかそれ以外は怖く
て手が出せないと思った方がいいですね。

「レポートを表示しようとして」の部分が気になりますが、もしかして
Access でレポートを開いて印刷させようということでしょうか。
…それはまぁ止めはしませんが、でもかなり危険があぶないのでいろいろ
と考え直した方が…とだけ。
_________________
ぽぴ王子@わんくま同盟
ぽぴ王子の人生プログラミング中 / ぽぴンち。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-04-17 20:34
せめて mdb のモジュールを呼び出して、そこで実行させた方が良いですよ。
今回のようなエラー (例外) も、mdb 側なら原因の特定が早いです。

何より参照カウントをあまり考えずに済みます。

引用:

oAccess = null;


このあたりを見る限りでは COM における 「参照カウント」 自体をご存知なさそうですけども。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
バニラミント
ベテラン
会議室デビュー日: 2005/05/27
投稿数: 58
投稿日時: 2007-04-18 15:49
アドバイスありがとうございます。
今回の処理を作りにあたり、Googleで
「C# Access 印刷」と検索してヒットしたサイトを参考に
作ってみたのですが全体を理解してなかったので
ちょっとパニックになってました。
教えていただいたADO.NETを利用する方法を勉強してみます
ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)