SAK 図書館
VB RDO + SQL 応用編 (その三) RDO レコード参照 - OpenResultset、Requery
基本的に Oracle、SQL-Sever、MDB で共通です。
■リクエリ概念
リクエリと言うのは、キーを変更してのレコードセット参照など、オープンし
たままのレコードセットのクエリ再実行のことです。
リクエリをする、しないによって、レコードセットのオープンの仕方が変わり
ます。
■単純オープン
'** レコードセット変数宣言
Dim rs As rdoResultset
'** レコードセットオープン
Set rs = RDBcn.OpenResultset("select * from sak.練習テーブル名 " _
& " where 抽出条件 order by ソート順", rdOpenStatic, _
rdConcurReadOnly, rdExecDirect)
'** レコード処理
'ここに操作コードが入る
'** レコードセットクローズ
rs.Close
単純オープンでは、一度オープンしたレコードセットは、再オープンするまで、
なんら変わることはない。つまり、レコードに対する更新も反映されない。
そのため、処理スピードは最速の部類にランクされる。
(rdOpenStatic は、静的カーソル。)
■クエリオープン
'** クエリ、レコードセット変数宣言
Dim qu As rdoQuery
Dim rs As rdoResultset
'** レコードセットオープン
Set qu = RDBcn.CreateQuery("qu", "select * from sak.練習テーブル名 " _
& " where 得意先CD = ? and 品番 = ?")
qu(0) = ""
qu(1) = ""
Set rs = qu.OpenResultset(rdOpenKeyset, rdConcurReadOnly)
'** リクエリ
qu(0) = "1000"
qu(1) = "a001"
rs.Requery
'** レコード処理
'ここに操作コードが入る
'** レコードセットクローズ
rs.Close
クエリオープンでは、rs.Requery で、レコードセットの内容が最新になる。
また、パラメタクエリ『?』による文字埋め込みも可能である。
(パラメタには『'』を指定する必要なし。)
パラメタクエリをリクエリする場合は、
qu(0) = "1000"
qu(1) = "a001"
rs.Requery
の様にパラメタをセット後にリクエリをかける。
尚、RDBcn.Execute や単純オープンの最後に指定してある rdExecDirect は、
クエリを再利用しないと言う意味です。
従って、リクエリを必要とするレコードセットオープンでは指定してはなりませ
ん。(指定するとリクエリ発行でエラーとなる。)
(rdOpenKeyset は、動的カーソル。)
■補足
・リクエリを使用するレコードセットオープンは、VB のフォームロードなど
起動時に一度実行される場所で行わないとレスポンスがガタガタになる。
同様にレコードセットクローズはフォームアンロードで行う。
リクエリを行わない単純オープンなら、適当でもかまわない。
・現実的なコードでは、必ずエラートラップ処理を行うこと!!
■レコード操作命令(レコード移動、カーソル移動)
rs.MoveFirst (先頭レコード)
rs.MovePrevious (前のレコード)
rs.MoveNext (次のレコード)
rs.MoveLast (最終レコード)
■レコードチェック
rs.EOF (TRUE のとき、前方レコードなし。)
rs.BOF (TRUE のとき、後方レコードなし。)
■レコード数(照会件数、問い合わせ件数、検索件数、抽出件数、データ件数)
rs.RowCount
** ODBC ドライバによっては値の返らないものもあるので注意する。
** レコードが存在しないときは、-1 となる。
■レコード項目参照
rs!項目名 ← 通常はこっち。
rs("項目名") ← 通常は上のタイプの方がアクセスが速い。
項目名を変数で指定するなどの場合は、こちら。
■レコード全件処理
do until rs.EOF
'1 レコード毎の処理
rs.MoveNext
loop
I/O でオープンしたレコードセットを VB のコードベースで更新することも可能
ではあります。(rs.edit、rs.addnew、レコードセット編集)
但し、相手の SQL-RDB によって、使える機能に制限があったりします。
特に問題でもない限り、更新については、RDBcn.Execute で更新 SQL を発行す
るようにして下さい。
(リモート RDB は、rs.edit より、Execute の方が高速。)
また、オープンモードはマルチユーザシステムの場合、排他に関係します。
更新は、RDBcn.Execute で行うので、レコードセットオープンは常に
rdConcurReadOnly (リードオンリー)
として下さい。
■カーソルライブラリ選択(カーソル定義)
rdUseODBC ODBC カーソルライブラリを使用
rdUseServer サーバー側カーソル
rdUseClientBatch クライアントバッチカーソル
rdUseIfNeeded ODBC ドライバによって適切なカーソル(既定値)
rdUseNone カーソルのない結果セット
■レコードロックタイプ
rdConcurLock ペシミスティック同時実行(排他的ロック)
rdConcurRowVer 行のバージョンに基づくオプティミスティック同時実行(共有的行ロック)
rdConcurValues 行の値に基づくレコードロック(オプティミスティック同時実行共有的ロック)
rdConcurReadOnly カーソルは読み取り専用
rdConcurBatch クライアントバッチカーソル
■VB RDO + SQL 応用編資料
■VB ADO + SQL 応用編資料
■VB oo4o + SQL 応用編資料
■SQL 基礎編資料
■SQL 基礎実地編資料
■SQL チューニング編資料
■Oracle PL/SQL 編資料
■PostgreSQL 編、JAVA Servlet、JSP 編資料
■MySQL 編資料
■VB 入門編資料
■VB 基礎編資料
■VB ビジュアル編資料
■VB テクニック編資料