2016-07-14 66 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