반응형
VBA에서 ADODB 레코드 세트 전체 복사 또는 복제
저는 VBA의 레코드 세트를 복제하거나 복사하는 방법을 찾고 있습니다.즉, 기본 데이터를 서로 독립적으로 유지하는 것입니다.
난 시도했다.
Set copyRS = origRS.Clone
Set copyRS = origRS
다른 방법을 사용할 때 레코드 세트를 수정하지 않고는 레코드 세트를 수정할 수 없습니다.이 예에서는 다음과 같습니다.
- 레코드 집합을 만듭니다.
- 나는 존이라는 이름으로 레코드 세트를 채웁니다.
- 레코드 집합을 복제
- 복제된 것을 수정합니다.
- 조회결과
코드:
Dim origRS As Recordset, copyRS As Recordset
Set origRS = New Recordset
'Create field
origRS.Fields.Append "Name", adChar, 10, adFldUpdatable
origRS.Open
'Add name
origRS.AddNew "Name", "John"
'Clone/copy
Set copyRS = origRS.Clone
'Change record in cloned/copied recordset
copyRS.MoveFirst
copyRS!Name = "James"
'This should give me "JamesJohn"
MsgBox copyRS.Fields(0).Value & origRS.Fields(0)
하지만 유감스럽게도, 이것은 두 개의 레코드 세트를 모두 수정합니다.
제 질문은:
다른 레코드 집합에서 레코드 집합을 복사한 다음 서로 독립적으로(루프 없이) 데이터를 수정하는 방법이 있습니까?
분명히 반복해서 할 수 있다는 것을 알지만, 다른 방법은 없나요?
좋은 질문입니다! 그런데 이런 방법으로 물체를 복사하는 것을 딥 카피라고 합니다.
저는 보통 컴퓨터 게임을 만드는 것에서 벗어납니다.ADODB.Stream현재 레코드 집합을 저장합니다.
그러면 다음을 사용할 수 있습니다..Open()새 레코드 세트의 메서드를 지정하고 스트림을 전달합니다.
예:
Sub Main()
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
rs.Fields.Append "Name", adChar, 10, adFldUpdatable
rs.Open
rs.AddNew "Name", "John"
Dim strm As ADODB.Stream
Set strm = New ADODB.Stream
rs.Save strm
Dim copy As New ADODB.Recordset
copy.Open strm
copy!Name = "hellow"
Debug.Print "orignal recordset: " & rs.Fields(0).Value
Debug.Print "copied recordset: " & copy.Fields(0).Value
strm.Close
rs.Close
copy.Close
Set strm = Nothing
Set rs = Nothing
Set copy = Nothing
End Sub
예상대로의 결과:

언급URL : https://stackoverflow.com/questions/25553594/deep-copy-or-clone-an-adodb-recordset-in-vba
반응형
'programing' 카테고리의 다른 글
| 데이터베이스 커서가 기본 데이터에 대한 변경 사항을 픽업합니까? (0) | 2023.08.28 |
|---|---|
| Mysql 목록 표 및 크기 - 크기순 정렬 (0) | 2023.08.28 |
| Python 모듈 "cx_Oracle" 모듈을 찾을 수 없습니다. (0) | 2023.08.08 |
| jquery를 사용하여 페이지의 특정 위치로 스크롤하려면 어떻게 해야 합니까? (0) | 2023.08.08 |
| 경고:여러 병합 기준이 탐지되었습니다.표시된 커밋 목록이 불완전할 수 있습니다. (0) | 2023.08.08 |