2014-03-28 119 views
0

我想要做的是使用带有参数的查询从SQL服务器拉入信息到excel电子表格。从Excel中查询SQL Server的参数

我已经能够从Excel中查询数据库,但一直未能弄清楚如何添加参数。

我需要从工作表中的单元格中获取参数。

Sub DataExtract() 

Dim cnPubs As ADODB.Connection 
Set cnPubs = New ADODB.Connection 
Dim strConn As String 
strConn = "PROVIDER=SQLOLEDB;" 
strConn = strConn & "DATA SOURCE= MyServer ;INITIAL CATALOG = MyDatabase ;" 
strConn = strConn & " INTEGRATED SECURITY=sspi;" 
cnPubs.Open strConn 
Dim rsPubs As ADODB.Recordset 
Set rsPubs = New ADODB.Recordset 
With rsPubs 

.ActiveConnection = cnPubs 

.Open "SELECT * FROM [MyTable] WHERE ColA = ?" 

Sheet1.Range("B12").CopyFromRecordset rsPubs 

.Close 
End With 
cnPubs.Close 
Set rsPubs = Nothing 
Set cnPubs = Nothing 
End Sub 

任何关于如何简单地在查询中引用问号的帮助我们将不胜感激。 感谢

回答

1

未经测试:

Sub DataExtract() 

Dim cmd as ADODB.Command, param as Object, val 
Dim cnPubs As ADODB.Connection 
Dim rsPubs As ADODB.Recordset 
Dim strConn As String 

    Set cnPubs = New ADODB.Connection 

    strConn = "PROVIDER=SQLOLEDB;" 
    strConn = strConn & "DATA SOURCE= MyServer ;INITIAL CATALOG = MyDatabase ;" 
    strConn = strConn & " INTEGRATED SECURITY=sspi;" 
    cnPubs.Open strConn 

    Set cmd = New ADODB.Command 
    cmd.CommandText = "SELECT * FROM [MyTable] WHERE ColA = ?" 
    cmd.CommandType = adCmdText 


    val = Sheet1.Range("A1").Value 'query value to be used 
    'create and add the parameter 
    Set param = cmd.CreateParameter("", adVariant, adParamInput, 0, val) 
    cmd.parameters.Append param 

    Set cmd.ActiveConnection = cnPubs 

    Set rsPubs = cmd.Execute() 

    Sheet1.Range("B12").CopyFromRecordset rsPubs 

End Sub 
+0

我用的是成功地与甲骨文(未接入用户) - 不熟悉SQL服务器。尽管我在SQL Server上看到了很多使用'?'的例子。 –

+0

是的,我猜ADO驱动程序会将其计算出来。如果您想以任何顺序定义您的参数,命名就出现了。我很惊讶你没有使用Access虽然 – Brad

+0

@Brad - 我不会说我从来没有使用Access,但我们更像是一家Oracle商店。 –