2012-03-16 23 views
14

これはどちらが良いかについての質問ではなく、なぜ機能的に異なるのかという疑問です。私が取り組んでいた問題は処理されましたが、なぜこの現象が起こっているのか不思議です。ADOとDAOの違い

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

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

私は2番目のデータをDAOにプルダウンしました。最初のデータプルはまだADOです(一般的には私が好む)が、DAOに変更することを検討しています。なぜなら、コードに1つのデータアクセスメソッドがあるからです。

なぜ、ADOはデータを1つのケースで取得しないのか説明してもらえますか?繰り返しますが、これは純粋に情報提供のためのものです。

+1

コードを参照しなくてもコメントするのは難しいですが、cusrsorタイプ/レコードセットタイプの問題かもしれません。あなたのコードのデフォルトに頼っていますか?あなただけがAccessで作業している場合、DAOはAccessにとってネイティブであり、ADOよりも多くの制御を提供するため、より良い選択です – SWa

+2

どこでワイルドカードを使用しますか?これは一般的な問題です.ADOの場合、ワイルドカードは%ですが、DAOは(通常)*です。 – Fionnuala

+0

@Remou、私は2つの間のワイルドカードの違いに精通していますが、私は残念なことにクエリでそれらを使用しません。 – APrough

答えて

11

DAOは、Jet(Ms-Access)データテーブルのネイティブデータアクセス方法です。 ADOの "Active X Data Objects"は、ほぼすべてのタイプのデータベースに対する業界標準の接続です。

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

+1

+1 DAOはADOよりもはるかに良い選択です。 – SWa

+0

@Matt Donnan - パラメータは問題ではありません。両方のクエリでそれらが使用され、テーブルに変更した後でも引き続き使用されます。クエリ処理に時間がかかりすぎるか、何かが必要な場合があります。しかし、私はあなたのコメントが「DAOメソッドを使用すると、Excelではなくクエリを実行し、それ自体のパラメータ/参照にアクセスできるようになります」というコメントが好きです。たぶん、ADOはExcelにクエリを処理しようとしていて、そこに失われていますか? – APrough

+0

@creamyeggとカイル。私はDAOがおそらくより良い選択であることに同意しますが、私は一般的にADOをSQL Serverに対して使用し、さらに習慣も厳しくなります.ADOを使用すると、ほとんどの場合、次のような問題が発生します。私は今から(これらのタイプのプロジェクトで)DAOを使用しています。 – APrough

3

私はこの質問が既にうまく答えられたと思いますが、私はDAOとADOを比較するためのもう1つの優れた(見つけにくいですが)リソースを追加したいと思います。主にAccessフォームとレポートを持つAccessアプリケーションを対象としていますが、ここでの情報の多くはExcelで書かれたソリューションにも当てはまります。 Visual Basicで

UtterAccess Wiki Article: Choosing between ADO and ADO

1

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

Visual Basicに3つのデータアクセスインターフェイスがあるのはなぜですか?データアクセス技術は絶え間なく進化しており、3つのインタフェースのそれぞれは異なる技術水準を表しています。最新のものは、RDOまたはDAOよりも単純でありながら柔軟性の高いオブジェクトモデルを備えたADOです。新しいプロジェクトでは、データアクセスインターフェイスとしてADOを使用する必要があります。

+0

ADOは現在開発中ではありません リンク:http://www.utteraccess.com/ wiki/index.php/Choosing_between_DAO_and_ADO –

関連する問題