2009-07-29 56 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)爲上面的格式,主要是它的一切縮進四個空格。 – Fionnuala 2009-07-29 19:15:38

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 

我看絕對沒有理由當該記錄已經存在,並且可以與內輕鬆曾與塊初始化一個記錄集變量。

此外,它是必不可少的前提與書籤導航記錄之前保存任何編輯,因爲這迫使所有驗證明確發生,而不是隱含在記錄出發。從歷史上看,Jet書籤導航很容易發生在隱式調用保存中發生的錯誤。據推測,與其他書籤bug一起被刪除,但我認爲最好是明確保存一個髒記錄,而不是假設所有事情都會順利進行。

咆哮:

此操作是由嚮導在最近版本的Access創建(2007年之前,即2002年和2003年)的代碼是可怕的。它使用聲明的記錄集變量(如@ Robert的代碼所做的那樣),但在使用它之後不會將其清除(即將其設置爲Nothing)。它也使用表單的Recordset.Clone,而不是已經存在的.RecordsetClone(它們是不同的對象)。最後,不是使用.NoMatch,而是使用「If Not rs.EOF」,這沒什麼意義。我被告知這樣做的原因是它可以處理帶有ADO記錄集的表單,但ADO記錄集沒有.FindFirst方法,所以這很荒唐。誠然,你可以將.FindFirst改成.Find,它會起作用,但它只是可怕的,糟糕的代碼。