1

Access初心者ですが、少しずつ慣れてきました。仕事でデータベースを再構築していますが、コンボ ボックスの更新に関する奇妙な問題に苦しんでいます。

私がやろうとしているのは、プラントの各部分を複合体で、次にマシン名で分けることです。これを行うために、2 つのコンボ ボックスを使用しています。1 つ目はさまざまな複合体をリストし、2 つ目はその複合体で使用できるさまざまなマシンをリストします。複合体を選択してからマシンを選択することで、その特定のマシンに関連付けられているすべてのデータを一覧表示したいと考えています。

ただし、私が抱えている問題は、マシンのコンボボックスを更新しようとすると、フォーム内のテキスト ボックスの 1 つ (ロックするように設定したもの) が、選択されたコンプレックスのインデックスで更新されることです。そのインデックスは、複雑なテーブルの最初のエントリの名前を置き換えます。

マシンのコンボボックスを更新するために使用されている VBA コードを以下に示します。(このコードを複数項目フォームのヘッダーに組み込む前は、まったく問題はありませんでした。)

Private Sub cboComplex_AfterUpdate()
Me.cboMachine.RowSource = "SELECT MachineName FROM" & _
                            "Machine WHERE ComplexID = " & Me.cboComplex & _
                            "ORDER BY MachineName"
Me.cboMachine = Me.cboMachine.ItemData(0)
End Sub

編集 次のリンクは、明確にするために何が起こっているかのスクリーンショットを示しています。 スクリーンショット

4

1 に答える 1

1

これは回答とコメントの行に沿って踊っていますが、コメントが長くなり、フォーマットが好きなので投稿します。

一見すると、フィルタリング ボックス (マシンと複合体) にはバインドされていないコントロールを使用する必要があります。

フォームのレコード ソース (マシン テーブル データを仮定すると、必要に応じて調整できます) は、次のようなものにバインドできます。

SELECT * FROM machine WHERE complexID = [Forms]![myForm]![cboComplex] AND Machine = [Forms]![myForm]![cboMachine]

form.requeryこれらのボックスを更新することができます。

または、より一般的なようにして、Machine コンボボックスの更新後にSelect * FROM Machineフォームのプロパティを設定することもできます。Filter

したがって、コンボ ボックスを更新した後 (それぞれを個別にフィルター処理するか、各ボックスからの選択を想定/要求することができます)、フィルターを設定できます。

 Me.Filter = "Complex = """ & Me.cboComplex & """"
 me.filteron = true

これらは、これを実装する方法に関するいくつかの提案です。フィルターボックスがテーブルデータを更新している限り、それらがテーブルにバインドされているためだと思います:)

于 2013-06-13T17:13:56.437 に答える