- PR -

VB6とDAOでDLL内で接続オブジェクトを共有する良い方法

投稿者投稿内容
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-08-21 18:27
大昔に作ったシステムでしてVB6でDAOを使っています。
要所でデータベースアクセスが生じるため、接続オブジェクトをグローバル変数にして、これを各クラスで利用するという作りになっております。

今回、機能追加を行っているのですが、EXEがでかくなりすぎたため、DLL に切り分けしているのです。
ところが、DLL に切り分けると、全てのクラスに接続オブジェクトの参照を渡すか、各クラスで個々に接続させなければなりません。

これは仕方のないことなのでしょうか?
何か良い方法がありましたらご教示いただけたらと思っております。

実際には、使用直前で接続して使用後に切断するのが良いのでしょうけど、毎度接続するのも処理効率が悪いかなぁと思っているのです。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-08-21 18:58
引用:

R・田中一郎さんの書き込み (2006-08-21 18:27) より:

大昔に作ったシステムでしてVB6でDAOを使っています。
要所でデータベースアクセスが生じるため、接続オブジェクトをグローバル変数にして、これを各クラスで利用するという作りになっております。


私は、DAO にしろ ADO にしろ、こんなことをした験しがないです。
必要な時だけ接続して、不要になったら即クローズです。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ぽぴ王子
ぬし
会議室デビュー日: 2006/03/24
投稿数: 475
お住まい・勤務地: お住まい:城・勤務地:城
投稿日時: 2006-08-21 19:03
こんにちは。

「EXE が大きくなりすぎて DLL に切り分け」というのはあいにく経験がないので
すが、2つの EXE で同じ mdb に接続しなくちゃならんぞね、というような経験
はあります。
そのときは、メイン EXE に mdb にアクセスするためのクラスを作り、サブ
EXE からそのメソッドを呼んでもらって、メイン EXE をプロキシのように利用し
てアクセスさせていた記憶が。ちなみに両者の通信は PostMessage /
SendMessage でおなじみの WIN32 Message でした orz
# なにぶん8年前の話なので… VB も 5 だったし
# 意図としては同じ mdb への競合を少しでも避けたかったのです

DLL に切り分けと言うことはもうすこしスマートに通信できそうです(単に呼ぶだ
けで可能かしら)が、とりあえず方法の一つとして提案でした。

引用:

じゃんぬねっとさんの書き込み (2006-08-21 18:58) より:

私は、DAO にしろ ADO にしろ、こんなことをした験しがないです。
必要な時だけ接続して、不要になったら即クローズです。


ああ、そういえば自分のときもメイン EXE は即クローズしていた記憶が。
全然提案になってなくてすいません ○| ̄|_
# 単なる昔話になってしまった
_________________
ぽぴ王子@わんくま同盟
ぽぴ王子の人生プログラミング中 / ぽぴンち。
mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2006-08-21 19:26
用途によりますが、コネクションプールは…VB6じゃできないか。
そんなに頻繁にアクセスするのでなければ、一回一回接続・解除がいいと思う。
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-08-21 19:31
引用:

じゃんぬねっとさんの書き込み (2006-08-21 18:58) より:

私は、DAO にしろ ADO にしろ、こんなことをした験しがないです。
必要な時だけ接続して、不要になったら即クローズです。



引用:

ぽぴ王子さんの書き込み (2006-08-21 19:03) より:

ああ、そういえば自分のときもメイン EXE は即クローズしていた記憶が。



そうだったんですか・・・orz
僕は、DaoのOpenDatabaseが妙に重いので、スプラッシュウィンドウの隙に接続して、参照を配りまくってたので、皆さんもてっきりそうしているのかと思い込んでいました。
じゃあ、僕も同じようにします。

引用:

ぽぴ王子さんの書き込み (2006-08-21 19:03) より:

# 単なる昔話になってしまった


実は、データアクセス関連は、ひとつのライブラリーに切り分けしたいとも思っていたので、とても参考になりました。

じゃんぬねっとさん、ぽぴ王子さん(様?)ありがとうございました。
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-08-21 19:37
mioさんありがとうございました。

引用:

mioさんの書き込み (2006-08-21 19:26) より:

用途によりますが、コネクションプールは…VB6じゃできないか。
そんなに頻繁にアクセスするのでなければ、一回一回接続・解除がいいと思う。


そうなんですよね。
コネクションプールが使えれば、何も迷わずにすんだ訳ですが。
処理の内容を考慮しながら、接続・解除の場所を検討して行こうと思います。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-08-21 19:39
引用:

mioさんの書き込み (2006-08-21 19:26) より:

用途によりますが、コネクションプールは…VB6じゃできないか。


ADO なら一応できたような気がします。
デフォルトがなぜか false だった記憶がありますが...

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Ahf
大ベテラン
会議室デビュー日: 2006/08/16
投稿数: 172
投稿日時: 2006-08-21 20:09
私はR・田中一郎さんと同様に、プロセス開始の時点でコネクションを生成・接続し
終了の時点で解放する、という方式での開発を行っていた側です。

VB6の世代まで来ると、HWなどのリソースが豊富になったこともあり、
使用後即解放、というのが主流になったと思っていますが、
それ以前の場合は都度解放を行っているとレスポンスが悪かった
ため「都度解放はご法度」という記憶があります。

※もちろん物件それぞれの事情もあるとは思います。

どちらが一般的かとなると難しいところだと思いますが、どちらも利用されていた
方式であるのは間違いないと思います。

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