다음을 통해 공유


데이터 유지

휴대용 컴퓨팅(예: 랩톱 사용)은 연결된 상태와 연결이 끊긴 상태에서 실행할 수 있는 애플리케이션에 대한 필요성을 생성했습니다. ADO는 개발자에게 디스크에 클라이언트 커서 레코드 집합 저장하고 나중에 다시 로드할 수 있는 기능을 제공하여 이에 대한 지원을 추가했습니다.

다음을 포함하여 이러한 유형의 기능을 사용할 수 있는 몇 가지 시나리오가 있습니다.

  • 여행: 이동 중 애플리케이션을 사용할 때 변경하고 나중에 데이터베이스에 다시 연결하고 커밋할 수 있는 새 레코드를 추가할 수 있는 기능을 제공하는 것이 중요합니다.

  • 자주 업데이트되지 않는 조회 : 애플리케이션에서 테이블은 조회로 사용됩니다(예: 주 세금 테이블). 자주 업데이트되지 않으며 읽기 전용입니다. 애플리케이션이 시작될 때마다 서버에서 이 데이터를 다시 읽는 대신 애플리케이션은 로컬로 유지되는 Recordset데이터를 로드하기만 하면 됩니다.

ADO에서 Recordset저장하고 로드하려면 ADO Recordset 개체에서 Recordset.SaveRecordset.Open(,,,,adCmdFile) 메서드를 사용합니다.

Recordset Save 메서드를 사용하여 ADO Recordset 디스크의 파일에 유지할 수 있습니다. (Recordset ADO Stream 개체에 저장할 수도 있습니다. Stream 개체는 가이드의 뒷부분에서 설명합니다.) 나중에 Open 메서드를 사용하여 사용할 준비가 되면 레코드 집합 다시 열 수 있습니다. 기본적으로 ADO는 Recordset 독점적인 Microsoft ADTG(Advanced Data TableGram) 형식으로 저장합니다. 이 이진 형식은 adPersistADTG PersistFormatEnum 값을 사용하여 지정됩니다. 대신 Recordset을 XML로 저장하기 위해 adPersistXML를 선택할 수 있습니다. 레코드셋을 XML로 저장하는 방법에 대한 더 많은 정보는 XML 형식으로 레코드를 유지하는 방법을 참조하세요.

Save 메서드의 구문은 다음과 같습니다.

  
recordset.  
Save  
Destination, PersistFormat  
  

레코드 집합을 처음 저장할 때, 대상지정은 선택 사항입니다. 대상 을(를) 생략하면, 이름이 RecordsetSource 속성 값으로 설정된 후 새 파일이 생성됩니다.

첫 번째 저장 이후에 저장를 호출할 때 대상을 생략하지 않으면 런타임 오류가 발생할 수 있습니다. 그 후 새 대상에 대해 저장 을 호출하면, 레코드 집합 이 새 대상에 저장됩니다. 그러나 새 목적지와 원래 목적지는 모두 열립니다.

저장레코드 집합 또는 대상닫지 않으므로 레코드 집합 계속 작업하고 최신 변경 내용을 저장할 수 있습니다. 대상레코드 집합이 닫힐 때까지 열려 있으며, 그 기간 동안 다른 애플리케이션은 대상을 읽을 수 있지만 쓸 수는 없습니다.

보안상의 이유로 Save 메서드는 Microsoft Internet Explorer에서 실행한 스크립트에서 낮은 보안 및 사용자 지정 보안 설정만 사용할 수 있도록 허용합니다.

비동기 레코드 집합 페치, 실행 또는 업데이트 작업이 진행되는 동안 Save 메서드가 호출되면 저장 비동기 작업이 완료될 때까지 기다립니다.

레코드는 Recordset첫 번째 행부터 저장됩니다. Save 메서드가 완료되면 현재 행 위치가 Recordset첫 번째 행으로 이동합니다.

최상의 결과를 얻으려면 CursorLocation 속성을 Save사용하여 adUseClient 설정합니다. 공급자가 Recordset 개체를 저장하는 데 필요한 모든 기능을 지원하지 않는 경우 커서 서비스에서 해당 기능을 제공합니다.

RecordsetCursorLocation 속성이 adUseServer 로 설정된 상태에서 유지될 때, Recordset의 업데이트 기능이 제한됩니다. 일반적으로 단일 테이블 업데이트, 삽입 및 삭제만 허용됩니다(공급자 기능에 따라 다름). Resync 메서드도 이 구성에서 사용할 수 없습니다.

Destination 매개 변수는 OLE DB IStream 인터페이스를 지원하는 모든 개체를 수락할 수 있으므로 Recordset ASP Response 개체에 직접 저장할 수 있습니다.

다음 예제에서는 SaveOpen 메서드를 사용하여 Recordset 유지한 후 다시 엽니다.

'BeginPersist  
   conn.ConnectionString = _  
   "Provider=SQLOLEDB;Data Source=MySQLServer;" _  
      & "Integrated Security=SSPI;Initial Catalog=pubs"  
   conn.Open  
  
   conn.Execute "create table testtable (dbkey int " & _  
      "primary key, field1 char(10))"  
   conn.Execute "insert into testtable values (1, 'string1')"  
  
   Set rst.ActiveConnection = conn  
   rst.CursorLocation = adUseClient  
  
   rst.Open "select * from testtable", conn, adOpenStatic, _  
      adLockBatchOptimistic  
  
   'Change the row on the client  
   rst!field1 = "NewValue"  
  
   'Save to a file--the .dat extension is an example; choose  
   'your own extension. The changes will be saved in the file  
   'as well as the original data.  
   MyFile = Dir("c:\temp\temptbl.dat")  
   If MyFile <> "" Then  
       Kill "c:\temp\temptbl.dat"  
   End If  
  
   rst.Save "c:\temp\temptbl.dat", adPersistADTG  
   Set rst = Nothing  
  
   'Now reload the data from the file  
   Set rst = New ADODB.Recordset  
   rst.Open "c:\temp\temptbl.dat", , adOpenStatic, _  
      adLockBatchOptimistic, adCmdFile  
  
   Debug.Print "After Loading the file from disk"  
   Debug.Print "   Current Edited Value: " & rst!field1.Value  
   Debug.Print "   Value Before Editing: " & rst!field1.OriginalValue  
  
   'Note that you can reconnect to a connection and  
   'submit the changes to the data source  
   Set rst.ActiveConnection = conn  
   rst.UpdateBatch  
'EndPersist  

발언

이 섹션에는 다음 항목이 포함되어 있습니다.