用于从访问表中提取员工详细信息的SQL查询

时间:2015-09-30 10:25:17

标签: sql excel-vba vba excel

我是Excel VBA的新手。我有一个用户表单,我试图填充那些AMO员工的姓名。我有一个名为Ofc的数据库。我有一张表EmployeeDetails。主键是PeoplesoftId

以下是Employee表的结构和内容:

PeoplesoftId  Nameofemployee  RacifId  Employeeid  Designation
43243309      Maddala         V43309   99651823    AMO
43243310      Abhishek        A43301   99651824    AMO
43243311      Atanu           A43311   99651825    MO
43243312      Rajiv           R43312   99651826    CSE

这是我到目前为止编写的代码:

Dim cnn As ADODB.Connection 'dim the ADO collection class
Dim rs As ADODB.Recordset 'dim the ADO recordset class
Dim dbPath As String
Dim SQL As String
Dim i As Integer
Dim var
'add error handling
On Error GoTo errHandler:
'Disable screen flickering.
Application.ScreenUpdating = False
dbPath = "E:\office_hsbc\ofc.accdb"
var = "AMO"
Set cnn = New ADODB.Connection ' Initialise the collection class variable
cnn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & dbPath
cnn.Open
SQL = "SELECT Nameofemployee FROM EmployeeDetails where Designation= '" & var & "'"
Set rs = New ADODB.Recordset 'assign memory to the recordset
rs.Open SQL, cnn
If rs.EOF And rs.BOF Then
rs.Close
cnn.Close
'clear memory
Set rs = Nothing
Set cnn = Nothing
'Enable the screen.
Application.ScreenUpdating = True
MsgBox "There are no records in the recordset!", vbCritical, "No Records"
Exit Sub
End If
For i = 0 To rs.Fields.Count - 1
    comboamo.AddItem rs.Fields(i).Value, i
Next
rs.Close
cnn.Close
Set rs = Nothing
Set cnn = Nothing
MsgBox "Congratulation the data has been successfully Imported", vbInformation, "Import successful"
'error handler
On Error GoTo 0
Exit Sub
errHandler:
'clear memory
Set rs = Nothing
Set cnn = Nothing
MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure Import_Data"

1 个答案:

答案 0 :(得分:0)

您需要浏览记录集中的每条记录。目前,您尝试从单个记录中读取所有字段,但查询仅返回一个字段。试试这个:

MsgBox "There are no records in the recordset!", vbCritical, "No Records"
Exit Sub
End If
i = 0
Do Until rs.EOF
    comboamo.AddItem rs.Fields("Nameofemployee").Value, i
    rs.MoveNext
    i = i + 1
Loop
rs.Close