2016-07-14 111 views
0

我从SQL Server获得以下VBA查询,只返回一个结果。我的问题是如何阅读它。到目前为止,我找到了一种方法来做到这一点,但我不想使用它。使用VBA从SQL Server获取查询结果无CopyFromRecordSet

Dim rsData    As Object 
Set rsData = CreateObject("ADODB.Recordset") 

With rsData 
    .ActiveConnection = cnLogs 
    .Open "USE DB SELECT [VersionNumber] FROM Main WHERE [IsLastCurrent] = 1" 
End With 

解决方案我不希望使用:

Cells(1, 1).CopyFromRecordset rsData 
+0

这将有助于知道为什么你不想使用CopyFromRecordset – aucuparia

+0

因为使用CopyFromRecordset我应该把它写在某个地方的表上,我只想取值并为它指定一个变量。 – Vityata

+1

'myVar = rsData.Fields(“VersionNumber”)'你还需要确保rsData中的数据是第一个 – Horaciux

回答

1

您可以通过记录使用Fields访问一个Recordset记录中的值属性。当你第一次打开一个记录集时,它或者是空的(在这种情况下,recordset.BOFrecordset.EOF都是真的),或者它指向集合中的第一条记录(在这种情况下,recordset.BOFrecordset.EOF都是假的)。使用recordsetMoveFirstMoveLastMoveNextMovePrevious方法

rsData.Fields("VersionNumber").Value 

,您可以遍历记录(如果你有一个以上的):然后,使用(例如)访问数据在记录目的。

+0

> Debug.Print rsData.Fields(“VersionNumber”)。Value Vityata

1

尝试在SQL命令这一变化:

With rsData 
    .ActiveConnection = cnLogs 
    .Open "USE DB; SELECT [VersionNumber] FROM Main WHERE [IsLastCurrent] = 1;" 
End With 

If (rsData.EOF = False) OR (rsData.BOF = False) Then 
'there are recordset 
myVar= rsData.Fields(0).value 
End If 

rsData.Close 
+0

谢谢。实际上,问题出在用户的伺服器上。我只是公开的,并且由于某种原因它不想复制所有的字段。我增加了更多的特权,并开始工作。 – Vityata