현재 오프라인 상태입니다. 인터넷에 다시 연결하기를 기다리고 있습니다.

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

중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

200300
더 이상 지원되지 않는 제품의 KB 내용에 대한 고지 사항
이 문서에서는 Microsoft에서 더 이상 지원하지 않는 제품에 대해 설명합니다. 따라서 이 문서는 "있는 그대로" 제공되며 업데이트되지 않습니다.
요약
독립적인 Jet 세션을 Jet OLE DB 공급자를 사용하는 모든 ADO 연결을 유지합니다. 한 연결에서 두 개의 연결이 같은 데이터베이스 응용 프로그램에 있는 경우에도 두 번째 연결에서 읽고 쓰기 간의 지연 결과.

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

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

Const USE_SAME_CONNECTION = FalseSub MissedReadsDemo()Dim conn1 As New ADODB.ConnectionDim conn2 As New ADODB.ConnectionDim rs As New ADODB.recordsetDim strConnect As StringDim 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.CloseEnd 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.ConnectionDim conn2 As New ADODB.ConnectionDim rs As New ADODB.recordsetDim JRO As New JRO.JetEngineDim strConnect As StringDim 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.CloseEnd 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 프로세스 간 방법

경고: 이 문서는 자동으로 번역되었습니다.

속성

문서 ID: 200300 - 마지막 검토: 07/13/2004 18:05:49 - 수정: 1.1

Microsoft OLE DB Provider for Jet 4.0

  • kbmt kbdatabase kbhowto kbjet kbprovider KB200300 KbMtko
피드백