使用SQL将单个值存储在变量中选择

时间:2016-07-20 10:24:47

标签: sql vba excel-vba excel

我有以下vba代码。我正在使用MS Excel 2013.(我在此代码中也有一个插入语句,但我没有复制这个只是为了更好地突出我的问题)

Dim cn As Object
Dim cUserEmail As String
Dim strSqlmail As String
Dim rss As Object
Dim strConnection As String

Set cn = CreateObject("ADODB.Connection")
strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
    "Data Source=C:\ActionList.accdb"

strSqlmail = "SELECT [Email-Adress] FROM MyTable WHERE Name='Test'"

Set rss = cn.Execute(strSqlmail)
cUserEmail = rss.Fields(0).Name

此时它将列名称(Email-Adress)存储在我的变量中。在Access中运行查询将返回仅包含所需值的列。

我认为我和完成一样好,但我似乎无法找到如何获得价值。当我更改为rss.Field(1)时,它会给出一个错误,指出无法找到该项。

2 个答案:

答案 0 :(得分:2)

如果您使用的是ADO库,则Execute方法会返回RecordSet - 请参阅documentation

所以你需要:

Dim rsResult as Recordset
...
Set rsResult = cn.Execute(strSqlmail)
Do While Not rs.EOF
    Debug.Print rs!Email-Adress
    rs.MoveNext
Loop
rs.Close

因此,当您添加WHERE子句仅返回一行时,循环应该只迭代一次。无论输出到即时窗口的是什么,都应该分配给cUserEmail

答案 1 :(得分:0)

以下代码为我提供了所需的值:

Dim cn As Object
Dim cUserEmail As String
Dim strSqlmail As String
Dim rss As Object
Dim strConnection As String

Set cn = CreateObject("ADODB.Connection")
strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
    "Data Source=C:\ActionList.accdb"

strSqlmail = "SELECT [Email-Adress] FROM MyTable WHERE MyTable.[Name]='Test'"

Set rss = cn.Execute(strSqlmail)
cUserEmail = rss.Fields(0)