【问题标题】:Execute SQL Query from excel从excel执行SQL查询
【发布时间】:2023-03-07 04:18:01
【问题描述】:

我在一个小项目中有点卡住了一段时间 从几个生成结果 几个excel表格中的sql查询,我正在尝试使用SQL Server 2008,这是我第一次编写VBA代码 我尝试了这段代码(用于 SQL 单个查询),但我仍然有编译问题

Sub New_Feuil1() 
    ThisWorkbook.Activate 

     'First clear the contents from the query
    Worksheets("Feuil1").Select 
    Range("A2").Select 
    Do Until ActiveCell = "" 
        ActiveCell.Offset(1).Select 
    Loop 
    Range("A4", ActiveCell.Offset(-1, 3)).ClearContents 

     'Get reporting date
    ReportingDate = ThisWorkbook.Sheets("Parameters").Range("D1") 

     'Format the value for use in the SQL query
    ReportingDateFor = Format(ReportingDate, "yyyy-mm-dd") 

    Worksheets("Feuil1").Select 
    Range("A1").Select 

    Dim cnn As New ADODB.Connection 
    Dim rst As New ADODB.Recordset 
    Dim StrQuery1 As String 
    Dim ConnectionString As String 

    ConnectionString ="ODBC;" & _
    "Driver={SQL Server Native Client 10.0};" & _
    "Server=187.125.254.231;" & _
    "Database=database;" & _
    "UID=sa; PWD=pwd"
    cnn.Open ConnectionString 
    cnn.CommandTimeout = 900 

     'Queries to be executed
    StrQuery1 = StrQuery1 & "Select Id from Users" 

    rst.Open StrQuery1, cnn, adOpenForwardOnly, adLockReadOnly 
    rst.Close 

    Debug.Print "StrQuery1:"; StrQuery1 
    cnn.Close 

    ThisWorkbook.Sheets("Central Dashboard").Select 
    Sheets("Feuil1").Range("A2").CopyFromRecordset rst

End Sub 

还有其他解决办法吗?

【问题讨论】:

  • 您能否告诉我们您遇到的具体问题。阅读how to write a Short, Self Contained, Correct Example 并在此处查看help centre。然后edit您的问题并提供所有必要的详细信息。
  • 每次我运行宏,它总是告诉我我有一个编译问题
  • 好的...编译问题是什么?我看不到你的电脑。请阅读我提供的链接并编辑您的问题,向我们解释发生了什么。 “它给出了一个编译器错误”什么也没告诉我。
  • 您是否导入了必要的sql 引用?转到工具 > 参考并导入相关的 SQL 参考。
  • 谢谢RossC,我会尝试并给你反馈

标签: sql-server excel vba


【解决方案1】:

看来您是编程新手 :).. 在使用任何变量之前,请先声明它们,这将帮助您快速理解它们。

喜欢:

Dim ReportingDate as Date
ReportingDate = ThisWorkbook.Sheets("Parameters").Range("D1")

Dim ReportingDateFor As String
ReportingDateFor = Format$(ReportingDate, "yyyy-mm-dd")

还要检查您的连接字符串。试试这个连接字符串。

ConnectionString = "Driver={SQL Server Native Client 10.0};Server=187.125.254.231;Database=database;UID=sa; PWD=pwd"

除此之外,查看您连接到服务器的代码,打开记录集,关闭记录集,最后关闭连接,然后尝试检索结果。从逻辑上讲,这永远不会起作用:) :)

试试这个:

Dim cnn As New ADODB.Connection
Dim rst As New ADODB.Recordset
Dim cmd As ADODB.Command

Dim ConnectionString As String
ConnectionString = "Driver={SQL Server Native Client 10.0};Server=187.125.254.231;Database=database;UID=sa; PWD=pwd"

cnn.Open ConnectionString

'Queries to be executed
Dim StrQuery1 As String
StrQuery1 = StrQuery1 & "Select Id from Users"

'Prepare SQL execution
cmd.Name = "SelectUsers"
cmd.ActiveConnection = conn
cmd.CommandText = StrQuery1

Set rst = cmd.Execute
If Not rst.EOF Then
    With Sheets(1).Cells ' Enter your sheet name and range here
        .ClearContents ' clears the entire sheet
        .CopyFromRecordset rst ' copy the result
    End With
Else
    MsgBox "no records found.."
End If

'After work done close connection
On Error Resume Next
rst.Close
cnn.Close
Set rst = Nothing
Set cnn = Nothing

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-24
    • 1970-01-01
    相关资源
    最近更新 更多