使用VBA

时间:2018-02-01 16:08:52

标签: sql sql-server vba excel-vba excel

我是VBA的新手,我正在尝试从SQL服务器数据库上的特定表中将数据提取到Excel上的特定单元格。我有以下表单类型:

enter image description here

应根据用户输入的ID(在单元格B2中)提取数据。例如,我使用以下VBA代码从数据库表中获取用户名:

Sub Get_Data()

        Set objMyconn = New ADODB.Connection
        Set objMyCmd = New ADODB.Command
        Set objMyRecordset = New ADODB.Recordset
        Dim rc As Long

        objMyconn.ConnectionString = "Provider=SQLOLEDB;Data Source=IP_ADDRESS;Initial Catalog=My_Database; Integrated Security=SSPI;"

        objMyconn.Open

        Set objMyCmd.ActiveConnection = objMyconn
        objMyCmd.CommandText = "select User_Name from My_Database WHERE User_ID = '" & Range("B2").Value & "'"""

        objMyCmd.CommandType = adCmdText
        objMyCmd.Execute

        Set objMyRecordset.ActiveConnection = objMyconn
        objMyRecordset.Open objMyCmd

        ActiveSheet.Range("B3").CopyFromRecordset (objMyRecordset)     
End Sub

运行代码时出现此错误:

enter image description here

此外,有关如何在各个单元格中提取会话信息的数据数组的任何想法(使用基于用户ID的Select查询)?例如单元格B8,C8,D8,B9,C9,D9等。一个用户可能有多个会话。

1 个答案:

答案 0 :(得分:4)

在这一行:objMyCmd.CommandText = "select User_Name from My_Database WHERE User_ID = '" & Range("B2").Value & "'"""你最后有一个双引号。删除它。

objMyCmd.CommandText = "select User_Name from My_Database WHERE User_ID = '" & Range("B2").Value & "'"

在第二部分中,我采用的方法是检索所有必要的数据项以将字段填充到记录集中。然后,我遍历记录集,直到我到达结尾并填充记录集![Field]值到适当的位置(我还没有测试过这段代码,但你应该能够跟进:)

objMyCmd.CommandText ="SELECT User_Name, Session_ID, Sesssion_Date, Session_Date " & _  
    "FROM [My_Database] Where User_ID = '" & range("b2").value & "';"
objMyRecordset.Open objMyCmd
'objMyRecordset.MoveLast
'objMyRecordset.MoveFirst

Dim Offset as Integer
Offset = 0
While Not objMyRecordset.EOF 
    ActiveSheet.Cells(8, 2+Offset).Value = objMyRecordset.Fields("Session_ID").Value
    ActiveSheet.Cells(9, 2+Offset).Value = objMyRecordset.Fields("Sesssion_Date").Value
    ActiveSheet.Cells(10, 2+Offset).Value = objMyRecordset.Fields("Session_Date").Value
    Offset = Offset + 1
    objMyRecordset.MoveNext
Wend