2012-06-04 6 views
2

하나의 모듈 보고서 (즉, 모두 동일한 조건을 다른 조건으로 반환)에 들어있는 매우 쿠키 커터 데이터베이스 (매우 유사한 매우 복잡한 쿼리)가 있습니다.Project - MS Access에서 쿼리 목록 가져 오기

콤보 상자를 사용하여 쿼리를 표시하는 쿼리가 ~100 개이므로 OpenArgs을 통해 보고서로 전송됩니다.

내 프로젝트에있는 쿼리 목록 (이름 만)을 생성해야합니다. 콤보 상자의 제어 소스를이 쿼리 목록으로 만들고 싶습니다.

내가 문자열 연결된 Value List 소스 또는 Query/Table 소스 유형을해야 할 경우 그것은 중요하지 않습니다, 중요한 건 바운드 열이 "qryName"

내가 지금까지 무엇을 가지고 포함되어 있습니다 :

For Each qry In CurrentDb.QueryDefs 
    list = list & ";" & """" & qry.Name & """" 
    'String in the form "qryName";"qryAnotherQuery";"qryNextQuery" 
Next 

하지만 분명히 값 목록에는 약 2000 자 제한이 있으므로 값 목록을 사용할 수없는 쿼리가 많이 있습니까? 또한 참고 : qry.Name는 "~ sq_cTableName"과 같은 결과를 반환 할뿐 아니라 내 쿼리가 문제가됩니다. 나는 질의 만하고 싶다.

아이디어가 있으십니까? 보고서의 OpenArgs에 쿼리 이름을 보낼 수있는 한 콤보 상자없이이 정보를 표시하는 다른 방법에 대해서도 열려 있습니다.

답변

5

MSysObjects에 대한 읽기 권한이있는 경우이 쿼리를 콤보 상자의 행 원본으로 사용할 수 있습니다.

SELECT m.Name 
FROM MSysObjects AS m 
WHERE m.Type=5 AND m.Name Not ALike "~%" 
ORDER BY m.Name; 

판단 기준, m.Name Not ALike "~%"는 결과 집합에서 임시 숨겨진 쿼리를 제외한다.

MSysObjects에 대한 읽기 권한이없는 경우 콤보 상자의 행 원본으로 사용하는 콜백 함수를 만들어야합니다. 해당 경로로 이동해야하는 경우 보고서 개체를 나열하고 쿼리 목록을 변경하는 Allen Browne의 다음 예제를 참조하십시오 (List Box of Available Reports).

+0

이것은 정확히 내가 필요한 것입니다. 내가 원하는 정확한 것을 표시하고 사용자가 볼 필요가없는 자신 만의 쿼리가 있으면 예외를 추가 할 수 있습니다 (더 많은 'Not Alike' ")). 잘 작동합니다. 감사! – StuckAtWork

1

목록 상자를 사용하면 쿼리를 반복 할 때 Me.lstBox.AddItem qryName을 사용할 수 있습니다.
당신은 다음

For Each varItm In lstBox.ItemsSelected 
    Debug.Print lstBox.ItemData(varItm) 
Next varItm 

또는 다중 선택을 허용하지 않는 경우,

lstBox.ItemData(lstbox.ItemsSelected(0)) 

는 당신에게 하나의 항목을 줄 것이다 쿼리의 이름을 찾으 ItemsSelected 및 정보 ItemData의 조합을 사용할 수 있습니다 선택한

+0

나는 이것을 시도 할 것이지만, 여전히 "나의 쿼리를 반복"할 방법이 없다. 난 당신의 데이터베이스에 대한 모든 쿼리 이름을 찾는 구문이 무엇인지 모르겠습니다. 위의 코드는 표시해서는 안되는 모든 테이블 등을 찾습니다. – StuckAtWork

+2

빠르고 더러운 방법 - 제외 할 항목을 확인하기 위해 반환 할 내용을 살펴야합니다. '이름 선택, 유형이 MSysObjects 인 경우 Type = 5'- 콤보 상자의 소스로 사용하지 않는 이유는 무엇입니까? 일부 TMP 쿼리도 포함합니다. – SeanC

+0

'AddItem'은 행 원본 유형으로 '값 목록'을 필요로하기 때문에이 경우 AddItem 접근 방식이 도움이되지 않을 수 있습니다 (도움말 항목 참조). OP는 이미 쿼리 이름의 결합 길이가 값 목록의 용량을 초과한다고 말했습니다. 그것이 작동 할 수있는 유일한 방법은 숨겨진 쿼리의 이름을 제외하여 제한을 초과 할 수 있는지 여부입니다. – HansUp