2016-07-11 15 views
0

액세스 양식 또는 보고서의 RecordSource은 테이블 또는 쿼리가 될 수 있습니다. 테이블은 로컬 또는 링크 될 수 있으며 계산 된 필드를 포함 할 수 있습니다. 쿼리는 다른 쿼리와 다른 테이블을 참조 할 수 있습니다. 또한 쿼리는 "*"선택 항목, 사용자 정의 함수 (UDF) 및 원격으로 연결된 소스를 사용할 수 있습니다. 크로스 탭 쿼리는 필드 내의 값으로 결정되는 필드 이름을 가질 수 있으므로 데이터가 변경 될 때 크로스 탭 필드 이름이 달라질 수 있습니다. 내가 다음 사항을 고려하여, 주어진 레코드 원본의 필드 이름을 결정하는 가장 효율적인 "빛 터치"방법을 찾기 위해 노력하고있어Access RecordSource의 필드를 열거하는 가장 효율적인 방법은 무엇입니까?

:

  • 사용자 정의 함수를 포함하는 쿼리 이 아니어야합니다.은 필드 이름을 결정하는 동안 함수를 호출하므로 레코드 세트 방식이 적합하지 않습니다.

  • 잠금이

  • 가 연결된 테이블에

  • 연결이 이상적으로 열 수 없습니다해야하는 데이터베이스가 이상적으로 독점 모드로되지 않을 기본 객체에 넣고도해서는 안해야 어떤 트리거 원격 테이블에서 트리거됩니다. 가능한 필드가 원격 데이터 소스에 대한 액세스없이 결정되어야합니다.

  • 필드 이름은 필수입니다. 필드 유형 및 특성이 좋을 것입니다. 필드 설명은 보너스가됩니다.

  • 크로스 탭 쿼리는 잠재적으로 기본 테이블을 열거 나 UDF를 실행할 가능성이 있으므로 (필자의 테스트에서와 같이) 나는 크로스 탭 쿼리 필드를 열거하지 않아도됩니다. 쿼리 크로스 탭 쿼리하는 소스가있는 경우 적합 할 것 DAO에있는 TableDef 및하여 QueryDef를 사용하는 경우 내가 확실 해요, 아니면 아마도 몇 가지 다른 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는 이에 대한 일반적인 개체입니다. 간단하고 빠릅니다.

물론 크로스 탭은 하드 코딩 된 경우를 제외하고는 (테스트하지 않은) 필드 이름을 결정하기 위해 데이터를 검색해야합니다.