掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
DAOとADOの併用に関して (ID:102687)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
>> DAO と ADO を併用しているのですね? > とありますが、それはどういった点からそういえるのか教えてください。 > ADODB.Connection.open → これはADO > DBEngine.CompactDatabase → これはDAO > というところからでしょうか? ですます。 複数の接続を併用すると、DAO による接続と ADO による接続が発生するため、 トランザクション管理の観点からは、あまり望ましいものではありません。 特に、キャッシュの更新時間差の問題が生じる可能性があります。 http://www.canalian.com/workshop/access/JetCache.html しかしながら、DAO にしかできない機能や ADO が得意とする分野もあるので、 時として、両者を併用する事があるのもまた事実です。 ざっくりいうと、mdb / accdb を扱うのであれば、DAO が最良のミドルウェアと言えます。 DAO と ADO の処理速度を考えると、ADODB は OLEDB 層を経由する必要があるため、 多くの場合には DAO の方が良好なパフォーマンスを得られます。 また、accdb の Attachment型を扱いたい場合や、accdb の最適化を行いたい場合、 Access 2007 / 2010 対応版の DAO を使う必要がありますし、 動的プロパティ(Property オブジェクト)の作成についても、DAO でないと行えません。 しかしながら、DAO はカーソルベースの設計になっており、ADO では可能な非接続型の 利用方法がサポートされていません。また、VB6(≠Access)でデータバインドする場合、 ADO の方に大きなアドバンテージがあります。 そのため、やりたい要件に合わせてどちらが最適かを判断したうえで、どうしても 両方を使わなければ実現できない場合に限り、DAO + ADO を併用すると良いでしょう。 > また併用している場合、参照設定にMicrosot Office 12.0 Access database…を設定して > ProviderにMicrosoft.ACE.OLEDB.12.0とする。これはDAO? 《ADO の場合》 '参照設定して利用する場合のコード例 Dim cn As ADODB.Connection Set cn = New ADODB.Connection cn.Provider = "Microsoft.ACE.OLEDB.12.0" cn.Properties("Data Source").Value = "C:\db1.accdb" cn.Open Dim rs As ADODB.Recordset Set rs = cn.Execute("SELECT * FROM TBL") '参照設定せずに利用する場合のコード例 Dim cn As Object Set cn = CreateObject("ADODB.Connection") cn.Provider = "Microsoft.ACE.OLEDB.12.0" cn.Properties("Data Source").Value = "C:\db1.accdb" cn.Open Dim rs As Object Set rs = cn.Execute("SELECT * FROM TBL") 《DAO の場合》 '参照設定して利用する場合のコード例 Dim de As DAO.DBEngine Set de = New DAO.DBEngine Dim ws As DAO.Workspace Set ws = de.CreateWorkspace("#Default Workspace#", "Admin", "") Dim db As DAO.Database Set db = ws.OpenDatabase("C:\db1.accdb") Dim rs As DAO.Recordset Set rs = db.OpenRecordset("SELECT * FROM TBL") '参照設定せずに利用する場合のコード例 Dim de As Object Set de = CreateObject("DAO.DBEngine.120") Dim ws As Object Set ws = de.CreateWorkspace("#Default Workspace#", "Admin", "") Dim db As Object Set db = ws.OpenDatabase("C:\db1.accdb") Dim rs As Object Set rs = db.OpenRecordset("SELECT * FROM TBL") > もしくわ もしくは
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.