ソフトウェア開発者の日常

こだわりなく書きたいことを書いていきます。

Accessで作られたシステムの改修で苦戦中

Accessの世界は、予想以上に独特に感じています。

f:id:AJYA:20130215215559j:plain

photo credit: therefromhere via photopin cc

 

ことの流れ

他社で最初に作られて、 社内でメンテナンスをしているAccessで作られたシステムを改修することになりました。

Visual Basicの知識があるからなんとかなるだろうと思っていたら、苦戦する事態となっています。

 

苦戦している理由は、あるテーブルにカラムを追加できれば簡単なんですが、追加しようとすると上限に達していて追加できない旨のメッセージが表示され、追加できないためです。

Access 2007以降であれば同じ現象は起きないのかもしれませんが、今回はAccess 2003です。

 

最初に作った会社が、テーブルと入力のテキストボックスを結合して、便利に利用しています。

項目が少なくて、カラムが追加できる間は問題ありません。

カラムが追加できなくなってから、入力のテキストボックスを増やしたい場合は、データベースからの値の表示およびデータベースへの値の反映が簡単にはできなくなってしまいます。

 

最初、この辺りを理解できていなかったので、「追加できなくても、新しいテーブルを用意して、結合するSQLを書けばなんとかなるでしょう」と軽く考えていました。

 

最初のつまずき

いざ対処を始めてまず驚いたのは、テーブルのカラムの上限が、SELECTで取得できる上限だということでした。

必要なカラムだけを選ぶことができれば、回避できるかもしれませんが、どれが必要か資料もなく、調べる時間を考えるともったいないということで諦めました。

 

次のつまずき

サブフォームに分けて処理すれば、別になるので大丈夫だろうと思い、非表示のサブフォームとテーブルを連結させて値の取得と、親フォーム側への表示はできるようになりました。

親フォーム側で値を変更しようとすると、サブフォーム側と連結されているために、変更できないと表示されてしまい、この方法も諦めました。

 

最後に落ち着いた方法

最後にたどりついた方法は、Recordsetを使って値を取得して、フォームのテキストボックスに表示し、保存はSQLを書く方法でした。

Recordsetを使ったのは、SELECTが選択クエリのために、Executeで実行できなかったためで、実行できればSQLで書いていました。

 

Accessは便利だというのは理解していますが、不慣れな場合は時間をかけて、学びながら修正できるように配慮が必要です。