• ベストアンサー

アクセスVBAです。

DCountでテーブルのデータを取得するのと ADOのrs("index")で取得するのでは 全然早さが違うのですが それは仕様ですか?

質問者が選んだベストアンサー

  • ベストアンサー
  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.1

こんにちは DCountが遅い、というのは結構良く目にしますね。 古めですけど、 http://tsware.jp/labo/labo_35.htm ここに検証がありました。

ZSAOZAOXHIE
質問者

お礼

ありがとうございました。

関連するQ&A

  • ACCESS VBA レコードセットの参照方法について

    ACCESS2000でシステムを作っています。 ADOを使って、SELECT句に"*" を使用した内部結合でデータを 抽出したときの結果の参照方法がわかりません。 SQL="SELECT * FROM table1 INNER JOIN table2 ON table1.id = table2.id" rsはレコードセット,ACはアクティブコネクションとして rs.Open SQL, AC, adOpenKeyset, adLockOptimistic にて結果を取得し、変数aにtable1のフィールド名の値を代入 しようとしています。 a = rs!table1.フィールド名 では「コンパイルエラー メソッドまたはデータメンバが 見つかりません」となり、値の参照ができません。 "*" でなく、フィールド名を明示して それぞれのフィールドに "as 別名"をつければ 参照できますが、フィールドが多いので "*"を使用したいのです。 大変初歩的な質問かと思いますが、どうかよろしくお願いします。m(_ _)m

  • アクセス ADO レコードの件数がおかしい

    アクセスADOでクエリの行数を取得したいのですが クエリが200行でも100行でも必ず12が返ります。 クエリ1は、一度12行の時にadoで数を取得し、その時は、正しく12が返ったのですが、 行数が変わっても12が返ります。 コードは、 Sub Sample() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Set cn = CurrentProject.Connection rs.Open "SELECT * FROM クエリ1", cn, adOpenStatic, adLockPessimistic Debug.Print rs.RecordCount rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub です。 Debug.Print DCount("*", "クエリ1") だと、正しいレコード数が取得されるのですが、ADOだとおかしいです。 クエリ1のSQL文は、 SELECT Q_作業用.* FROM Q_作業用; のように、別のクエリを持ってきています。 何が原因なのでしょうか? よろしくお願いします。

  • アクセスのADO

    アクセスのADOで ウォッチ式にrsを登録してみていると rs.CursorLocation = adUseClient rs.Open "テーブル1", cn, adOpenStatic, adLockOptimistic を通過後は、 RecordCountには、20と数字が入るのですが、 rs.CursorLocation = adUseClient rs.Open "テーブル2", cn, adOpenStatic, adLockOptimistic にすると RecordCount : <データ プロバイダーまたはほかのサービスが E_FAIL 状態を返しました。> となってしまいます。 テーブルの中身が原因だと思うのですが どういう条件なら、 <データ プロバイダーまたはほかのサービスが E_FAIL 状態を返しました。> になるのでしょうか? rs.CursorLocation = adUseClient を使う理由は、 rs.Sort = "日付 DESC" とソートする為です。 参照設定はMicrosoft Activex Data Objects 2.8 Library にしています。 Access2010・32bitです。

  • 他ファイルのテーブルの情報を取得したい

    アクセス DCount関数で他のファイルのテーブルの件数を取得することは不可能でしょうか? ファイル1.mdbとファイル2mdbがあり、 ファイル2mdbには、 テーブル名 フィールド:a と言うデータがあります。 ファイル1.mdbにはテーブルはありません。 ファイル1.mdbのVBAで ファイル2.mdbのテーブル名のレコード件数を取りたいのですが 不可能でしょうか? ファイル1.mdbのVBEで Sub 関数で件数を取得() MsgBox DCount("[テーブル名]", "a") End Sub とやってもエラーになります。この関数にファイルを指定する部分もありません。 エラー内容は --------------------------------------------------------- 実行時エラー3078 入力テーブルまたはクエリーが見つかりませんでした。        そのテーブル・クエリーが存在するか確認して下さい。 --------------------------------------------------------- です。 ADOを使うしかないのでしょうか?できればADOは使いたくありません。 アドバイスよろしくお願いします。

  • アクセス ADO Null以外のレコードの件数を取得したい

    アクセス ADO Null以外のレコードの件数を取得したい テーブルにレコードが100行あり、そのうちNull値は40行あります。(主キーではないです) この時、ADOでNull以外にフィルタをかけたいのですが For i = 1 To RS.RecordCount RS.Filter = "フィールド = '*'" でも RS.Filter = "フィールド = 'Null''" でも、文字列になってしまい、うまくいきません。 RS.Filter = "フィールド " <> 'Null' だとエラーになります。 「<>null」を抽出する方法をご教授願います。

  • Access DCOUNTの意味

    Access DCOUNTの意味 http://okwave.jp/qa/q3078359.html テーブルで重複があったものを除外したデータが欲しいと思い検索した結果上記のURLがヒットしました。 ページには、 Sum(1/DCount("*","TABLE1","ID='" & [ID] & "'")) という関数がありますが、ここの意味がわかりません。Dcountの意味は理解しました。 ただ、Sum(1/DCOUNT の意味がわかりません。 サイトに解説がかいてあるのですが・・・私には理解できません。 例えば、[ID]には001と002のIDコードがあるとします。 001には3レコード、002には2レコードあるとします。 DCOUNTで3という結果と2という結果を得られると思います。 よって、SUM(1/3 + 1/2) というように読み取れてしまいました。 上記だと2という値が取得したいのですが、私はどこを勘違いしているのでしょうか?

  • ACCESS VBAでSeekメソッドの処理記述

    ACCESSでテーブルにIndexを定義しています。 (重複ありで) そのIndexに入っているデータAというのが3件ほどあり、それを全て検索して、処理したいのです。 そのためにseekを使って、最初のデータを検索し、次々のデータに行きたいのですが、その場合、対象データの1件目を検索して、次のレコードに移動するには、どのように記述すればよいのでしょうか。 本などには、 If rs.EOF thenのような書き方ばかりで1件の処理の場合のみのサンプルしかないのです。 よろしくお願いします。

  • アクセスでリレーションテーブルがあるかを調べるVBA

    例えば、作家名のテーブルと本のテーブルがあって、リレーションで結合されています。作家名.ID→本.ID VBAで、全ての作家名のIDで、本.IDを検索したいです。 もし、該当するIDがなければ、デフォルトで本.IDと本.名前を追加更新したいです。作家名のテーブルのデータはあるとして、本は一部のデータしかないというケースです。 If rs.RecordCount = 0 Then rs.AddNew rs!ID = 作家名.ID rs!名前 = "あくせすの本" rs.Update End If rsをどう定義するか? 一括更新するために、Do Until rs.EOF をどういう風に使うか? それとも、別のいい方法があればよろしくお願いします。

  • ACCESS VBA

    ACCESSで検索フォームを作りたいと思っています。 VBAを使って行きたいと思うのですが、うまくいきません。 希望としては、該当するレコードのデータを抽出したいです。 よろしくお願いいたします。 ※現段階でのソースを書いてみました。 最終的に行いたい処理とは違うのですが、根本的に間違っているようなので簡略化しました。 /------------------------------------------------/ Private Sub コマンド1_Click() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim sql As String '接続 Set cn = CurrentProject.Connection 'レコードセットを取得 Set rs = New ADODB.Recordset sql = "SELECT * FROM 従業員データ " & _ "WHERE 年齢=30" rs.Open sql, cn, adOpenDynamic, adLockReadOnly rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub /------------------------------------------------/

  • VBAでAccessのテーブルのエクスポート・インポートをするには。

    すみませんが、教えてください。 Excel+VBAで、AccessをSQL,ADO,ADOXで操作しようとしています。 a.mdbのテーブルを、b.mdbに、エクスポート(インポート)したいのですが、やり方がわからず困っています。 すみませんが、テーブル構造のみをエクスポートする方法、データを含めてエクスポートする方法を教えてください。

専門家に質問してみよう