2009-07-29 7 views
1

フォームのレコードをすばやく検索するためのドロップダウンがあるフォームがあります。フォームがバインドされているテーブルに基づいています。値が変更されると(つまり、ドロップダウンをクリックしてエントリを選択する)、正しいレコードにジャンプします。Access 2003フォーム:ドロップダウンナビゲーション

Access 2007には、「SearchForRecord」というアクションがあり、私がしたいことをします。ただし、Access 2003にはこれがありません。 Access 2007でこのタスクを実行するにはどうすればよいですか?

答えて

0

ロバートましたDoCmd.ApplyFilterが使用されていました。

Private Sub PK_Combo_Change() 
    DoCmd.ApplyFilter , "[PrimaryKey] = " & PK_Combo.Value 
End Sub 
0

あなたはおそらくFindFirstメソッドを探しています。ここで

は、それが使用されるかもしれない方法の例です:

Function FindRecord (rstTemp As Recordset, _ 
    strFind As String) As Boolean 

    rstTemp.FindFirst strFind 

    FindAny = IIf(rstTemp.NoMatch, False, True) 
End Function 
1

あなたのコンボボックスのOnChangeイベントに次のコードを試すかの選択が行われた後、ボタンに関連付けることができ:

このことができます
Private Sub cboExample_Change() 
    'Requires reference to Microsoft DAO 3.x Object Library ' 
    Dim rs As DAO.Recordset 

    Set rs = Forms!frmExample.RecordsetClone 

    rs.FindFirst "[ExampleID] = " & Me.cboExample 

    If Not rs.NoMatch Then 
     Forms!frmExample.Bookmark = rs.Bookmark 
    End If 

End Sub 

希望、

+0

こんにちはロバート、あなたのコードを強調表示し、上記のようにフォーマットするコードボタン(それに010を持っている)を選択することができます、主にそれはすべての4つのスペースをインデントします。 – Fionnuala

+0

チップ、Remouありがとう。私はそれをやろうとしていましたが、カット&ペーストするとコードブロックの先頭行だけが表示されました。私は間違っていると思う! – Sesame

0

私はこのようにロバートのコード@編集します:

With Forms!frmExample.RecordsetClone 
    FindFirst "[ExampleID] = " & Me!cboExample 
    If Not .NoMatch Then 
     If Me.Dirty Then Me.Dirty = False 
     Forms!frmExample.Bookmark = .Bookmark 
    End If 
    End With 

私はそのレコードがすでに存在していて、簡単にブロックWITH内部で働いていたことができたときに、レコードセット変数を初期化するために絶対にない理由を見ません。

また、ブックマークナビゲーションを使用してレコードを出発する前に、編集内容を保存することが不可欠です。これは、すべての検証を記録出発点に暗黙的に行うのではなく、明示的に行うためです。歴史的に言えば、Jetのブックマークナビゲーションは暗黙的に呼び出された保存で発生したエラーを食べる傾向がありました。おそらく、他のブックマークバグとともに、それは打ち切られましたが、私はちょうどすべてがうまくいっていくと仮定するのではなく、明白なレコードを明示的に保存するほうがよいと思います。

暴言:(2007、すなわち、2002年と2003年前)のアクセスの最近のバージョンのウィザードで作成されたこの操作の

コードは恐ろしいです。それは宣言されたレコードセット変数(@ Robertのコードのように)を使用しますが、使用した後(つまり、Nothingに設定して)それをクリーンアップしません。また、既に存在する.RecordsetCloneの代わりにフォームのRecordset.Cloneを使用します(別個のオブジェクトです)。最後に、.NoMatchを使用する代わりに、 "If Not rs.EOF"を使用します。これはほとんど意味がありません。私は、この理由は、ADOレコードセットを持つフォームでは機能するようになっているが、ADOレコードセットには.FindFirstメソッドがないため、これはばかげていると言われています。本当に、あなたは.FindFirstだけを変更することができます.Findとそれはうまくいくでしょうが、ひどいひどいコードです。

関連する問題