引用:
もしかして、Set db = CurrentProject.AccessConnectionに書き換えれば
全てDAOと同じように動くのかと思い
ワイルドカードの「%」を「*」に戻したらこちらは上手く動かないようです
それは RecordCount プロパティとは別の問題(仕様)なので。
引用:
Set db = CurrentProject.Connection
と
Set db = CurrentProject.AccessConnection
はどのような違いがあると認識すればよろしいでしょうか?
AccessConnection プロパティ自体は主に、
フォームの Recordset プロパティを介して
そのフォームと任意の ADODB.Recordset オブジェクトを
連結させるコードを実行する場合に使用されます。
ただ RecordCount プロパティの振る舞いに関連している両者の違いは、
ADODB.Command オブジェクトの Execute メソッドによって返された
ADODB.Recordset オブジェクトが、ブックマークをサポートしているか否かです。
ブックマークをサポートしていない ADODB.Recordset オブジェクトの場合、
たとえカーソルの種類が静的カーソルであっても、
その RecordCount プロパティは -1 を返します。
ADODB.Command オブジェクトによってクエリの実行結果を
ADODB.Recordset オブジェクトとして取得する方法としては、
Execute メソッドとは別に以下のようなものが挙げられます。
引用:
Set rs1 = cmd.Execute
Set rs1 =
New ADODB.Recordset
With rs1
.CursorLocation = adUseClient
.CursorType = adOpenStatic
.LockType = adLockReadOnly
Set .Source = cmd
.Open
Debug.Print "rs1 のレコード件数は" & .RecordCount
End With
----------------------------------------------------------
(より簡略化した場合)
----------------------------------------------------------
Set rs1 = New ADODB.Recordset
rs1
.Open cmd, , adOpenStatic, adLockReadOnly
----------------------------------------------------------
上記の場合は、CurrentProject.Connection プロパティから
参照した ADODB.Connection オブジェクトを使用していても、
RecordCount プロパティによって正確なレコード件数を取得できるはずです。
引用:
将来的にSQLサーバーに移行(フロントエンド側のリンクテーブルの参照先を
SQL Server データベース上のテーブル/ビューに変更)する場合、
安全を考えて
Set db = CurrentProject.AccessConnection
に念の為、書き換えた方が良いのでしょうか?
フォームと Recordset オブジェクトを連結させるようなコードを
書かない限りは、CurrentProject.Connection のままで構わないと思います。
特定の条件に該当するレコードの件数を取得する方法は他にもあるでしょうし、
また「レコードの有無」を知りたいだけなら、Open された直後の
EOF プロパティの値によって判定することが可能ですので。