- - PR -
VB6とDAOでDLL内で接続オブジェクトを共有する良い方法
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-08-21 18:27
大昔に作ったシステムでしてVB6でDAOを使っています。
要所でデータベースアクセスが生じるため、接続オブジェクトをグローバル変数にして、これを各クラスで利用するという作りになっております。 今回、機能追加を行っているのですが、EXEがでかくなりすぎたため、DLL に切り分けしているのです。 ところが、DLL に切り分けると、全てのクラスに接続オブジェクトの参照を渡すか、各クラスで個々に接続させなければなりません。 これは仕方のないことなのでしょうか? 何か良い方法がありましたらご教示いただけたらと思っております。 実際には、使用直前で接続して使用後に切断するのが良いのでしょうけど、毎度接続するのも処理効率が悪いかなぁと思っているのです。 | ||||||||||||
|
投稿日時: 2006-08-21 18:58
私は、DAO にしろ ADO にしろ、こんなことをした験しがないです。 必要な時だけ接続して、不要になったら即クローズです。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2006-08-21 19:03
こんにちは。
「EXE が大きくなりすぎて DLL に切り分け」というのはあいにく経験がないので すが、2つの EXE で同じ mdb に接続しなくちゃならんぞね、というような経験 はあります。 そのときは、メイン EXE に mdb にアクセスするためのクラスを作り、サブ EXE からそのメソッドを呼んでもらって、メイン EXE をプロキシのように利用し てアクセスさせていた記憶が。ちなみに両者の通信は PostMessage / SendMessage でおなじみの WIN32 Message でした orz # なにぶん8年前の話なので… VB も 5 だったし # 意図としては同じ mdb への競合を少しでも避けたかったのです DLL に切り分けと言うことはもうすこしスマートに通信できそうです(単に呼ぶだ けで可能かしら)が、とりあえず方法の一つとして提案でした。
ああ、そういえば自分のときもメイン EXE は即クローズしていた記憶が。 全然提案になってなくてすいません ○| ̄|_ # 単なる昔話になってしまった _________________ ぽぴ王子@わんくま同盟 ぽぴ王子の人生プログラミング中 / ぽぴンち。 | ||||||||||||
|
投稿日時: 2006-08-21 19:26
用途によりますが、コネクションプールは…VB6じゃできないか。
そんなに頻繁にアクセスするのでなければ、一回一回接続・解除がいいと思う。 | ||||||||||||
|
投稿日時: 2006-08-21 19:31
そうだったんですか・・・orz 僕は、DaoのOpenDatabaseが妙に重いので、スプラッシュウィンドウの隙に接続して、参照を配りまくってたので、皆さんもてっきりそうしているのかと思い込んでいました。 じゃあ、僕も同じようにします。
実は、データアクセス関連は、ひとつのライブラリーに切り分けしたいとも思っていたので、とても参考になりました。 じゃんぬねっとさん、ぽぴ王子さん(様?)ありがとうございました。 | ||||||||||||
|
投稿日時: 2006-08-21 19:37
mioさんありがとうございました。
そうなんですよね。 コネクションプールが使えれば、何も迷わずにすんだ訳ですが。 処理の内容を考慮しながら、接続・解除の場所を検討して行こうと思います。 | ||||||||||||
|
投稿日時: 2006-08-21 19:39
ADO なら一応できたような気がします。 デフォルトがなぜか false だった記憶がありますが... _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2006-08-21 20:09
私はR・田中一郎さんと同様に、プロセス開始の時点でコネクションを生成・接続し
終了の時点で解放する、という方式での開発を行っていた側です。 VB6の世代まで来ると、HWなどのリソースが豊富になったこともあり、 使用後即解放、というのが主流になったと思っていますが、 それ以前の場合は都度解放を行っているとレスポンスが悪かった ため「都度解放はご法度」という記憶があります。 ※もちろん物件それぞれの事情もあるとは思います。 どちらが一般的かとなると難しいところだと思いますが、どちらも利用されていた 方式であるのは間違いないと思います。 |