2016-07-11 6 views
0

アクセスフォームまたはレポートのRecordSourceは、テーブルまたはクエリです。テーブルはローカルでもリンクされていても(計算フィールドを含むかもしれません)、クエリは他のクエリや他のテーブルを参照できます。さらに、問合せでは「*」選択、ユーザー定義関数(UDF)、リモートで接続されたソースも使用できます。クロス集計クエリにはフィールド内の値によって決定されるフィールド名が含まれるため、クロス集計フィールド名はデータの変更に応じて変わる可能性があります。私は次の点を考慮して、与えられたレコードのフィールド名を決定するための最も効率的な「光タッチ」の道を見つけようとしているAccess RecordSourceのフィールドを列挙する最も効率的な方法は何ですか?

  • ユーザー定義関数を含むクエリでなければはフィールド名を決定するときに関数を呼び出すため、レコードセットのアプローチは適切ではありません。

  • ロックは、データベースは、理想的には、リンクテーブルへ

  • 接続がないを開くべき理想的、とも任意のトリガがすべき排他モードではないだろう基礎となるオブジェクト

  • に置くべきではありませんリモートテーブル上でトリガされます。可能な場合は、リモートデータソースへのアクセスなしにフィールドを決定する必要があります。

  • フィールド名は必須ですが、フィールドの種類と属性があればいいです。フィールドの説明はボーナスになります。

  • クロス集計のクエリが潜在的に基礎となるテーブルを開き、UDFを実行することが懸念されるため、クロス集計クエリのフィールドの列挙をスキップする準備はできていますが、クエリはクロス集計クエリであるソースを持っている場合、十分ななりのDAOテーブル定義とクエリ定義を使用している場合、私はわからないんだ、または私はおそらくいくつかの他のADOスキーマおよびカタログを探索したりする必要があるかどうか...

を知っていますアプローチ?

これは非常に基本的なDAO手法ですが、必ずしも最速であるとは言えません。

Sub EnumQueryDefFieldNames() 

    Dim qdf As QueryDef 
    Set qdf = CurrentDb.QueryDefs("Query7_Crosstab") 
    For Each fld In qdf.Fields 
    Debug.Print fld.Name 
    Next fld 

End Sub 

答えて

1

TableDefとQueryDefは、このための通常のオブジェクトです。シンプルで速い。

もちろん、クロス集計では、ハードコードされている場合を除いて(おそらくテストされていない)フィールド名を決定するためにデータを取得する必要があります。

関連する問題