タイトル | : Re: 抽出したレコードセットのコピー |
記事No | : 12335 |
投稿日 | : 2008/05/22(Thu) 23:17 |
投稿者 | : 魔界の仮面弁士 |
> Set RS_2 = RS_1 これは単なるインスタンス共有です。 1 つの Recordset が、2 つの変数から参照されるだけです。
> 別のレコードセット(RS_2)にコピーしたいのですが、 この場合の「コピー」とは、どのような動作を想定しているのか 読み取れませんでしたが、とりあえず思いつきで回答。
Private Sub Form_Load() Dim RS_1 As ADODB.Recordset Dim RS_2 As ADODB.Recordset Dim RS_3 As ADODB.Recordset
Set RS_1 = CreateSampleRecordset() 'オリジナル Debug.Print "== RS_1 (all) ===" Debug.Print RS_1.GetString(, , "|") Debug.Print "== RS_1 (F1=123) ===" RS_1.Filter = "F1=123" Debug.Print RS_1.GetString(, , "|") '同一カーソルを持つ複製の作成 Set RS_2 = RS_1.Clone(adLockBatchOptimistic) Debug.Print "== RS_2 (all) ===" Debug.Print RS_2.GetString(, , "|") Debug.Print "== RS_2 (F2='CDE') ===" RS_2.Filter = "F2='CDE'" Debug.Print RS_2.GetString(, , "|") 'カーソルを共有しない複製の作成 Set RS_3 = CreateStaticClone(RS_1) Debug.Print "== RS_3 (all) ===" Debug.Print RS_3.GetString(, , "|") Debug.Print "== RS_3 (F2='CDE') ===" RS_3.Filter = "F2='CDE'" Debug.Print RS_3.GetString(, , "|") '編集テスト Debug.Print "--- Edit ---" RS_2.MoveFirst RS_2.Update "F1", 999 RS_3.MoveFirst RS_3.Update "F1", 555 '再度、全件表示 Debug.Print "== RS_1 (all) ===" RS_1.Filter = adFilterNone Debug.Print RS_1.GetString(, , "|")
Debug.Print "== RS_2 (all) ===" RS_2.Filter = adFilterNone Debug.Print RS_2.GetString(, , "|")
Debug.Print "== RS_3 (all) ===" RS_3.Filter = adFilterNone Debug.Print RS_3.GetString(, , "|") End Sub
Private Function CreateStaticClone(ByVal source As ADODB.Recordset) As ADODB.Recordset Dim stm As ADODB.Stream Set stm = New ADODB.Stream stm.Type = adTypeBinary source.Save stm, adPersistADTG Dim rs As ADODB.Recordset Set rs = New ADODB.Recordset rs.Open stm stm.Close Set CreateStaticClone = rs End Function
Private Function CreateSampleRecordset() As ADODB.Recordset Dim rs As ADODB.Recordset Set rs = New ADODB.Recordset rs.Fields.Append "F1", adInteger rs.Fields.Append "F2", adVarWChar, 10 rs.Open rs.AddNew Array("F1", "F2"), Array(123, "ABC") rs.AddNew Array("F1", "F2"), Array(123, "CDE") rs.AddNew Array("F1", "F2"), Array(456, "xxx") rs.AddNew Array("F1", "F2"), Array(456, "yyy") rs.AddNew Array("F1", "F2"), Array(789, "zzz") rs.MoveFirst Set CreateSampleRecordset = rs End Function
|