나는 당신이하려는 것을 이해하지 못합니다. 왜 하나의 DAO 레코드와 하나의 ADO를 사용하고 있습니까? 이것은 전혀 말이되지 않습니다. Access 프론트 엔드에 쿼리를 저장 한 경우 백엔드가 ODBC 테이블 링크가있는 SQL Server라고해도 실제로 ADO를 사용하면 유틸리티가 없습니다.
코드에 루프가 있다는 증거가 없으므로 코드가 루프에 의해 호출되지 않으면 KB 문서 설명이 적용되지 않습니다.
나는 당신이하고 싶은 것이 무엇인지 알지 못하지만 루프를 반복 할 때가 아니라 데이터베이스를 한 번 여는 것에 대한 요점은 그것에 대해 생각하는 모든 사람에게 분명해야합니다. 루프를 실행하고 반복 할 때마다 동일한 데이터베이스를 반복적으로 열어 보면 루프 외부에 작업이 속한 것이 분명해야합니다. 이 같은 것
: 그 코드에서
Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Set db = CurrentDB()
For Each qdf in db.QueryDef
[do whatever here]
Next qdf
Set qdf = Nothing
Set db = Nothing
, 당신은 사용자 인터페이스에 현재 열려있는 MDB를 사용하고 있지만, 그것은 중요하지 않습니다 - 당신이 열고있는 중 데이터베이스와 객체를 통해 반복하는 것은 루프 외부에서 한 번만 열어야합니다.
루프를 메인 코드에서 호출 된 서브 루틴에 넣으려면 데이터베이스 변수를 서브 루틴의 인수로 전달하십시오. 서브 루틴은 다음과 같이 될 것이다 :
Public Sub ProcessQueries(db As DAO.Database)
Dim qdf As DAO.QueryDef
For Each qdf in db.QueryDef
[do whatever here]
Next qdf
Set qdf = Nothing
End Sub
그리고 당신은 이렇게 부를 것이다 :
Dim db As DAO.Database
Set db = CurrentDB()
Call ProcessQueries(db)
Set db = Nothing
을 지금, 당신은 DAO에서 소스 데이터를 가져 오는 다음 ADO를 통해 그것으로 무언가를 주장하는 경우를 DAO 루프가 있고 내부에 ADO 루프가 있습니다. 따라서 DAO 루프 외부에서 ADO 연결을 정의하는 것이 좋습니다. 유일한 예외는 DAO 루프에서 가져온 데이터가 ADO로 여는 데이터베이스를 정의하는 경우입니다. 실제로 무엇을 성취하려고하는지 모르기 때문에 코드에서 무엇을 변경해야하는지 정확하게 조언하는 것은 거의 불가능합니다.
오류의 원인이되는 코드를 게시하십시오. – xsl