다음을 통해 공유


데이터 유지

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

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

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

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

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

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

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

  
recordset.  
Save  
Destination, PersistFormat  
  

Recordset를 처음 저장할 때 Destination을 지정하는 것은 선택 사항입니다. Destination을 생략하면 RecordsetSource 속성 값으로 설정된 이름으로 새 파일이 만들어집니다.

첫 번째 저장 후 Save를 호출할 때 Destination을 생략합니다. 그렇지 않으면 런타임 오류가 발생합니다. 이후에 새 대상으로 저장을 호출하면 레코드 집합이 새 대상에 저장됩니다. 그러나 새 대상과 원래 대상은 모두 열립니다.

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

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

비동기 Recordset 페치, 실행 또는 업데이트 작업이 진행 중인 동안 Save 메서드가 호출되면 비동기 작업이 완료될 때까지 Save가 대기합니다.

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

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

CursorLocation 속성이 adUseServer로 설정된 상태에서 Recordset가 유지되면 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  

설명

이 섹션에서는 다음 항목을 다룹니다.