2013-02-20 1 views
1

Ok 여기에서 2010에 액세스하십시오.하위 폼 소스 개체로 매개 변수가있는 크로스 탭 쿼리 표시

크로스 탭이 있는데,이를 참조로 사용하는 쿼리에서 폼 컨트롤에 액세스하는 매개 변수가있는 "TestCrosstab"을 호출 할 수 있습니다. 그것은 다음과 같습니다

위에서 볼 수 있듯이 그것은 원본 쿼리,라고 있어요
PARAMETERS [Forms]![TestForm]![TextDaysPast] Short; 
TRANSFORM max(val) AS MaxValue 
SELECT col AS Criteria 
FROM (SELECT [Date], 'Crosstab Column Name 0' as Col, [Query Column Name 0] as val 
    FROM TestQuery 
    UNION ALL 
    SELECT [Date], 'Crosstab Column Name 1' as Col, [Query Column Name 1] as val 
    FROM TestQuery 
    UNION ALL 
    '... etc ... 
) 
GROUP BY col 
PIVOT [Date]; 

"TestQuery,"그것은 다음과 같습니다

SELECT SourceDatabase.Date, 
Count(*) AS [Query Column Name 0], 
Sum(IIf(Stuff=Stuff And Stuff=Stuff,1,0)) AS [Query Column Name 1], 
'... etc ... 
FROM SourceDatabase INNER JOIN SecondDatabase ON SourceDatabase.ID = SecondDatabase.ID 
WHERE (((SourceDatabase.Date) Between Date() And Date()-Forms!TestForm!TextDaysPast)) 
GROUP BY SourceDatabase.Date; 

그들은 모두 잘 작동 사용자가 숫자로 들어갑니다 양식 컨트롤 "TextDaysPast"및 수동으로 쿼리를 "팝업"으로 실행합니다.

위의 크로스 탭을 서브 폼의 원본 개체로 연결하여 표시하기위한 것입니다. "TextDaysPast"으로 번호를 입력하고으로 쿼리를 실행하면

Me.SubformDisplay.SourceObject = "Query.TestCrosstab" 
Me.SubformDisplay.Requery 

: VBA, 사용자 후 폼에 교차를 첨부라고, 그 중에서도에 숫자 "TextDaysPast"이 라인을 입력한다 명령 단추를 누르면 크로스 탭에 표시되지 않는 양식이 올바르게 작동합니다 (오류 없음). 원본 쿼리를 정적 "WHERE"로 변경하면 크로스 탭에서 "PARAMETERS"에 대한 필요성이 사라지고 일반적으로 하위 폼 원본 개체로 표시됩니다. "매개 변수"를 사용할 때 크로스 탭이 표시되지 않습니다.

이 문제를 해결하는 방법에 대한 아이디어가 있으십니까? 원본 쿼리와 크로스 탭을 하나의 큰 괴물로 결합하면이 문제를 해결할 수 있습니까?

입력 해 주셔서 감사합니다.

+0

내가 알 수있는 한, 문제는 매개 변수 문입니다. VBA에서 크로스 탭에 대한 SQL을 작성하고 결과를 표시하는 방법에 대해 어떻게 생각하십니까? 이렇게하면 SQL에 기록되기 때문에 매개 변수가 필요하지 않습니다. – Fionnuala

+0

다른 어떤 솔루션보다 좋을 것 같습니다. 내 쿼리에있는 구문을 사용하여 VBA에 "포트"할 수 있습니까? 양식 컨트롤 인 "TextDaysPast"는 양식의 VBA에서 쉽게 액세스 할 수 있으므로 크로스 탭에는 매개 변수가 필요하지 않습니다. 맞습니까? – Phizon

+0

예, 단지 vba에 따옴표를주의해서 복사하고 TextDaysPast에 대한 참조를 추가하십시오 :'WHERE Date() - "& Me.TextDaysPast &"...'질의를 유지하고 sql :'CurrentDB.Querydefs ("MyXTab") .SQL = sql' – Fionnuala

답변

1

내가 아는 한 하위 폼의 매개 변수가있는 크로스 탭을 참조 할 수 없습니다. 그러나 VBA에서 쿼리를 작성하면 매개 변수가 필요 없으며 하위 폼에서 참조하는 크로스 탭 쿼리의 sql을 업데이트 할 수 있습니다.

sSQL="TRANSFORM Sum(Table1.ANumber) AS SumOfANumber " _ 
    & "SELECT Table1.AText FROM Table1 " _ 
    & "WHERE Table1.AText='" & Me.txtText & "' " _ 
    & "GROUP BY Table1.AText PIVOT Table1.AText2" 

''Permanently change the sql for MyXtab 
CurrentDB.Querydefs("MyXtab").SQL=sSQL 
Me.MySubformControlName.Requery 
+0

자, 폼의 VBA를 수정하려고합니다. SQL을 자체 함수/호출로 사용하거나 사용되는 곳을 지정하는 것이 더 나은 방법입니까 (이 경우 명령 단추)? 고마워요, 계속 알려 드리겠습니다! – Phizon

+0

대단히 당신이하고있는 일에 달렸지 만 SQL 쿼리를 저장하고 SQL 문자열을 저장하고 새 SQL로 쿼리를 업데이트 한 다음 다시 설정할 수도 있습니다. – Fionnuala

+0

VBA에서 SQL을 사용하여 도구로 작업 한 후, ''& Me.TextDaysPast & " '를 사용하여 원본 쿼리를 변경 한 후에 크로스 탭에 매개 변수가 필요하지 않다는 점을 제외하고 양식 컨트롤 참조와 동일하게 작동합니다 (Me.TextDaysPast는 정적 참조로 전달되어야합니다). 아름다운! 정말 고맙습니다! – Phizon