器用貧乏の独り言

器用貧乏なおっさんが気の向くままに。

【SQL】日本語のフィールド定義で失敗した話


皆さんこんにちは。

今日はSQLの話です。

プログラミングやデータベース開発をしたことのある方は、タイトルを見て何の話かピンときたのではないでしょうか。

あの時の私は、「月が変わったら新しいテーブルを作成する」プログラムをVBAで書いていました。

※いつもの事ながらデータベースはAccessです。

そのプログラムの中にテーブル作成のSQLが出てきます。

今回問題となったのが、「カラム名を日本語にする」というオーダーがあった事です。


私としては、カラム名に限らず、変数名やオブジェクト名に日本語の文字は使いたくないのです。

エラーの原因になることがあるから!

文字コードの問題だったり、ライブラリの更新(変更)時に不具合が出たりしますからね。
※特にAccessは.......。

今回の話は、そこら辺の話とは違うところでのトラブルです。
※トラブルというか私の知識不足ですね。。

問題のコードがこんな感じです。
※ブログ用にシンプルにしています。

Dim strSQL As String
Dim co1,co2,co3 As String
Dim field As String

co1 = "カラム1 , STRING"
co2 = "カラム2 , INTEGER"
co3 = "列3 , LONG"

field = co1 & "," & co2 & "," & co3

strSQL = "CREATE TABLE 新テーブル (" & field & " )"

Docmd.RunSQL strSQL

はい。

カラム1、カラム2、列3という3つのカラム(列)を持つテーブルを作成するコードですね。

さて、このコードには間違いがあります!

皆さんはどこか分かりますか??

私はそれが見つけられず、小一時間も無駄にしてしまいました。
※実物は30列くらいあって、カラムのゲシュタルト崩壊を起こしそうでした(笑)。

正解はここです!
co2 = "カラム2 , INTEGER"
カラム名に「半角カタカナが使われています。」

全角カタカナや漢字を使う場合は、このままで良いのですが、半角カタカナはこのままだとエラーになってしまいます。

半角カタカナを使う場合は、このようになります。

co2 = "[カラム2] , INTEGER"

カラム名を[]で囲ってやると解決します。

何故かって?

そーゆう仕様だからです(笑)。

この辺が面倒臭いから、普段は全部アルファベットで記述するわけです。

今回は、引継ぎやらメンテナンス性やらの観点から日本語を多用するよう指示があったので、渋々日本語を乱用しました。

そもそも、アルファベットで記述されたコードのメンテを出来ない人間が、変数やカラム名・オブジェクト名等を日本語にしただけでメンテ出来るようになるのか?

疑問は尽きませんが、お偉いさん方からの指示なので従わざるを得ません。

思うところは色々ありますが今回の教訓は、

「半角カタカナには[]!!」

これですね。

全部アルファベットで書かせて貰えるなら、必要のない知識なんですけどね。

今回、1時間も無駄にしてしまったのが悔しかったので、記事にしてみました。

これからSQLを扱う予定のある方は、気をつけてくださいね!