4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Mindでトランザクション事始めな書き方を探る(つづき)

Last updated at Posted at 2024-02-01

はじめに

Mindでデータベース(ステップ2.0)トランザクション事始めという記事でMind開発者の@killyさんからいただいたご提案にインスパイアされて、前回の記事でご提案内容を少しひねった変わった書き方をしてみましたところ、局所単語との相性がややわるく、完走しませんでした。今回は、局所単語の「結果セットを表示する」を別単語に置き換えて再確認しました。

お題のソースコード

Mind

Mindのソース全体像は前回の記事をご参照ください。

お題のソースの今回の改修点は下記のとおりです。局所単語の「結果セットを表示する」を別単語に置き換えています。

mssqlodbc.src
結果セットを表示するとは
	resultSetは 	変数
	iは 			変数
	resultSetに 入れ
	[resultSet ≠ 0] ならば

		[i := 1]
		ここから
			resultSetの 列データ(i)が 0に 等しい ならば 打ち切り つぎに
			「|」を 表示し
			resultSetの 列データ(i)を Mind文字列に変換し 表示し
			iを 一つ増加し
		繰り返し
	つぎに。

 メインとは
	※接続文字列、クエリー文字列略

	retは 		変数

	本体とは

		API初期処理しておき retに 入れ
		[ret ≠ 0] ならば 終わり つぎに

		datasourceで DB接続し 
		成功ならばここから

			SELECTで SQL文をセットし
			1で 整数のSQLパラメータをセットし
			7で 整数のSQLパラメータをセットし
			結果セット取得し 結果セットを表示する

			トランザクションを開始し
			成功ならばここから

				INSERTで SQL文をセットし
				7で 整数のSQLパラメータをセットし
				3で 整数のSQLパラメータをセットし
				SQLコマンド実行し retに 入れ
				[ret ≠ 0] ならば Tranスコープを抜け出し
				つぎに

				UPDATEで SQL文をセットし
				「まいんど&00&」で 文字列のSQLパラメータをセットし
				7で 整数のSQLパラメータをセットし
				SQLコマンド実行し retに 入れ
				[ret ≠ 0] ならば Tranスコープを抜け出し	
				つぎに

				DELETEで SQL文をセットし
				1で 整数のSQLパラメータをセットし
				7で 整数のSQLパラメータをセットし
				SQLコマンド実行し retに 入れ
				[ret ≠ 0] ならば Tranスコープを抜け出し
				つぎに
			
	
			ここまでトランザクションスコープです

			[ret = 0] ならば トランザクションをコミットし
			さもなければ	 トランザクションをロールバックし
			つぎに

			SELECTで SQL文をセットし
			1で 整数のSQLパラメータをセットし
			7で 整数のSQLパラメータをセットし
			結果セット取得し 結果セットを表示する

			DB切断し

		ここまで実行可能です ※DB切断しなければ

		API破棄処理すること。

実行結果

実行結果は(ステップ2.1)の記事と同じ想定です。ロールバックします。デバッグ用の出力もフルでだしっぱなしです。
では、実行してみましょう。

C:\pmind\sample>mssqlodbc.exe
ODBCライブラリをロードする
ロード成功
関数アドレス群を取得
取得成功
DSText --> Driver={ODBC Driver 17 for SQL Server};Server=(local)\SQLEXPRESS;Database=日本語プログラミング言語;UID=sa;PWD=****;
SQLAllocEnv --> 0
SQLAllocConnect --> 0
SQLConnect --> 1
SQLAllocStmt --> 0
paramCountInt --> 0
paramCountStr --> 0
paramNumber --> 0
DB接続 成功
paramCountInt --> 1
paramNumber --> 1
param --> 1
paramCountInt --> 2
paramNumber --> 2
param --> 7
SQLText --> SELECT LN.言語ID,LN.言語名,LN.よみがな,DLN.開発言語ID,DLN.開発言語名 FROM 言語名 AS LN LEFT JOIN 開発言語 AS DL ON LN.言語ID = DL.言語ID LEFT JOIN 開発言語名 AS DLN ON DLN.開発言語ID=DL.開発言語ID WHERE LN.言語ID IN (?,?)
SQLExecDirect --> 0
paramCountInt --> 0
paramCountStr --> 0
paramNumber --> 0
|言語ID|言語名|よみがな|開発言語ID|開発言語名|
|1|Mind|まいんど|1|C|
|1|Mind|まいんど|7|Forth|
|1|Mind|まいんど|8|Mind|
|7|Mind for Android|まいんどふぉーあんどろいど|<NULL>|<NULL>|
AutoCommit Off  --> 0
SQLSetConnectAttr --> 0
paramCountInt --> 1
paramNumber --> 1
param --> 7
paramCountInt --> 2
paramNumber --> 2
param --> 3
SQLText --> INSERT INTO 開発言語 (言語ID,開発言語ID) VALUES (?,?)
SQLExecDirect --> 0
paramCountInt --> 0
paramCountStr --> 0
paramNumber --> 0
paramCountStr --> 1
paramNumber --> 1
param --> まいんど
paramCountInt --> 1
paramNumber --> 2
param --> 7
SQLText --> UPDATE 言語名 SET よみがな = ? WHERE 言語ID = ?
SQLExecDirect --> 0
paramCountInt --> 0
paramCountStr --> 0
paramNumber --> 0
paramCountInt --> 1
paramNumber --> 1
param --> 1
paramCountInt --> 2
paramNumber --> 2
param --> 7
SQLText --> DELETE 開発言語 WHERE 言語ID2 = ? AND 開発言語ID = ?
SQLExecDirect --> -1
SQLStatus --> S0022 [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]列名 '言語ID2' が無効です。
paramCountInt --> 0
paramCountStr --> 0
paramNumber --> 0
RollbackTran  --> 1
SQLEndTran  --> 0
AutoCommit On --> 1
SQLSetConnectAttr --> 0
paramCountInt --> 1
paramNumber --> 1
param --> 1
paramCountInt --> 2
paramNumber --> 2
param --> 7
SQLText --> SELECT LN.言語ID,LN.言語名,LN.よみがな,DLN.開発言語ID,DLN.開発言語名 FROM 言語名 AS LN LEFT JOIN 開発言語 AS DL ON LN.言語ID = DL.言語ID LEFT JOIN 開発言語名 AS DLN ON DLN.開発言語ID=DL.開発言語ID WHERE LN.言語ID IN (?,?)
resultset --> free
SQLExecDirect --> 0
paramCountInt --> 0
paramCountStr --> 0
paramNumber --> 0
|言語ID|言語名|よみがな|開発言語ID|開発言語名|
|1|Mind|まいんど|1|C|
|1|Mind|まいんど|7|Forth|
|1|Mind|まいんど|8|Mind|
|7|Mind for Android|まいんどふぉーあんどろいど|<NULL>|<NULL>|
paramsetStr --> free
resultset --> free
SQLDisconnect --> 0
SQLFreeConnect --> 0
SQLFreeEnv --> 0
SUCCESS CLOSE
ODBCライブラリを破棄する

C:\pmind\sample>

無事に動作しました。

おわりに

書き方はいろいろあるかと思います。今回はまだメインの中で一本書きしていますが、複雑なクエリーの組み合わせになれば
クエリーの結果によってこのクエリーを実行、あのクエリーを実行と、実行するクエリも分岐したりしていきます。それらを別単語にまとめて組み合わせたりもするでしょう。
また、機会があれば書き方の工夫にトライしてみます。

killyさん、ありがとうございました。

この記事内容の作業環境

Windows11 Pro 22H2
CPU Intel(R) Core(TM) i3-5005U 2.00 GHz
Microsoft Visual Studio Community 2022 Version 17.4.4
Microsoft Visual C++ 2022
Mind Version 8.0.08 for Windows
SQL Server 16.0.1000.6 Express Edition
SQL Server Management Studio 19.2.56.2

4
1
13

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?