sql_q

SQL ステートメントを実行

sql_q "p1", v1

"p1"	: 実行する SQL 文
v1	: 対象レコードセット変数 (省略値 tmparr)

(プラグイン / モジュール : SQLele)

解説

SQL 文を実行します。

p1 で、実行する SQL 文を指定します。

v1 で、結果データを受け取るレコードセット変数を指定します。

SELECT 文などで結果となるレコードセットがある場合、レコードセット変数にレコードデータが取得されます。システム変数 stat には、レコードの行数が返ります。stat が 0 の場合は、レコードがなかったことを表します。

「レコードセット変数」は、2 次元の文字列バッファの配列として初期化されます。この配列変数には、出力データや型情報、カラム名などが格納されています。レコードセット変数は文字列配列として直接参照できるほか、sql_v() を使用すればカラム名を使ったデータ参照ができ、sql_type() を使用すれば元のデータ型を取得することができます。

v1 を省略した場合は、マクロにより変数名 tmparr が設定されます。SQLele のすべての命令・関数では、レコードセット変数の指定を省略した場合、tmparr という変数名が与えられます。そのため、多くの場合レコードセット変数の指定を省略することができます。

p1 で与えるパラメータにバインドを使用する場合は、prm_i(), prm_f(), prm_text(), prm_blob() 関数を使用します。これにより、処理の効率化を図ることができます。

sql_q 命令を実行するためには、sql_open 命令でデータベースが開かれている必要があります。

他のプロセスのトランザクションによってロックされたデータベースに書き込もうとした場合は、ロックが解除されるまで待ってから書き込みが実行されます。

(資料) レコードセット変数のフォーマット
データ文字列     = v1(column [0~], record [0~stat-1])
カラム名         = v1(column [0~], stat)
型               = lpeek(v1(column, record), strlen(v1(column, record)) + 4)
レコードカウンタ = lpeek(v1(0, 0), strlen(v1(0, 0)) + 8)
BLOB サイズ      = lpeek(v1(column, record), strlen(v1(column, record)) + 12)
BLOB データ      = v1(column, record) 16 バイト目以降
レコード数       = length2(v1) - 1
カラム数         = length(v1)

サンプル

	...

	sql_q "SELECT ID, Val FROM [テーブル]"
	count = stat

	mes "件数 = " + count
	repeat count
		mes "ID = " + sql_v("ID") + " / Val = " + sql_v("Val")
		sql_next
	loop

関連項目

sql_vレコードセット変数のデータを参照(SQLele)
sql_iレコードセット変数から int としてデータ取得(SQLele)
sql_fレコードセット変数から double としてデータ取得(SQLele)
sql_typeレコードセット変数からデータの型を取得(SQLele)
prm_i整数を SQL パラメータとして指定(SQLele)
prm_f浮動小数点数を SQL パラメータとして指定(SQLele)
prm_text文字列変数をテキスト型の SQL パラメータとして指定(SQLele)
prm_blob変数を BLOB 型データの SQL パラメータとして指定(SQLele)

サンプル逆引き (3)

sample_01_basic_bbs.hsp
sample_02_memolite.hsp
sample_03_vram_blob.hsp

情報

プラグイン / モジュールSQLele
バージョン1.17
作成日2018/06/07
著作者s.programs
URLhttp://spn.php.xdomain.jp/
備考sqlele.hsp をインクルードして使用します。実行には sqlite3.dll が必要です。
タイプユーザー拡張命令
グループデータベース操作
hs ファイルdoclib\SQLele\sqlele.hs