レコードセットとメモリ


たかはし  2008-09-04 13:06:07  No: 101047  IP: 192.*.*.*

VB6.0  ADO  について質問したいです。


例えば、テーブルAに  データが10万件入ってるとします。
ここに、1件データをaddnewで追加したいです


①  Rs.open "Select * from テーブルA" ,cn 〜
②  Rs.open "Select ID from テーブルA" ,cn 〜
③  Rs.open "Select ID form テーブルA Where ID = 0" ,cn 〜    (0は存在しない)

rs.AddNew
rs.fields("id") = x
rs.update

①も②も③も、メモリ使用量は同じなのですか?  ①は多くなると思いますが、
②と③はどれくらい違うのでしょうか?

編集 削除
魔界の仮面弁士  2008-09-04 16:21:43  No: 101048  IP: 192.*.*.*

カーソルタイプに依存しますが、その中では 3 が最小となるでしょうね。

静的の場合、取りだされたデータ総量に応じたメモリを消費します。
キーセットの場合は、取りだされたキー項目のサイズに依存します。
動的の場合はプロバイダ依存なので、測定しないとわかりません。


> 1件データをaddnewで追加したいです
データの取得が不要で、ただ単に AddNew したいだけであれば、
そのプロバイダが DBPROP_APPENDONLY モードをサポートしているかを
確認してみてください。(3)以上の処理効率を得られる可能性があります。

たとえば Microsoft.JET.OLEDB.4.0 であれば、下記のように書けます。

Set rs.ActiveConnection = cn
rs.CursorLocation = adUseServer
rs.Properties("Append-Only Rowset").Value = True
rs.Open tableName, Options:=adCmdTableDirect

rs.AddNew "id", x

複数の列を登録せねばならない場合は、配列で指定します。

rs.AddNew Array("id", "mail"), Array(x, Text1.Text)

編集 削除