0

我在通过 VBA 连接到 MSSQL Server 时遇到了一些问题下面是我遇到问题的代码

Set con = New ADODB.Connection
Set rs = New ADODB.Recordset

con.Provider = "sqloledb"
sConnectionString = "Server=SQLServer;Database=DBName;UID=sa;Pwd=NiceTry"
con.Open sConnectionString

'Dim sh As Worksheet
Dim tempSheet As String
tempSheet = "IgnoreMe"

'See if there is already an "IgnoreMe" Sheet, create it if not. 
Dim wsSheet As Worksheet
On Error Resume Next
Set wsSheet = Sheets("IgnoreMe")
On Error GoTo 0
If Not wsSheet Is Nothing Then
    'Sheet exists, don't recreate it.
Else
    Sheets.Add.Name = tempSheet
End If
    Set sh = Worksheets("IgnoreMe")

' Clean up the sheet's contents
sh.UsedRange.Clear

' Now get the table's data
rs.Open "SELECT JobHeaderID, Job, ProofApproved, SleeveLabel, MasterLabel" & _
                     " FROM JobHeader " & _
                     " WHERE Job IN ('665511', '671259', '671259-1')", con



End Sub

这只是下载信息的部分。我还有其他代码要读取记录集。在线上rs.Open我总是得到一个Automation Error我无法弄清楚它遇到了什么问题。关于它击中什么的任何想法?

我正在尝试在没有 DSN 的情况下 关注http://webcheatsheet.com/ASP/database_connection_to_MSSQL.php自动化错误

4

1 回答 1

0

在这里找到了一个非常简单的例子

这是我清理过的工作代码

子 IterateColE()
    ' 清理目标工作表的内容
    Sheets("IgnoreMe").UsedRange.Clear


    '我们将遍历 E 列,直到遇到空白/空单元格。
    对于 Worksheets("Main").Range("E:E").Cells() 中的每个 currCell
        '哦!我们不想得到标题行
        如果 currCell.Row 1 那么
            If (currCell.Text "") And (currCell.Text vbNullString) Then
                '获取 currCell 中作业的值并放置在 IgnoreMe 上的匹配行中
                getValues currCell.Value、currCell.Row
            别的
            '好吧,似乎我们遇到了一个空白单元格,停止处理
                退出
            万一
        万一
    下一个
结束子

'获取作业所需的值并将它们放在指定行的“IgnoreMe”表中。然后可以像“=IgnoreMe!C3”一样引用它们
子 getValues(作业作为字符串,destinationRow 作为整数)

    Dim conn As ADODB.Connection
    暗淡 rs 作为 ADODB.Recordset
    将 sConnString 调暗为字符串

    ' 创建连接字符串。
    sConnString = "提供者=SQLOLEDB;数据源=SQLServer;" &_
                  “初始目录=初始表名;” &_
                  “UID=DB 用户名;密码=Nicetry;”

    ' 创建 Connection 和 Recordset 对象。
    设置 conn = New ADODB.Connection
    设置 rs = 新 ADODB.Recordset

    ' 打开连接并执行。
    conn.Open sConnString
    设置 rs = conn.Execute("SELECT JobHeaderID, Job, DataProofApproved, SleevePackLabel, MasterLabel" & _
                         “来自 JobHeader” & _
                         " WHERE Job='" & 工作 & "'")

    ' 检查我们有数据。
    如果不是 rs.EOF 则
        ' 传输结果。
        Sheets("IgnoreMe").Range("A" & destinationRow).CopyFromRecordset rs
    ' 关闭记录集
        rs.关闭
    别的
        MsgBox "错误:没有返回记录。", vbCritical
    万一

    ' 清理
    If CBool​​(conn.State And adStateOpen) Then conn.Close
    设置 conn = 无
    设置 rs = 无

结束子


'关闭工作簿时关闭连接。锁定的数据库表很烦人
私有子 Workbook_Deactivate()
    如果不是(con is nothing)那么
        con.关闭
        设置 con = 无
    万一
结束子
于 2013-10-15T22:17:21.113 回答