Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何在VBA上的SQL查询中将单元格excel单元格引用定义为参数?_Mysql_Sql_Sql Server_Excel_Vba - Fatal编程技术网

Mysql 如何在VBA上的SQL查询中将单元格excel单元格引用定义为参数?

Mysql 如何在VBA上的SQL查询中将单元格excel单元格引用定义为参数?,mysql,sql,sql-server,excel,vba,Mysql,Sql,Sql Server,Excel,Vba,如果有人能帮上忙那就太好了 我想从单独的表格中提供单元格引用作为参数,在这里我指的是查询,而不是字符串“Arunraj S”,我需要从sheet1(“PDA”)的范围(“c3”)中提供引用 它在通过where查询提供直接字符串的同时检索良好 但是当我试图改变查询时,它抛出了语法错误,如下所示 query = "SELECT DISTINCT [Client Name] FROM [Execution Report$] WHERE [Employee Name] =" & Sheets

如果有人能帮上忙那就太好了

我想从单独的表格中提供单元格引用作为参数,在这里我指的是查询,而不是字符串“Arunraj S”,我需要从sheet1(“PDA”)的范围(“c3”)中提供引用

它在通过where查询提供直接字符串的同时检索良好

但是当我试图改变查询时,它抛出了语法错误,如下所示

 query = "SELECT DISTINCT [Client Name] FROM [Execution Report$] WHERE
 [Employee Name] =" & Sheets("PDA").Range(C3).value
这是我的密码:

Sub Pull_Data_from_Excel_with_ADODB()

    Dim cnStr As String
    Dim rs As ADODB.Recordset
    Dim query As String

    Dim fileName As String
    fileName = "C:\Users\nizamudeen.s\Desktop\PDA Template.xlsx"


    cnStr = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
               "Data Source=" & fileName & ";" & _
               "Extended Properties=Excel 12.0"

        query = "SELECT DISTINCT [Client Name] FROM [Execution Report$] WHERE [Employee Name] = 'Arunraj S';"


            Set rs = New ADODB.Recordset
    rs.Open query, cnStr, adOpenUnspecified, adLockUnspecified

        Cells.Clear
    Range("A2").CopyFromRecordset rs
    Dim cell As Range, i As Long
        With Range("A1").CurrentRegion
        For i = 0 To rs.Fields.Count - 1
            .Cells(1, i + 1).Value = rs.Fields(i).Name
        Next i
        .EntireColumn.AutoFit
    End With
End Sub

通常,员工的姓名是一个文本字符串。您应该能够将单引号(也称为“ticks”)与环绕整个SQL语句的双引号组合在一起,以便不必处理引号字符串中的引号

query = "SELECT DISTINCT [Client Name] FROM [Execution Report$] WHERE [Employee Name] LIKE '" & Sheets("PDA").Range(C3).value & "';"
对于Bob in Sheets(“PDA”)。范围(C3),其应为

SELECT DISTINCT [Client Name] FROM [Execution Report$] WHERE [Employee Name] LIKE 'Bob';

我通常使用LIKE运算符进行“模式匹配”,但出于所有目的,LIKE与equals是相同的。

您将查询作为字符串传递。现在,您的查询如下所示(假设单元格C3中的名称为
Tom Smith

SELECT DISTINCT [Client Name] FROM [Execution Report$] WHERE
 [Employee Name] = Tom Smith
看看这一点,您可能会发现它在SQL中会失败,因为它应该读取(注意名称周围的单引号):

因此,将
查询
声明更改为:

 query = "SELECT DISTINCT [Client Name] FROM [Execution Report$] WHERE
 [Employee Name] ='" & Sheets("PDA").Range(C3).value & "'"

这能解决问题吗?

你好,Jeeped,谢谢你的回复,我仍然收到错误消息,如“运行时错误'1004'”应用程序定义的错误或对象定义的错误--请执行必要的操作。你好,谢谢你的回复,我仍然收到错误消息“运行时错误'9':下标超出范围”“请check@Nizam我第二次看到它。你的
范围
语法也错了。它应该是
范围(“C3”)。值
(注意单元格周围的双引号)。如果你把它纳入我的初始建议,它应该会起作用。让我们知道。
 query = "SELECT DISTINCT [Client Name] FROM [Execution Report$] WHERE
 [Employee Name] ='" & Sheets("PDA").Range(C3).value & "'"