我有在窗體的記錄更快的導航下拉表單。它基於表格所綁定的表格。當值改變時(即點擊下拉菜單,選擇一個條目),它應該跳轉到正確的記錄。Access 2003點中的形式:下拉導航
Access 2007年有行動「SearchForRecord」這我想要做什麼。但是,Access 2003沒有這個。我如何在Access 2007中執行此任務?
我有在窗體的記錄更快的導航下拉表單。它基於表格所綁定的表格。當值改變時(即點擊下拉菜單,選擇一個條目),它應該跳轉到正確的記錄。Access 2003點中的形式:下拉導航
Access 2007年有行動「SearchForRecord」這我想要做什麼。但是,Access 2003沒有這個。我如何在Access 2007中執行此任務?
當時比預期的簡單得多,使用了DoCmd.ApplyFilter。
Private Sub PK_Combo_Change()
DoCmd.ApplyFilter , "[PrimaryKey] = " & PK_Combo.Value
End Sub
您可能正在尋找FindFirst
方法。
這裏是它如何被使用的例子:
Function FindRecord (rstTemp As Recordset, _
strFind As String) As Boolean
rstTemp.FindFirst strFind
FindAny = IIf(rstTemp.NoMatch, False, True)
End Function
你可以試試下面的代碼在你的組合框的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
希望這有助於
羅伯特
我會編輯@羅伯特的代碼是這樣的:
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
我看絕對沒有理由當該記錄已經存在,並且可以與內輕鬆曾與塊初始化一個記錄集變量。
此外,它是必不可少的前提與書籤導航記錄之前保存任何編輯,因爲這迫使所有驗證明確發生,而不是隱含在記錄出發。從歷史上看,Jet書籤導航很容易發生在隱式調用保存中發生的錯誤。據推測,與其他書籤bug一起被刪除,但我認爲最好是明確保存一個髒記錄,而不是假設所有事情都會順利進行。
咆哮:
此操作是由嚮導在最近版本的Access創建(2007年之前,即2002年和2003年)的代碼是可怕的。它使用聲明的記錄集變量(如@ Robert的代碼所做的那樣),但在使用它之後不會將其清除(即將其設置爲Nothing)。它也使用表單的Recordset.Clone,而不是已經存在的.RecordsetClone(它們是不同的對象)。最後,不是使用.NoMatch,而是使用「If Not rs.EOF」,這沒什麼意義。我被告知這樣做的原因是它可以處理帶有ADO記錄集的表單,但ADO記錄集沒有.FindFirst方法,所以這很荒唐。誠然,你可以將.FindFirst改成.Find,它會起作用,但它只是可怕的,糟糕的代碼。
嗨羅伯特,你可以突出你的代碼,並選擇按鈕的代碼(它有它010)爲上面的格式,主要是它的一切縮進四個空格。 – Fionnuala 2009-07-29 19:15:38