web-dev-qa-db-ja.com

ADOとDAOの違い

これはどちらが良いかという問題ではなく、なぜ機能的に異なるのかという問題です。私が遭遇していた問題は処理されましたが、なぜこの動作が起こっているのか知りたいです。

背景-Excel vbaを使用してAccessデータベースからデータをプルします。ユーザーがボタンをクリックすると、レコードセットがAccessからプルされ、スプレッドシートにさまざまなデータが入力されます。次に、別のクエリから別のレコードセットを取得して、スプレッドシートの別の部分にデータを入力します。

ADOの機能-ADOは、最初のレコードセットではうまく機能します。ただし、2番目のレコードセットはAccessのクエリに移動し、実行され、行を返しません。このクエリをAccessで実行すると、開きます(約3〜4秒後)。このクエリには、複数の結合、計算されたアイテム、制限、さらにはユニオンクエリがあります(ユニオンの有無にかかわらず、さまざまな方法で試してみました。 )ado接続を閉じて再度開いてみました。タイムアウト値を変更してみました。ADOコマンドを使用してこのデータに対してMakeテーブルクエリを実行し、代わりにテーブルからプルしました(これは途中で機能しましたが、データが絶えず変化するため、最良のケースではありません。誰かがこのツールを使用するたびにテーブル作成クエリを実行する必要はありません)。

そこで、2番目のデータプルをDAOに変更しました。見れば、動作します。最初のデータプルはまだADO(これは一般的に使用することを好みます)ですが、コードに1つのデータアクセスメソッドを含めるため、DAOに変更することを検討しています。

だから、誰かがなぜADOがデータをプルしないのに、DAOがプルするのか?)と私に説明できますか?これも情報提供のみを目的としています。

19
APrough

DAOは、Jet(Ms-Access)データテーブルのネイティブデータアクセスメソッドです。 ADO "Active X Data Objects"は、ほぼすべてのタイプのデータベースへの業界にやさしい接続です。

この場合、標準のクエリでは、ADOがDAOが返すレコードを返さない理由はありません。クエリにはAccessデータベース内のアイテムに関連するパラメーターも含まれている必要があると思われます。これがその場合ADOはExcelへの外部参照にすぎないため、上記のパラメーターを使用するオプションがないため機能しません。DAOメソッドを使用すると、Accessがトリガーされ、クエリが実行されます。 Excelよりも、それ自体のパラメーター/参照にアクセスできるようになります。

12
Matt Donnan

この質問には既に十分回答されていると思いますが、DAOとADOを比較するための別の優れた(見つけにくいとはいえ)リソースを追加したいと思います。これは主にAccessフォームとレポートを備えたAccessアプリケーションを対象としていますが、ここでの情報の多くはExcelで記述されたソリューションに適用されます。

tterAccess Wiki記事:ADOとADO の選択

4
HK1

Visual Basicでは、ActiveXデータオブジェクト(ADO)、リモートデータオブジェクト(RDO)、およびデータアクセスオブジェクト(DAO)の3つのデータアクセスインターフェイスを使用できます。データアクセスインターフェイスは、データアクセスのさまざまな側面を表すオブジェクトモデルです。 Visual Basicを使用すると、任意のアプリケーションで使用するために、接続、ステートメントビルダー、および返されたデータをプログラムで制御できます。

Visual Basicに3つのデータアクセスインターフェイスがあるのはなぜですか?データアクセステクノロジーは常に進化しており、3つのインターフェイスはそれぞれ異なる最先端の技術を表しています。最新のADOは、RDOやDAOよりも単純な(ただしより柔軟な)オブジェクトモデルを備えています。新しいプロジェクトの場合、データアクセスインターフェイスとしてADOを使用する必要があります。

1