1

ms-access 2007 で、テーブルのフォームを作成しようとしています。このテーブルには、2 つの親テーブルからの外部キーがあります。だから私はこれらのフィールドをルックアップにしようと思った. しかし、それらは複合キーであるため、親テーブルごとに単一のルックアップを作成できませんでした。

これらの親テーブルと子テーブルのそれぞれに対して、複合キーごとに追加のフィールドを持つクエリを作成することにしました。これは、バインドされていない ComboBox を使用する通常のフォームでは正常に機能しますが、バインドされていない ComboBox は DataSheet サブフォームでは機能しません。サブフォーム コードで ComboBox を変更すると、同じ列の他のすべての ComboBox にも適用されます。

私の質問:

  • 個々のバインドされていない ComboBox の値を変更する方法はありますか?

  • ComboBox または DataSheet サブフォーム以外に使用する必要がある別のコントロールはありますか?

  • この状況の通常の回避策は何ですか?

私が言ったように、クエリからのフィールドが計算/式であるため、コンボボックスをバインドできません。

4

2 に答える 2

1

私は自分でこの問題の形に出くわしたので、後世のために:

一般に、「この状況では継続的なフォーム/データシートを使用しないでください」というアドバイスが最善のアドバイスですが、これを回避することは可能です。

ただし、アクセスでは、データシート上の単一のコントロールの値を更新できません。この場合に代わりに使用できるのは一時テーブルで、これをレコードソースとして使用すると、これらのコントロールの値になります。ただし、計算を変更する必要があるたびに、テーブルを再作成し、コントロールを再クエリする必要があります (フォーム全体を再クエリすることも同様に機能するはずです)。さらに、コントロールの編集を有効にする場合は、各コントロールに VBA を記述して更新イベント (更新前) を処理し、独自のクエリを実行して一時テーブルだけでなくソース テーブルを更新する必要があります。面倒かもしれませんが、効果的です。

別の可能性もあり、それも機能する可能性がありますが、私は自分でこのようなことをしようとはしていません。コンボボックスの行ソースは非常に複雑になる可能性があるため、コンボボックスを VBA で更新する必要がまったくない可能性があります。複合キーを形成できる構文 Me.Form!controlName または Forms!FormName!ControlName を使用して、rowsource を他のコントロール (別のコンボボックスなど) に依存させることができます。もちろん、行ソースを持つクエリから選択することもできます。さらに興味深いのは、フォームが開いている場合、クエリがフォーム上のコントロールを参照できることです。必要に応じて、VBA を使用して安全に変更できるはずです。

これらの 2 つの間で、強制的にアクセスしたり、キックしたり叫んだりして、データシート上であっても希望するデータを表示し、ユーザーがそのデータを変更できるようにする必要があります (ただし、必要な場合のみ)。 BeforeUpdate イベントを使用して、変更されたデータを元のテーブルにドラッグして戻します。

于 2011-10-27T22:39:17.683 に答える
0

連続フォームとデータシートは、コンボボックスを条件付きで変更する必要がある状況での編集には適していません。問題は、OnCurrentイベントを使用してコンボボックスの行ソースを設定すると、その行では問題ありませんが、他の行に保存されている値が非表示になることです。

解決策は、この場合、データの編集に連続フォーム/データシートを使用しないことです(実際、編集に使用することはほとんどありません)。リストとして機能する連続/データシートサブフォームと、1つのレコードを表示する詳細サブフォームの2つのサブフォームを作成できます。リストサブフォームを編集不可にし、詳細サブフォームを編集可能にします。詳細サブフォームコントロールのLinkChild/ Link Masterプロパティを使用して、2つをリンクし、リストサブフォームのPKに設定できます。

リストサブフォームがMe!Listで、詳細がMe!Formで、PKフィールドがMyIDの場合、詳細サブフォームのリンクプロパティは次のようになります。

  Master: Me!List.Form!MyID
  Child:  MyID

リストフォームで別のレコードに移動すると、子フォームに自動的に読み込まれます。以前に表示された詳細への編集は、レコードの出発前に保存されます。

于 2010-08-27T19:44:56.973 に答える