2008-11-14 4 views
0

누구나 Access vba에서 런타임 오류 3734의 세부 정보를 제공 할 수 있습니까? 참고로 는 내가 저장하지 않고 현재 데이터베이스에 ADO를 사용하고 있는지 것 같다 다음 스레드access vba : 런타임 오류 3734

How to run a loop of queries in access?

Sub plausibt_check() 

Dim rs As DAO.Recordset 
Dim rs2 As ADODB.Recordset 
Dim db As database 
Dim strsql As String 
Dim tdf As TableDef 




Set db = opendatabase("C:\Codebook.mdb") 
Set rs = db.OpenRecordset("querycrit") 

Set rs2 = CreateObject("ADODB.Recordset") 
rs2.ActiveConnection = CurrentProject.Connection 


For Each tdf In CurrentDb.TableDefs ' in this line the error occurs 
+0

오류의 원인이되는 코드를 게시하십시오. – xsl

답변

0

의 코드에서 그것을 얻고있다. ADO가 포함 된 코드를 실행하기 전에 저장해야합니다.

1

나는 당신이하려는 것을 이해하지 못합니다. 왜 하나의 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로 여는 데이터베이스를 정의하는 경우입니다. 실제로 무엇을 성취하려고하는지 모르기 때문에 코드에서 무엇을 변경해야하는지 정확하게 조언하는 것은 거의 불가능합니다.

+0

때때로 ADO 스키마를 사용하는 것이 유용 할 수 있습니다. – Fionnuala

+0

ADO가 결코 유용하지 않다는 말은 아닙니다. DAO가 할 수없는 제트 4에는 ADO가 할 수있는 약 6 가지 항목이 있습니다 (MS는 의도적으로 ADO 대신 DAO를 사용하지 않으려 고 의도적으로 철회하기로 결정했기 때문에 지금은 뒤집 었습니다). 그러나 기본 레코드 집합 작업의 경우 DAO를 통한 ADO에는 유틸리티가 없습니다. –

관련 문제