- 締切済み
access,フォームで最新のコンボ内容が反映不可
フォーム入力時、顧客や商品データが無い場合、フォームを開いたままで、そのテーブルを開き、顧客や商品データを入力、閉じます。 フォームでは、顧客や商品データはコンボボックスで選ぶ用にしていますが、それにテーブルに新たに入力したそのデータが出てきません。 フィールド→更新、やフォームを閉じ開きすれば、現れます。 これを、例えばボタンを作成し、テーブルにデータ追加後、ワンクリックで、フォームのコンボボックスに新入力データを反映させるにはどうすれば良いのでしょうか(SQLの方が良いか?)。 また、フォームのコンボボックスのデータは、フォームを開いた時のテーブルやクエリのデータそのままで、コンボボックス選択時に再読み込みなどはしないのでしょうか? 正確にはコンボボックスのデータは順の関係でクエリで整順させたものです。 access2000でwindows2000です。 宜しくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
<訂正> X フォーム[Test]を閉じた場合に O フォーム[ItemAdd]を閉じた場合に
<Test> ID Field_1 1 Item_1 2 Item_2 3 Item_3 を[コンボ_Items]で表示しているフォーム[Form1]があります。 Private Sub コマンド_Add_Click() On Error Resume Next DoCmd.OpenForm "ItemAdd", , , Null End Sub で、<Test>へのID=4、Field_1='Item_4' を追加するフォーム[ItemAdd]をオープン。 フォーム[Test]を閉じた場合に[コンボ_Items]に4つのデータを表示するには? との質問かと思います。 Private Sub Form_Close() On Error Resume Next Forms("Form1").Controls("コンボ_Items").Requery End Sub この場合、コンボアイテム追加フォームを閉じる際にコンボボックスを更新させるといいです。
- CHRONOS_0
- ベストアンサー率54% (457/838)
質問のようなことをする場合の定石です 追加入力はテーブルで行うのではなく、入力用フォームから行います コンボのNotInListイベントに下のようなコードを書きます Private Sub 品名コード_NotInList(NewData As String, Response As Integer) Dim NewCategory As Integer '入力されたものを新規登録するか確認 NewCategory = MsgBox("新規の商品として登録しますか?", vbYesNo + vbQuestion + vbDefaultButton1, "新規の商品") If NewCategory = vbYes Then '入力されたものを再クエリに備えて削除 DoCmd.RunCommand acCmdUndo End If DoCmd.OpenForm "h商品", acNormal, , , , acDialog, NewData Response = acDataErrAdded End Sub 入力用フォームの開くときイベントに下のコードを書きます Private Sub Form_Open(Cancel As Integer) DoCmd.GoToRecord , , acNewRec Me.品名 = Me.OpenArgs End Sub 入力用フォームを閉じれば入力された状態から作業を続けられます 再クエリは必要ありません
- DexMachina
- ベストアンサー率73% (1287/1744)
> コンボボックス選択時に再読み込みなどはしないのでしょうか? リストは自動では更新されませんので、「再クエリ(Requery)」を使用します。 いわゆるマクロで組んでいるのでしたら、 1)「アクション」に「再クエリ」を設定 2)画面左下の「コントロール」引数にコンボボックス名を指定 コードで組んでいるのでしたら、 コンボボックス名.Requery をコマンドボタンのクリック時イベントに設定してやればOKです。 または、コマンドボタンは作らずに、コンボボックスのフォーカス 取得後イベントでもいいと思います。