2016-05-22 42 views
3

我使用Access數據庫來管理員工信息。我想創建一個搜索框,以便當我輸入員工ID時,其餘信息可以自動填充。在Access中創建搜索框

我創建了一個函數來嘗試獲取每列的值並在單擊按鈕時指定它,但它不起作用。

下面是代碼:

Public Function GetEmployeeName() As ADODB.Recordset 
    Dim rst As ADODB.Recordset 
    Set GetEmployeeName = CurrentProject.Connection.Execute("select EmployeeName From EInfor where EmployeeID = " & txtEID.Value) 
End Function 

Private Sub btnSearch_Click() 
    txtEmployeeName = GetEmployeeName() 
End Sub 

回答

1

在我看來,GetEmployeeName()應該回到它匹配給定EmployeeIDEmployeeName。在這種情況下,你不需要Recordset。 A DLookup表達式可以給你你需要的東西。

Public Function GetEmployeeName(ByVal pEID As Long) As Variant 
    GetEmployeeName = DLookup("EmployeeName", "EInfor", "EmployeeID=" & pEID) 
End Function 

該函數期望你提供目標EmployeeID作爲參數,所以它不是硬線連接到一個特定形式的控制的值。

如果找不到匹配的EmployeeName,則該函數返回Null。在您的命令按鈕的單擊事件中,您可以使用Nz()替換其他值爲Null。

Private Sub btnSearch_Click() 
    Me!txtEmployeeName.Value = Nz(GetEmployeeName(Me!txtEID.Value), "unknown") 
End Sub 
+0

感謝您提供非常有用的建議,它效果很好 – Royy

0

您嘗試的txtEmployeeName默認屬性(這是Value屬性)設爲GetEmployeeName()它返回一個ADODB.Recordset具有默認屬性Fields,這是一個採集。

這不可能工作。

試試這個:

txtEmployeeName = GetEmployeeName().Fields(0) 

如果你想更新你應該考慮多個文本框只能使用一個SELECT語句,一次檢索所有需要的值:

"select * From EInfor where EmployeeID = " & CLng(txtEID.Value) 

然後你可以像這樣更新文本框:

txtEmployeeName = rst.Fields("EmployeeName") 
txtEmployeeBoss = rst.Fields("EmployeeBoss") 
txtEmployeeAddress = rst.Fields("EmployeeAddress") 
txtEmployeeSalary = rst.Fields("EmployeeSalary") 

請注意以下更改:

0

您可以創建一個ComboBox,用於在鍵入時過濾記錄集。當您搜索與您正在查找的內容類似的記錄時,這非常有用,但可能不完全匹配!

按Alt + F11並右鍵單擊您之前創建的表單。粘貼在下面的腳本中。

[![Option Compare Database 

Private Sub ComboSelect_Change() 

    ' You need to use String delimiters if you want to use a Text Field like: 
    ' Me.Filter "\[ATextFieldInRecordSource\] = """ & Me.FilterComboBox & """" 

    ' For a Numeric Field, use something like this: 
    ' Me.Filter "\[ANumericFieldInRecordSource\] = " & Me.FilterComboBox 
    ' Me.FilterOn = True 

    Me.\[Customer_Query subform1\].Form.Filter = "\[Company_Name\] Like '*" & 
        Replace(Me.ComboSelect.Text, "'", "''") & "*'" 
    Me.\[Customer_Query subform1\].Form.FilterOn = True 

End Sub][1]][1] 



Notice a few things: 
• The subform is named Customer_Query subform1’ 
• The combobox is named ComboSelect’ 
• Finally, the ‘like clause’ is used in combination with the wildcard character. 
• Like '*" & Replace(Me.ComboSelect.Text, "'", "''") & "*'" 

當您在組合框中鍵入文本時,會動態地重新查詢子窗體中的結果。