投稿日 | : 2004/10/28(Thu) 11:28 |
投稿者 | : 魔界の仮面弁士 |
Eメール | : |
URL | : |
タイトル | : Recordsetの作成に関して |
> Set rs1.ActiveConnection = DB
> rs1.Properties("IRowsetIdentity") = True
> rs1.Open "TBL101", DB, adOpenStatic, adLockOptimistic
このように書いた場合、その前に書かれた接続設定は無視されます。
まず、Propertiesプロパティで設定される「ダイナミック プロパティ」ですが、
これは接続対象となる OLE DB Provider によって、指定可能な項目が異なるのです。
そのため、Properties を指定する前には、ActiveConnection プロパティ等にて、
適切な Connection を割り当てておく必要があります。
ところが、はこさんのコードの場合、Properties を指定したまでは良かったのですが、
最後の Open メソッドの呼び出し部分に問題があったのです。
今回の場合、最後の Open メソッドにて Connection を再度割り当てたたため、
直前の Properties プロパティの設定がリセットされてしまった事になります。
例えばこれが、
Set rs1.ActiveConnection = DB
rs1.Properties("IRowsetIdentity").Value = True
rs1.Open "Table1", DB, adOpenStatic, adLockOptimistic
ではなく、
Set rs1.ActiveConnection = DB
rs1.Properties("IRowsetIdentity").Value = True
rs1.Open "Table1", , adOpenStatic, adLockOptimistic
のように書かれていれば、事前の接続設定(ActiveConnection) はリセットされません。
(Open時に、ActiveConnectionの設定を省略してある事に注意してください)
なお、No.716 (yutaさん)のコードについては、ActiveConnection に加えて、
CursorType と LockType の指定も分けて記述した形式ですね。
ちなみに、DataGrid に反映させるためには、IRowsetIdentity を指定する以外にも、
「Rs1.CursorLocation = adUseClient」の指定を行う事でも実現できます。
adUseClient が指定されている場合は、IRowsetIdentity を指定せずにも表示されます。
No.713 (KIM.Jさん) の投稿にて『カーソルの指定も影響するかもしれませんが』と
書かれていますが、これは、この CursorLocation の設定の事を意味しています。
# なお、Recordsetに CursorLocationの指定が無い場合は、Connectionオブジェクト側の
# CursorLocation の設定が利用される事になります。