mixiユーザー(id:2416887)

2015年03月02日23:35

346 view

DBの悲劇。見えないスペース。

会社のACCSESを使ったDBで使用店舗が増えるのでマスタのフラグを有効にしたら
あるクエリ(DBの表作成プログラムおようなもの)が全滅した。

といえばまだマシなのだが、これを何も知らない人が見たら、

普通出るはずの集計表が 真っ白 になるのである。

恐怖ですよねー。俺も恐怖ですよ。
というわけで即効お助けです。

原因はテキスト文字を数字に変換するときに発生している模様。
うちのDBは最初の使用がモヤッっとしていたせいで、
数字であろうが時間であろうが、全てテキストで記録するようにしている。
このパターンだと”0010"を記録できる。(数字で記録すると初期の桁が不要と判断され10になる)

欠点もある。並び替えを行った際、桁数変動が起こると、1⇒10⇒100⇒11⇒12という並びになる。
そのため、クエリにて数字に変換して正しく並び替えると言う手段が必要になる。

今回はこの処理でエラーが発生していた。
データを何でもlong型に変換するCLng関数を使っていたのだが、その変換で失敗してる模様。
試しにテキスト型を数字に変換するVal関数を使ってみたところ、正常に変換されず0が帰ってくる。
これはもう試行錯誤して潰すしかないとテストデータを作る手前で何かを発見する。

テストするためダミーデータを作ろうとテキストエディタでマスタの1行を貼り付けたのだ。
そこで発見する。

見 え な い ス ペ ー ス が 数 字 の 1 文 字 目 に 入 っ て い る

本当に見えない。フォントを変えてプロポーショナルを外しても見えない。
でかくしても見えない。
本当に見えない。
でも、”存在している”のだ。
そいつを削除したところ、クエリは何もなかったかのように正常に動作するようになった。

見えないスペース。どうやら空白文字の一種なんだが、どうしてくっつくのかイマイチ不明。
本来ならACCESSからエクセルを出力した際、空白文字がついたセルが出力されるらしいのだが、
今回はおそらく、その逆変換パターンである。

明日は全てのスペースを排除して、現プログラムでそれが入るのか入らないのか調査します。
0 2

コメント

mixiユーザー

ログインしてコメントを確認・投稿する

<2015年03月>
1234567
891011121314
15161718192021
22232425262728
293031