郵便番号検索機能を組み込む
これについては、現在ではいろいろなサイトでよく見かけるし、市販の住所録(宛名作成)ソフトなどでもおなじみなので使い方の説明はいらないだろう。番号を入れると、都道府県市区町村名までが自動で入るものである。
元データは日本郵便のサイトからCSVファイルをダウンロードして使用する。
必要な部分は、郵便番号および都道府県名市区町村名だけだが、フリガナなどもすべて読み込んでおいた。データはいくつかの区切りで構成されている。
例えば
0600041なら, 北海道, 札幌市, 中央区大通東
1036090なら, 東京都, 中央区, 日本橋東京日本橋タワー
番号を入れ、ボタンをクリックした時に、検索結果として
北海道札幌市中央区大通東
東京都中央区日本橋東京日本橋タワー
というデータをどのように取得するかを考える。
Accessとの付き合いが長いもので、ついついテキストボックスに個別に取り出し連結することを思いついてしまう。MessageBoxに変数の内容を入れ動作の確認をするのもわずらわしいので、TextBoxで直接確認できるのはありがたい。すべて確認が済んだら、不要なTextBoxのVisibleプロパティをfalseにして体裁を整える。
しかし、ここで思いがけない落とし穴があった。にわかには理解しがたいことだが、TextBoxのVisibleプロパティをfalseにすると、参照すべきデータが入ってこないのである。Accessでは経験したことがない。どこかコードが間違っているのではないか。いろいろ確認してみても、Visibleプロパティをfalseにしただけでダメなのである。
最終的に確認できたことは、データバインドしたTextBoxはVisibleプロパティをfalseにするタイミングによって挙動が異なるようなのである。フォームのデザイナーでfalseにしてしまうと参照できないようである。というか、データそのものが入ってこない。参照自体はエラーにはならないので、何がいけないのか理解できないまま時間だけが過ぎていく。結論としてフォームのロード後にfalseにすれば問題なく参照できる。明確な理由は分からないが事実として受け入れざるを得ない。そのうえで、これでよしとするかデータバインドしない方法を考えるかどちらかである。
そこで、思いつくのはどうせデータバインドさせないならいくつもTextBoxを配置するより一発で連結データを取り出す方が早い。クエリである。
列データを連結するのは簡単である。
SQLでは
SELECT [列名1] + [列名2] + [列名3] AS エイリアス名
FROM テーブル名
WHERE [〒番号] = @パラメータ名
得られた結果を住所欄のテキストボックに表示すればよい。
まあ、こちらの方がすっきりしている。
いずれにしても住所欄にデータが入ったら、残りの番地や建物名などを自分で追加入力する。住所は文字数が多いこともあるので、テキストボックスはMultiLineプロパティをTrueにしておく。
少し時間がかかったが、いろいろ参考になることが多かった。
これで主要な部分は完成した。
最後の仕上げをしよう。