スタッフブログ

SQL実行時における全角・半角の識別について

2022年08月30日 スタッフブログ 平川 開発 

先月のアップデート以降、それまで全く問題なく動作していた処理が突然エラーを
起こすようになりました。AccessにてADOを使用する際の、全角半角の認識に関する
ルールが変わってしまったようです。
 
例えば「商品ID」のように、全角文字を使用してフィールド名を定義したテーブルに対して、
半角文字でフィールド名を記述したSQLを実行するとエラーが発生します。
 
 
何パターンか検証しましたので、以下に記します。
 
 
【NGになるケース】
 
①商品マスター/集計テーブルのフィールドを全角で定義、INSERT対象フィールドを半角で記述
SQL = “INSERT INTO 集計テーブル (商品ID,商品名) VALUES (1, ‘キーボード’)”
CurrentProject.Connection.Execute SQL
 
 
②商品マスター/集計テーブルのフィールドを全角で定義、INSERT対象フィールドを半角で記述
SQL = “INSERT INTO 集計テーブル SELECT 商品ID,商品名 FROM 商品マスター”
CurrentProject.Connection.Execute SQL
 
 
③商品マスターのフィールドを全角で定義、集計テーブルのフィールドを半角で定義、INSERT対象フィールドを全角で記述
SQL = “INSERT INTO 集計テーブル SELECT 商品ID,商品名 FROM 商品マスター”
CurrentProject.Connection.Execute SQL
 
 
④商品マスターのフィールドを全角で定義、集計テーブルのフィールドを半角で定義、INSERT対象フィールドを*で記述
SQL = “INSERT INTO 集計テーブル SELECT * FROM 商品マスター”
CurrentProject.Connection.Execute SQL
 
 
 
【OKなケース】
 
①商品マスター/集計テーブルのフィールドを全角で定義、WHERE句対象フィールドを半角で記述
SQL = “INSERT INTO 集計テーブル SELECT * FROM 商品マスター WHERE 商品ID=1″
CurrentProject.Connection.Execute SQL
 
 
②売上テーブル/集計テーブルのフィールドを全角で定義、商品マスターのフィールドを半角で定義、JOIN句対象フィールドを半角で記述
SQL = ” INSERT INTO 集計テーブル” & _
” SELECT 売上テーブル.商品ID,売上テーブル.商品名” & _
” FROM 売上テーブル LEFT JOIN 商品マスター ON 売上テーブル.商品ID=商品マスター.商品ID
CurrentProject.Connection.Execute SQL
 
 
③売上テーブル/商品マスター/集計テーブルのフィールドを全角で定義、JOIN句対象フィールドを半角で記述
SQL = ” INSERT INTO 集計テーブル” & _
” SELECT 売上テーブル.商品ID,売上テーブル.商品名” & _
” FROM 売上テーブル LEFT JOIN 商品マスター ON 売上テーブル.商品ID=商品マスター.商品ID
CurrentProject.Connection.Execute SQL
 
 
④商品マスターのフィールドを全角で定義、UPDATE対象フィールドを半角で記述
SQL = “UPDATE 商品マスター SET 商品ID=1 WHERE 商品名=’キーボード'”
CurrentProject.Connection.Execute SQL
 
 
⑤商品マスターのフィールドを全角で定義、DCountの条件を半角で記述
MsgBox DCount(“*”, “商品マスター”, “商品ID=1″)
 
 
⑥商品マスターのフィールドを全角で定義、SELECT句の対象フィールドを半角で記述してレコードセットを作成
SQL = “SELECT 商品ID,商品名 FROM 商品マスター WHERE 商品ID=1″
rs.Open SQL, CurrentProject.Connection, adOpenStatic
 
 
※C2R版でのみ発生。MSI版では発生しませんでした。(2022/8/30現在)
 
 
INSERT文実行時の格納対象フィールド名で、厳格に全半角の区別がされるように
なったようです。SELECT句やWHERE句では区別せずに記述してもエラーが発生しないのが
不思議ですが。レコードセットを作成するのも問題ないようです。
 
 
アップデートによる変更でエラーが発生するようになる現象はこれまで度々起こってきました。
必要があってアップデートするのでしょうが、割りを食うのは我々のようなプログラマーなんでしょうね。