システムwiki

Office:フォーム入力コンボボックス-行ソースタイプの使用はクエリです.

RodgerY 受付中 最終更新日:2021-04-11 00:40

table内のデータを入力するためのフォームを使用します.table内のフィールドの1つでは、コンボボックスを使用してそのデータを入力します.コンボボックスは、コンボボックスの入力(クエリ)としてそのフィールドを使用します.データ型は次のとおりです.制御ソース、行ソース、行ソースタイプtable/クエリ、
tableのそのフィールドから.私は現在私のフォームを閉じ、クエリを実行してからクエリを閉じてフォームを再開することによってクエリを更新します.エントリフォームに繰り返される値があるため、そのフィールドの行元データのクエリを使用します.
フォームを閉じることなく、コントロールソース、行ソース、行ソースタイプtable/クエリで使用される特定のクエリを自動的に更新する方法はあります.データイン
フォーム?

返信リスト(回答:7)

1 #
KenSher
バインドコンボボックスは通常、その形式がバインドされているtable内の外部キー列(フィールド)の名前をControlSourceプロパティとして持ちます.rowsourceプロパティは通常、外部キーがどのtableから行を返すクエリです.
参考文献たとえば、コンボボックスが連絡先アドレスの表のCityID外部キー列にバインドされている可能性があります.この場合、RowSourceプロパティはこれらの行に沿っているとします.都市;

コンボボックスを再実行する必要がある唯一の状況は、新しい行が挿入されている場合 参照tableには、上記の例の都市です.これは通常、応答引数を含むコントロールのNotInlistイベントプロシージャーのコードによって行われます.
コントロールを再クエリし、新しい項目をリストに追加するには、AcDataErraddedに設定されています.もしそうであれば、tableを2つの関連tableに分解する必要があるため、コンボボックスを外部キーにバインドできます.
参照tableの列、コンボボックスは参照tableからそのリストを描画します.2つのtableの間の1対多の関係は、参照整合性の執行を含むべきです.
応答1# ->にスキップ
2 #
RodgerY

はい、私は私が伝播する形式を使っているtableのクエリを使っています.私があなたが言っていることをあなたに理解しているならば、私はちょうどその表とコンボボックスが伝播しようとしている列を使う必要があります.私の理解は正しいですか?

Rodger Young

HR CO USA

応答1# ->にスキップ
3 #
RodgerY
My Comboボックスの列のクエリは、単純なクエリだけです.[プロパティ]画面の[イベント]タブの下にある[NotInlist]に「acDataErradded」を追加することで、フォームを閉じる必要がなく、クエリを実行する必要がないシンプルなクエリを再照会します.
更新するクエリのクエリの閉じます.
応答3# ->にスキップ
4 #
KenSher

私が恐れているのと同じくらい簡単ではありません.AcDataErraddedは、コード内のNotInListイベントプロシージャの応答引数に値が割り当てられている定数です.参照tableにデータが挿入されている1列のみがある場合 コード
コンボボックスのクエリがリージョンtableから行を返す都市tableに基づくフォーム内のリージョンコンボボックスを介して新しい領域を挿入するための新しい領域を挿入するための新しい領域を透過的に行うことができます.
private sub region_notinlist( NewDataとして、整数としての応答
DIM CTRLコントロールとして
DIM STRSQL文字列として、StrMessage
strl= me.activeControl
strmessage= "リストに"&NewData&"を追加しますか? "
strsql="地域への挿入( "" "" "" "" "" "" "" "" "" "" "" MSGBOX、VBYESNO + VBQuestion)= VBYES
currentDB.STRSQL、DBFAILONERRORを実行します.Response= ACDataErradded

response= aCDataerRContinue









他の列がある状況で
コンボボックスのRowSourceがCitiestableから行を返す連絡先tableに基づく都市コンボボックスの次の例のように、NotInlistイベント手順のコードを返します.
都市tableに基づいてダイアログモードでフォームを開き、新しい都市名をOpenFormメソッドのOpenArgs引数として渡します.

コントロールとしてDIM CTRL
strのムラ= me.activeControlとして
strmessage= "add"&newdata&"to list?"
msgBox(strmessage、vbyesno + vbquestion)= VBYES
docmd.openform "frmcities"、_
DataMode:= acformadd:_
windowmode:= acdialog、_
openargs:= newdata:
docmdを閉じてください.Acform、 "Frmcities"
'Cityが追加されています
isNullでない場合は
isNull(Dlookup( "CityID"、 "都市"、 "city="""&_"newdata&" "")その後、
response= acdataerradded

strmessage= newdata&"がCitiestableに追加されませんでした.
msgbox strmessage、vb情報、「警告」、
response= acdataerRContinue
Ctrl.UNDO




response= acDataerRContinue






He Cities Formのオープンイベント手順フォームに渡された値は、City Text BoxコントロールのDefaultValueプロパティに割り当てられており、都市が基づく地域を選択または入力する準備ができています.
Private Sub Form_Open(キャンセル整数として)



isNull(Me.Openargs)で
me.City.DefaultValue= "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "


すべてのコードを使用しないことは可能です.たとえば、連絡先の場合は、City Combo BoxのListItemSeditPropertyをCitiestableにバインドされているフォームの名前に設定すると、新しい都市名が表示されたときに都市が開くことがあります.
現在リストに含まれていない、コンボボックスに入力されます.上記のコードとは異なり、新しい名前はフォームに渡されません.そのため、フォームの[City]テキストボックスに再度名前を入力する必要があります.
上記の例は、initinlist.zipファイルから取得されます.私の公共データベースのフォルダ:
https://onedrive.live.com/?cid=44cc60d7fea42912&id=44cc60d7fea42912年169.

あなたが以前のversionのアクセスを使用している場合、ボタンなどのフォームオブジェクトの色が誤って表示され、それに応じてフォームデザインを修正する必要があることがわかります.
この小さなデモは、さまざまなコンテキストでNotInlistイベント手順の使用を示しています.また、新しいアイテムを挿入できる方法も示しています NotInlistイベント手順が個人的に同様に適していないコマンドボックスを介してコンボボックスのリストに
名前、2人以上の人が正当に同じ名前を持つことができる名前.
Demoは、以下の単純な3つのtableモデルに基づいています.

応答4# ->にスキップ
6 #
RodgerY

私はアクセスマニュアルをもう少し勉強し、このシンクをする必要があると思います.あなたの助けを与えてくれてありがとう、私は私の申請書でできることについての私の理解の中でもう少し続けています.

Rodger

応答3# ->にスキップ
5 #
Scottge

リレーショナルデータベースの原理の1つは、データが繰り返されないことです.あなたがしていることはこの原則に違反しています.あなたがあなたのコンボのrowsourceを投稿したならば、それはもっと助けました.

しかし、例を使うことができます.例としてKenの都市tableを使用します.それで、あなたがフロリダ州の都市だけで扱っていると言う.それで、タラハシー、ペンサコーラ、ジャクソンビルのための異なる記録があると言うことができます.各都市に5つのレコードがあるとしましょう.
それは冗長でスペースの無駄です.代わりに都市を保管するためのコードを使用する場合、これは正規化されたデータベースを作成します.

応答5# ->にスキップ
7 #
RodgerY

私はアクセスマニュアルをもう少し勉強し、このシンクをする必要があると思います.あなたの助けを与えてくれてありがとう、私は私の申請書でできることについての私の理解の中でもう少し続けています.

Rodger