2015-02-10 62 views
1

即使表中有記錄,我的查詢也不會返回任何值。我正在嘗試根據輸入的姓名檢索職業編號。我不斷收到消息「沒有員工ID」。就Access VBA而言,我是一個新的學習者。我曾與Access表和其他表沒有問題。我沒有驗證表單字段具有正確的值和變量strEmpName未收到查詢結果

Set cnn1 = New ADODB.Connection 
    mydb = "C:\accesssamp\Documents\Tasks.accdb" 
    strCnn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & mydb 
    cnn1.Open strCnn 

    'This statement added here just to indicate that I am getting the value 
    strEmpName = cboEmployeeName.Text ' Getting employee name from form field 

    Set cmd = New ADODB.Command 

    With cmd 
     .ActiveConnection = CurrentProject.Connection 
     .CommandText = "SELECT [EmployeeId] FROM [Employees] " & _ 
         "WHERE [EmployeeName] = [strEmpName]" 
     .CommandType = adCmdUnknown 
     .Parameters.Append cmd.CreateParameter(_ 
        "[strEmpName]", adChar, adParamInput, 50) 
     .Parameters("[strEmpName]") = strEmpName 
    End With 

    ' Execute the Query and return the employeeId 
    Set rstEmp = cmd.Execute 

    If rstEmp.RecordCount < 1 Then 
     MsgBox "No Employee Id" 
    Else 
     MsgBox rstEmp(0).Value 
    End If 
+0

'Debug.Print'告訴你什麼? – PaulFrancis 2015-02-10 16:42:31

+0

@PaulFrancis我在哪裏添加該語句?我瀏覽了代碼並得到了消息框「沒有員工ID」 – rajeev 2015-02-10 16:49:24

+1

RecordCount對ADO來說可能有點奇怪,儘管使用了立即窗口來獲得'firstEmp(0).Value'。爲什麼使用MS Access而不是DAO使用ADO? DAO是首選。 – Fionnuala 2015-02-10 16:51:34

回答

2

你的樣品有多個問題被抓獲。我不確定這是否正是您想要的,但它在我的系統上無誤地運行。

With cmd 
    '.ActiveConnection = CurrentProject.Connection 
    .ActiveConnection = cnn1 
    .CommandText = "SELECT [EmployeeId] FROM [Employees] " & _ 
        "WHERE [EmployeeName] = [strEmpName]" 
    .CommandType = adCmdUnknown ' or adCmdText; either works 
    .Parameters.Append cmd.CreateParameter(_ 
       "strEmpName", adVarChar, adParamInput, 255, strEmpName) 
End With 

' Execute the Query and return the employeeId 
Set rstEmp = cmd.Execute 

'If rstEmp.RecordCount < 1 Then 
If rstEmp.BOF And rstEmp.EOF Then 
    MsgBox "No Employee Id" 
Else 
    MsgBox rstEmp(0).value 
End If 

注:

  1. 我假設你想從CNN1連接到其他數據庫,而不是從CurrentProject.Connection運行查詢。
  2. CreateParameter提供兼容數據類型。對於文本參數,請爲其最大長度提供一個值。最後包含參數的值。
  3. rstEmp.RecordCount正在返回-1,即小於1,因此即使記錄集不爲空,您的代碼也會顯示爲「無員工ID」。而不是檢查RecordCount,檢查記錄集是否爲空。
+1

它看起來像你做的其他事情,但沒有提及(我忘記了這是否真的很重要,但是)你將參數名稱從'[strEmpName]'改爲' strEmpName'創建參數時。 – Brad 2015-02-10 17:27:09

+0

是的,我做到了,但沒關係。使用ADO時,參數名稱完全被忽略。 – HansUp 2015-02-10 17:33:21

+0

啊右鍵,只有順序很重要。我只是總是說出名字,但我想我總是把它們整理好,所以我也忘記了。謝謝! – Brad 2015-02-10 17:34:48