- 締切済み
ACCESSのコンボボックスの利用
ACCESS2000を使用しています。 コンボボックスを使用し、複数の列を表示しています。 連結列以外の列の項目を取得したい場合、どのようにすれば参照できるのでしょうか。 実際には、名前順に表示しているのですが、同姓同名の人がおり、後ろのデータを選択しても、最初のデータが取得されます。 なぜかというと、非連結にしてあり、イベントで取得した名前をキーにして再びファイルを読みに行っているからです。 なぜ、こんな作り方をしているかというと、連結にすると、最後の画面で 不良のデータがあるとそのままACCESSのほうで書き込んでしまうのがあるからです。 連結しても、項目のヌルデータの取得を認めないようにすれば 出来るらしいのですが、 いつも非連結で作っています。 よろしく御指導ください
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- teppy
- ベストアンサー率50% (9/18)
>同姓同名の人がおり、後ろのデータを選択しても、最初のデータが取得されます この「同姓同名」は、データには漢字(又はひらがな)が使用されていないでしょうか? 連結列に半角英数字以外のものを使用すると、コンボボックス&リストボックスは正常に動作しないことが多々あります ARCさんがNo.3で記しているイメージように、コンボボックスのコントロールソースには、 ID(絶対に重複しない番号)を含め、なおかつIDは一番左の列にし、連結列にすることがよろしいです (こうすると、IDの列幅を「0」にすることで、IDはコンボボックスに表示されなくなります)
- ARC
- ベストアンサー率46% (643/1383)
ん~、どの列を見てもNullっていうのは、[コントロールソース]で指定したフィールドのデータが、[値集合ソース] で指定したデータの中に見つからないときの症状です。 つまり、 受注明細テーブル 明細ID 商品ID : 商品マスタテーブル 商品ID 商品名 : ってなときに商品明細テーブルを表示するフォームを作り、そのフォーム中でコンボボックスを使って、商品名を表示する。 商品明細には商品IDが100番のデータが入力されているのに、商品マスタには商品IDが100番の商品が無い、という、異常なデータが入力されている のような状況のときに、フォーム上で問題の商品ID=100になっているデータを表示してしまうと、コンボボックスの全ての列がNullになります。 恐らく、今回の場合は、フォーム側には半角空白1コのデータがあるけれども、コンボボックスの「値集合ソース」で指定されているデータの中には、それに対応するデータが無い、っていうような状況が起こっているのでは? 推測なんですが。 それでわ!
- ARC
- ベストアンサー率46% (643/1383)
例えば String型の変数にNullを代入しようとしてエラーになってしまうってことですか? その場合は、NZでNULLを打ち消してやるとうまく動作します。 dim strData As String : strData = NZ(Me.コンボ0.Column(0),"") などとすると、データがNullの時は、""が代入されるようになります。 また、IsNull()関数を使って、IsNull(Me.コンボ0.Column(0))とすると、データがNullか否かを知ることが出来ます。
- ARC
- ベストアンサー率46% (643/1383)
Me.コンボ0.Column(0) 'コンボボックスの1列目を取り出す Me.コンボ0.Column(1)'コンボボックスの2列目を取り出す Me.コンボ0.Column(0, 1)'コンボボックスの2行,1列目を取り出す こんな感じです。 ちなみに、連結にしておいて、不良データをBeroreUpdateイベントでチェックするようにしてもいいですよ。 もし不良だった場合、オブジェクト.Undo で、変更を元に戻せます。
補足
早速の回答ありがとうございました。 やってみたら、うまくいきました。 ですが、コンボボックスにヌルデータがあると、うまくいきません。 これは、ファイルをきれいにしておく必要があるのでしょうか。 イベントで逃げることは出来ないのでしょうか。 また、お願いできるでしょうか
補足
またすぐに返答頂きありがとうございます コンボボックスに4つの列を表示しています。 連結列がなぜかヌルデータになっているのです。 DBのテーブルでは1バイトのスペースが入っているのですが無視されているようです。 そして、連結列(1列目)がヌルだと、2列目以降何が入っていようと、すべて参照するときにヌルになっているのです。 理解に苦しんでいます。