SAK 図書館
ASP VB Script ADO + SQL 応用編 (その三) ADO レコード参照 - CommandText
基本的に Oracle、SQL-Sever、MDB で共通です。
■リクエリ概念
リクエリと言うのは、キーを変更してのレコードセット参照など、オープンし
たままのレコードセットのクエリ再実行のことです。
リクエリをする、しないによって、レコードセットのオープンの仕方が変わり
ます。
■単純オープン
'** レコードセット変数宣言
Dim rs
'** ODBC 接続
if isempty(session("s3cn_ado")) then
set session("s3cn_ado") = server.CreateObject ("ADODB.Connection")
session("s3cn_ado").Open "dsn=SAK3_ADO;uid=SAK;pwd=SAK"
session("s3cn_ado").CursorLocation = 3
end if
'** レコードセットオープン
set rs = session("s3cn_ado").Execute("select * from sak.練習テーブル名 " _
& " where 抽出条件 order by ソート順")
'** レコード処理
'ここに操作コードが入る
'** レコードセットクローズ
rs.Close
■クエリオープン
'** レコードセット変数宣言
Dim rs
'** ODBC 接続
if isempty(session("s3cn_ado")) then
set session("s3cn_ado") = server.CreateObject ("ADODB.Connection")
session("s3cn_ado").Open "dsn=SAK3_ADO;uid=SAK;pwd=SAK"
session("s3cn_ado").CursorLocation = 3
end if
'** レコードセットオープン
if isempty(session("s3cn_cmd")) then
set session("s3cn_cmd") = server.CreateObject ("ADODB.Command")
end if
session("s3cn_cmd").ActiveConnection = session("s3cn_ado")
session("s3cn_cmd").commandtext = "select * from sak.練習テーブル名 " _
& " where 得意先CD = ? and 品番 = ?"
session("s3cn_cmd").commandtype = 1
session("s3cn_cmd")(0) = ""
session("s3cn_cmd")(1) = ""
set rs = session("s3cn_cmd").execute
'** リクエリ
session("s3cn_cmd")(0) = "1000"
session("s3cn_cmd")(1) = "a001"
rs.Requery
'** レコード処理
'ここに操作コードが入る
'** レコードセットクローズ
rs.Close
クエリオープンでは、rs.Requery で、レコードセットの内容が最新になる。
また、パラメタクエリ『?』による文字埋め込みも可能である。
(パラメタには『'』を指定する必要なし。)
パラメタクエリをリクエリする場合は、
session("s3cn_cmd")(0) = "1000"
session("s3cn_cmd")(1) = "a001"
rs.Requery
の様にパラメタをセット後にリクエリをかける。
■補足
・リクエリを使用するレコードセットオープンは、session 変数を使用して、
毎回パラメタクエリが創成されるのを防がないとレスポンスが悪い。
また、スクロールなどを行うレコードセットなら、レコードセット変数も
session 変数に格納すること。
・現実的なコードでは、必ずエラートラップ処理を行うこと!!
■レコード操作命令(レコード移動、カーソル移動)
rs.MoveFirst (先頭レコード)
rs.MovePrevious (前のレコード)
rs.MoveNext (次のレコード)
rs.MoveLast (最終レコード)
rs.Move n, s (n 行 s からレコード移動)
rs.Move 6 (6 レコード移動)
■レコードチェック
rs.EOF (TRUE のとき、前方レコードなし。)
rs.BOF (TRUE のとき、後方レコードなし。)
■レコード数(照会件数、問い合わせ件数、検索件数、抽出件数、データ件数)
rs.RecordCount
■レコード項目参照
rs("項目名") ← rs!項目名は ASP では使用できない。
■レコード全件処理
do until rs.EOF
'1 レコード毎の処理
rs.MoveNext
loop
I/O でオープンしたレコードセットを VB のコードベースで更新することも可能
ではあります。
(rs.edit、rs.addnew、レコードセット編集、レコード変更、レコード修正)
但し、相手の SQL-RDB によって、使える機能に制限があったりします。
特に問題でもない限り、更新については、session("s3cn_ado").Execute で更新
SQL を発行するようにして下さい。
(リモート RDB は、rs.edit より、Execute の方が高速。)
また、オープンモードはマルチユーザシステムの場合、排他に関係します。
■フィールドプロパティ (フィールド関連情報取得)
rs.Fields.Count (フィルド数)
rs(field).Name (フィールド名)
rs(field).ActualSize (使用サイズ)
rs(field).DefinedSize (定義サイズ)
rs(field).NumericScale (小数桁)
rs(field).Precision (数値の最大桁)
rs(field).Type (VB データ型)
rs(field).Value (値) デフォルトプロパティ rs(field)
** rs("キー").Name、または、rs(0).Name のようにする。
■レコードセット
Recordset.open sql, connection, cursortype, locktype, option
■カーソルタイプ(カーソル定義)
adOpenDynamic = 2 'ダイナミックカーソル
adOpenForwardOnly = 0 '前方参照カーソル
adOpenKeyset = 1 '動的カーソル
adOpenStatic = 3 '静的カーソル
■レコードロックタイプ
adLockBatchOptimistic = 4
adLockOptimistic = 3 '共有行ロック
adLockPessimistic = 2
adLockReadOnly = 1 'リードオンリー
■コマンドタイムアウト
session("s3cn_cmd").CommandTimeout = 5 '** 5 秒でエラー発生
■行番号
AbsolutePosition プロパティを使うより、Bookmark プロパティを使って、
現在位置の記憶や移動を行った方が良い。
■複数レコードセット
「select * from 受注m; select * from 得意先m」のように「;」で複数レコ
ードセットをオープンした場合は、rs.NextRecordset で次のレコードセット
を処理する。
■ページレコード数指定
set rs = server.CreateObject ("ADODB.Recordset")
rs.PageSize = 10
rs.open...
■その他ページレコード関係
rs.MaxRecords = 10 '** レコードセットの最大レコード数設定
msgbox rs.PageCount '** rs.PageSize を 1 ページとしてのページ数
■GetChunk、ActualSize
long 型などの大規模な項目の取得に使用する。
l = rs(field).ActualSize
s = rs(field).GetChunk(l)
■ASP VB Script ADO + SQL 応用編資料
■ASP VB Script oo4o + SQL 応用編資料
■ASP VB Script 基礎実地編資料
■ASP VB Script 基礎編資料
■SQL 基礎編資料
■SQL 基礎実地編資料
■SQL チューニング編資料
■Oracle PL/SQL 編資料
■PostgreSQL 編、JAVA Servlet、JSP 編資料
■MySQL 編資料