tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re: 抽出したレコードセットのコピー
投稿日: 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

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。