Calender
Sun Mon Tue Wed Thu Fri Sat
      1
2345678
9101112131415
16171819202122
23242526272829
30      
<< September 2018 >>
広告
SEARCH

SELECTED ENTRIES
RECENT COMMENTS
RECENT TRACKBACK
CATEGORIES
ARCHIVES
LINKS
PROFILE
OTHERS
SKYPE
PC: skype.jojo.jp
chat
iPad: iphone.jojo.jp
chat call
THANKS



本日:
昨日:
多言語
広告
 ▼▲ 作業日報 ▼△
    What's under the hood?
<< PGCluster-1.7 | main | 晩飯 >>
ADODB.Recordset Clone について
09/02/06追記:
 改良型

 結果セットをメモリ上にコピーしておきたい場合はADODB.Recordsetのcloneメソッドを使えばよいが、コピー元のコネクションを閉じるとコピー先のオブジェクトも自動的にCloseされてしまい、ワーク(作業用)のレコードセットの保存としては向かない
例:
dim c as New ADODB.Connection
dim rs0 as New ADODB.Recordset

c.open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:¥text.mdb"

rs0.open "SELECT * FROM HOGE", con, 3, 4 'adOpenStatic, adLockBatchOptimistic '

set rs1 = rs0.clone '---------->rs1はrs0のクローン複製だが、
rs1.requery

debug.print rs1.recordcount '---->OK

rs0.close
c.close '---------->この時点でrs1は利用できなくなる

debug.print rs1.recordcount '---->閉じているオブジェクトに対して・・・のエラー
http://www.microsoft.com/japan/msdn/columns/data/data05102001.aspx

 動的に作成したレコードセットを保持したい場合は泥臭い方法だが下のような手順(関数)が必要になると思う

Public Function cloneRs(rsSrc As ADODB.Recordset) As ADODB.Recordset
 Dim fld As ADODB.Field
 
 Set cloneRs = New ADODB.Recordset
 
 If rsSrc.EOF Then Exit Function '-------------------> 終
 
 rsSrc.MoveFirst
 
 For Each fld In rsSrc.Fields
  cloneRs.Fields.Append fld.Name, fld.Type, fld.DefinedSize, fld.Attributes
 Next
 
 cloneRs.Open
 
 Do Until rsSrc.EOF
  cloneRs.AddNew
  For Each fld In rsSrc.Fields
   cloneRs.Fields(fld.Name).Value = fld.Value
  Next
  cloneRs.Update
  rsSrc.MoveNext
 Loop

End Function

 上では参照設定でADODBを有効にした環境で作成したので汎用的にしたい場合は ADODB.の部分は Objectとし、Newしている部分はCreateObjectしてください

09/02/06追記
Function cloneRs(rsSrc)
 Dim strm
 
 Set cloneRs=CreateObject("ADODB.Recordset")

 If rsSrc.EOF Then Exit Function '-------------------> 終

 set strm = CreateObject("ADODB.Stream")

  rsSrc.save strm
  
  cloneRs.open strm
  
  strm.close

End Function
Microsoft::Recordset 永続化の詳細を参照してみてください

ADODB.Recordset
変数型定数:
3adInteger整数値(4Byte)
4adSingle単精度浮動小数点値
5adDouble倍精度浮動小数点値
6adCurrency通貨値
7adDate日付
11adBooleanブール値
200adVarChar文字列型
| コンピュータ | 15:12 | comments(1) | trackbacks(0) |
初めておじゃましました。

今の今CloneでまでCloseされる事に
困っていたところでした。

助かりました!
ありがとうございます
| raiba | 2010/09/02 9:34 AM |









http://blog.jojo.jp/trackback/824507