2014-10-20 2 views
1

현재 사용자가 적용한 필터의 ItemID를 새 테이블로 가져 와서 다운 스트림을 사용해야하는 AccessDB 앱이 있습니다. 하위 폼 데이터 시트 .recordsetclone 속성 사용하기 원하는 레코드 세트를 볼 수 있으며 .recordcount는 정확한 레코드 수를보고합니다. 그렇지 않으면, 다음은 원하는 임시 테이블을 생성하지 않으며 AccessVBA는 불평하지 않습니다.MSAccess : Recordsetclone에서 새 테이블로 ItemID 가져 오기?

Dim db As DAO.Database 
Dim rstItemIDs As DAO.Recordset 
Dim strSQL as String 
Set db = CurrentDb 

set rstItemIDs = Forms!Mainform![Data subform].Form.RecordsetClone 
msgbox rstItemIDs.recordcount 'reports the correct result 

strSQL = "SELECT rstItemIDs.ItemID INTO tempTable FROM rstItemIDs;" 
db.Execute strSQL 

dao.recordset에 대해 SQL Select 쿼리를 구성 할 수 있습니까?

제공 할 수있는 모든 포인터를 제공해 주셔서 감사합니다.

답변

2

Access SQL은 DAO 또는 ADODBRecordset을 쿼리의 데이터 원본으로 허용하지 않습니다.

그러나 나는 당신이 시도 할 때 Access가 불평하지 않는다는 것을 당황스럽게 생각합니다. 샘플 코드를 재현하려고 시도 할 때마다 # 3078, 오류가 발생했습니다. "Microsoft Access 데이터베이스 엔진이 입력 테이블이나 쿼리 'rstItemIDs'를 찾을 수 없으므로 'rstItemIDs'가 존재하고 그 이름의 철자가 올바른지 확인하십시오."

심지어 DoCmd.SetWarnings False은 오류 메시지를 표시하지 않았습니다.

대안에 관심이있는 경우(매번 새 버전을 만드는 대신)을 유지 한 다음 내용을 삭제하고 rstItemIDs을 통해 두 번째 레코드 집합에 각 값을 추가하십시오. RBAR (row by agonizing row) 메소드이지만, 작은 레코드 세트로는 그리 고통스럽지 않을 수도 있습니다.

설정 기반 방식은 양식의 .RecordSource.Filter 속성을 기반으로 쿼리를 만드는 것일 수 있습니다. 예를 들어, 내 양식의 .RecordSourceSELECT * FROM foo로하고 현재 양식 .Filterid>10 등으로,이 나에게 양식의 필터링 된 레코드를 반환하는 SELECT을 줄 것이다 :

Replace(Me.RecordSource, ";", "") & vbcrlf & "AND " & Me.Filter 
+0

HansUp - 매우 도움이! 귀하의 의견을 내 메이크 테이블 쿼리의 기초로 하위 양식의 .Filter 속성을 사용하려고 시도했다. 나는 이미 다른 곳에서 RBAR 방법을 사용하여 비참하게 확장하지 못했습니다. 이 접근법은 더 큰 데이터 세트에서도 예상대로 작동하는 것으로 보입니다. –

관련 문제