동기화 방법 쓰기 및 Jet OLE DB 공급자 및 ADO 읽기

기술 자료 번역 기술 자료 번역
기술 자료: 200300 - 이 문서가 적용되는 제품 보기.
모두 확대 | 모두 축소

요약

독립적인 Jet 세션을 Jet OLE DB 공급자를 사용하는 모든 ADO 연결을 유지합니다. 한 연결에서 두 개의 연결이 같은 데이터베이스 응용 프로그램에 있는 경우에도 두 번째 연결에서 읽고 쓰기 간의 지연 결과.

이 비동기 쓰기/읽기 동작입니다. Microsoft Jet 향상된 데이터베이스 성능을 제공하기 위해 시스템 버퍼링 페이지를 사용하고 시스템 버퍼링 이 페이지를 해제할 수 없습니다.

독립적인 ADO 연결을 사용할 때 Jet의 지연된 쓰기/읽기 동작을 설명하기 위해 간단한 VB 양식에 있는 단추를 다음 코드를 실행하십시오.

Const USE_SAME_CONNECTION = False

Sub MissedReadsDemo()
Dim conn1 As New ADODB.Connection
Dim conn2 As New ADODB.Connection
Dim rs As New ADODB.recordset
Dim strConnect As String
Dim i As Long

    ' Set up our connection string (requires a database named c:\db1.mdb).
    strConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\db1.mdb"

    ' Open connection 1 and drop and re-create test table.
    conn1.CursorLocation = adUseServer
    conn1.Open strConnect
    On Error Resume Next
    conn1.Execute "drop table tmpTest", , _
        adExecuteNoRecords + adCmdText
    On Error GoTo 0
    conn1.Execute "create table tmpTest (id long)", , _
        adExecuteNoRecords + adCmdText
    
    ' Close connection 1 to flush the creation of table tmpTest. 
    conn1.Close
    
    ' Now open connection 1 and connection 2.
    conn1.Open strConnect
    conn2.Open strConnect
    
    ' Insert 10 records using connection 1.
    For i = 1 To 10
        conn1.Execute "insert into tmpTest (id) values (1)", , _
            adExecuteNoRecords + adCmdText
    Next i
    
    ' Attempt to read records using second connection if
    ' USE_SAME_CONNECTION is set to False.
    If (USE_SAME_CONNECTION) Then
        Set rs = conn1.Execute("select * from tmpTest", , adCmdText)
    Else
        Set rs = conn2.Execute("select * from tmpTest", , adCmdText)
    End If
    
    ' Count records in our table (should be 10).
    i = 0
    While Not rs.EOF
        i = i + 1
        rs.MoveNext
    Wend
    rs.Close

    If (USE_SAME_CONNECTION) Then
        MsgBox "Read " & i & " records using same connection."
    Else
        MsgBox "Read " & i & " records using 2 different connections."
    End If
    
    conn1.Close
    conn2.Close

End Sub
				
참고 위의 샘플 코드를 반복해서 실행할 경우 일시적으로 10 얻을 것입니다 USE_SAME_CONNECTION 플래그 False로 설정되어 있는 경우 반환되는 반환된 또는 0 레코드를 기록합니다. 이 쓰고, Jet OLEDB 공급자 4.0 두 ADO 연결을 완전히 동기있지 않습니다 사용할 때 읽는 방법을 보여 줍니다. USE_SAME_CONNECTION 플래그 True로 설정된 경우, 반환된 10개의 레코드를 항상 나타납니다. 쓰기 및 동일하게 읽은 보여 Jet OLEDB 공급자 4.0을 사용하는 경우 100% 동기 ADO 연결이 있습니다.

추가 정보

특정 상황에서 두 가지 별도의 ADO 연결 작성 및 Jet OLEDB 공급자를 사용하여 Access 데이터베이스에서 데이터를 읽을 때 사용해야 할 수도 있습니다. 예를 들어, 쓰기 및 읽기 같은 Access 데이터베이스에 두 개의 별도의 프로세스가 있으면 방법은 단일 연결을 공유할 수 없습니다. 이 상황에서 쓰기를 동기화할 수 및 별도의 ADO 연결을 사용하여 이러한 지침을 읽고 따라야:

  1. 작성기를 사용하여 데이터를 쓰는 데 전에 ADO의 Connection.BeginTrans, 트랜잭션, 시작해야 합니다.
  2. 작성기가 데이터베이스 업데이트를 확인한 다음 ADO의 Connection.CommitTrans 사용하여 트랜잭션 커밋 합니다.
  3. 판독기가 전에 데이터를 읽는 동안 해당 연결을 전달하여 JRO.JetEngine.RefreshCache 호출해야 합니다.
JRO.JetEngine VB 프로젝트에 Microsoft Jet 및 복제 개체 2.1 라이브러리에 대한 참조를 추가하여 포함되어 있음을 유의하십시오.

다음 코드 예제에서는 위의 메서드를 사용하여 두 개의 연결을 동기화하는 방법을 보여 줍니다.

Sub SyncReadDemo()
Dim conn1 As New ADODB.Connection
Dim conn2 As New ADODB.Connection
Dim rs As New ADODB.recordset
Dim JRO As New JRO.JetEngine
Dim strConnect As String
Dim i As Long

    ' Set up our connection string (requires a database named c:\db1.mdb).
    strConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\db1.mdb"

    ' Open connection 1 and drop and re-create test table.
    conn1.CursorLocation = adUseServer
    conn1.Open strConnect
    On Error Resume Next
    conn1.Execute "drop table tmpTest", , _
        adExecuteNoRecords + adCmdText
    On Error GoTo 0
    conn1.Execute "create table tmpTest (id long)", , _
        adExecuteNoRecords + adCmdText
    
    ' Close connection 1 to flush the creation of table tmpTest. 
    conn1.Close
    
    ' Now open connection 1 and connection 2.
    conn1.Open strConnect
    conn2.Open strConnect
    
    ' Insert 10 records using connection 1.
    ' Note we must perform all writes inside of a transaction.
    conn1.BeginTrans
    For i = 1 To 10
        conn1.Execute "insert into tmpTest (id) values (1)", , _
            adExecuteNoRecords + adCmdText
    Next i
    conn1.CommitTrans
    
    ' Refresh cache for reader connection.
    JRO.RefreshCache conn2
    Set rs = conn2.Execute("select * from tmpTest", , adCmdText)
    
    ' Count records in our table (should be 10).
    i = 0
    While Not rs.EOF
        i = i + 1
        rs.MoveNext
    Wend
    rs.Close

    MsgBox "Read " & i & " records using different connections."
    
    conn1.Close
    conn2.Close

End Sub
				
위의 코드를 실행하면 판독기 연결에 의해 반환된 10개의 레코드를 항상 구해야 합니다. RefreshCache, 호출을 주석으로 또는 트랜잭션이 데이터를 쓰는 동안 사용하지 않는 경우, 반환되는 레코드 수를 항상 10 않습니다. 이 메서드는 다음 동기화된 쓰기 및 읽기를 별도의 프로세스 간에 ADO는 Microsoft Jet OLE DB 공급자 4.0 함께 사용할 때 허용됩니다.

이 메서드는 ADO를 사용하면 Microsoft Access ODBC 드라이버를 사용할 때 작동하지 않는 유의하십시오. Microsoft Access ODBC 드라이버가 동기화된 개와 읽기 작업 간의 모든 상황에 아래에 두 계속 열린 ADO 연결 허용하지 않습니다. 성공적으로 작성하고 ADO를 사용하면 Microsoft Access ODBC 드라이버를 사용하여 데이터를 읽을 수 작성기에 연결 쓰기 완료되고 판독기 연결 합니다 닫혔다가 데이터를 읽기 전에 닫아야 합니다. 동기화하려면 다음 메서드를 쓰고 Microsoft Access ODBC 드라이버 가진 2 연결 및 ADO 사이의 읽습니다.

  1. 작성기가 데이터베이스 업데이트 (포함 또는 제외 트랜잭션) 확인한 다음 이 개체의 연결을 닫습니다 합니다.
  2. 판독기를 닫고 전에 데이터를 읽는 동안 그 연결을 다시 열어야 합니다.

참조

180223동기화 읽기 및 쓰기 두 DAO 프로세스 간 방법

속성

기술 자료: 200300 - 마지막 검토: 2004년 7월 13일 화요일 - 수정: 1.1
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft OLE DB Provider for Jet 4.0
키워드:?
kbmt kbdatabase kbhowto kbjet kbprovider KB200300 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.
더 이상 지원되지 않는 제품의 KB 내용에 대한 고지 사항
이 문서에서는 Microsoft에서 더 이상 지원하지 않는 제품에 대해 설명합니다. 따라서 이 문서는 "있는 그대로" 제공되며 업데이트되지 않습니다.

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com