- ベストアンサー
Accessデータベースでのクエリ実行に関するエラー
- Accessデータベースで作成したクエリをVBコードから実行した際に、追加クエリが反映されない問題が発生しています。
- Accessからの追加クエリ実行やパススルークエリでも同様の問題が発生しており、設定に誤りがある可能性があります。
- 正常に反映されることが期待されるのにも関わらず、何らかの原因でクエリが実行されていない可能性があります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
まず、VB.NET で ADODB は使わないようにしてください。 ADODB は VB6 以前の技術で、15年以上前の技術です。 VB.NET からは専用の ADO.NET が用意されました。 (初版はこれも10年前なので、今更 ADODB 使ってる 技術者って過去の遺産を引き継ぐ必要がある人か、 新しい技術が覚えられない人か。。。) プログラムの実行環境がベースから大きく見直され ました。ADO.NET を使う事を強くお勧めします。 > Cmd = Nothing > Cnn = Nothing この辺りのコマンドの意味がほぼ無くなりました。必要 なくなったのではなく、Nothing を設定しても Access 側の 参照カウンタが減らないので、後始末できなくなってしまい ました。 本当に後始末しようと思っているなら、ReleaseComObject で COM オブジェクトを解放する必要があります。 Excel では頻繁に問題が表面化するのですが、Access の場合 あまり表に出て来ないようです。ただし、連続使用してる うちにメモリリークの問題がいつ発生しても不思議では ありません。 本題では、問題を切り分けられるようなテストプログラムを 考えて、結果を確認して下さい。 追加クエリって Insert 文のことですか? なら、単純な1行追加クエリを実行すれば、追加クエリE に問題があるかどうかの参考になるのでは? 聞いてる限り、Access でのみ参照可能な何かを使っているとか。 2.3.4.の手順が別なのも気になります。 4.がトリガーで、2.3.の処理が行なわれなければ、 4.の実行時に2.3.の処理結果が残っていないという ことはありませんか?つまり、差分0行で問題なく処理と。 > デザインビュー が Access 側の話なら、そういうことじゃないんでしょうか。 まぁ、質問文の説明では、やりたいことは大体分かるけど、 実際にパソコンのメモリ上でどんなデータがどう処理されて いるかを確認できる情報が無いので、なんとも言えませんが。
その他の回答 (1)
- MARU4812
- ベストアンサー率43% (196/452)
あ、あと、 > Cnn.Open("\\ファイルサーバー名\DB.mdb") http://www.mig.co.jp/access/contents/access_kyoyu.htm http://www.naboki.net/access/achell/ Access は単一パソコンで動かすアプリケーションという 位置付けで、本格的なデータベースに必要な機能が色々 足りません。結果、ファイルサーバーで複数名で使う やり方では頻繁にファイルが壊れたりする場合があります。 上手くいけばいいですが、だめな時はとことんだめなので よく勉強しておく必要があります。
お礼
MARU4812さんへ 回答ありがとうございました。 一回目の回答に付けたお礼の文中のお名前がMARU4821さんとなって おりました。 MARU4812さんですね。 失礼しました。 ACCESSが共有して利用するのに適さないものだと言うことは薄らと 知ってはいるのですがコストメリットと他のDBを運用するだけの 知識がないのでしかたなく利用している次第です。 (ACCESSの知識もありませんが・・・) 利用が少人数でしかも利用頻度もそう高くないので今のところ大きな 問題は出ていないですかね。 それと破損した場合の復旧が比較的簡単にできると言う事もあります。 そんな感じでズルズル使っております。
お礼
MARU4821さん 回答ありがとうございました。 ADODBは15年も前のものだったんですね。 何の知識もないまま更に昔のDAOのコードを参考に作ろうとしていたために こんな事になってしまいました。 MARU4821さんにADO.NETでと言う事で道筋を提示してもらいましたので 今回の質問は中途半端になりますが一旦置いておいてまずはADO.NETの 勉強をしてみたいと思います。 あと今日試していて原因らいしものがありましたので書き留めておきます。 MARU4821さんにご指摘いただいた「4がトリガーで2,3の処理が行われ なかった」がまさにその通りのようで差分クエリDのレコードカウントを コード中で取得してみたら0件でした。 デザインビューで作成したクエリはそのままVB.NETでは使えないんですかね? 何か使い方があるとは思いますのでこれも勉強してみます。 今度はADO.NETの質問でお世話になると思いますので その時はよろしくお願いします。