2014-10-16 44 views
0

我的代碼來檢索值如下:VBA從SQL服務器記錄值

Sub UploadData() 
Dim rs As ADODB.Recordset 
Set rs = New ADODB.Recordset 

Dim cn As ADODB.Connection 
Set cn = New ADODB.Connection 

Dim strConn As String 
Dim sql As String 

strConn = "PROVIDER=SQLOLEDB;DATA SOURCE=.\sql2000;INITIAL CATALOG=EquityDB;INTEGRATED SECURITY=sspi;" 

cn.Open strConn 

sql = "select * from EquityDB.dbo.table1 where field1 = '" & Replace(Range("d1").Value, "'", "''") & "'" 

rs.Open sql, cn, adOpenDynamic, adLockOptimistic 
    GetData = rs.Fields(0).Value 


If Not GetData = "" Then 

cn.Execute sql001 

Else 

cn.Execute sql002 

End If 

sql001是插入和sql002是一個更新

當我運行宏,我得到了錯誤說操作時,不允許記錄是開放的線路

rs.Open sql, cn, adOpenDynamic, adLockOptimistic 

如果我改變

If Not GetData = "" Then 

If Not GetData Is Null Then 

我得到錯誤說「所需的對象」與線

If Not GetData Is Null Then 

如何修復bug任何意見將是巨大的!

+0

1)你得到的實際錯誤是什麼以及哪條線導致它? 2)它應該是'如果不是空(GetData)然後' – 2014-10-16 15:10:02

+0

也解釋你試圖達到什麼。創建沒有記錄時創建新記錄並更新記錄或記錄時,它們是\他們被發現?我的猜測是更新部分出錯了。 – Barry 2014-10-16 15:13:43

+0

要測試null的VBA命令是IsNull(Object)。 – 2014-10-16 15:19:11

回答

2

爲了測試是否有任何被退回到您的記錄,而不是:

GetData = rs.Fields(0).Value  

If Not GetData = "" Then 

用途:

If not(rs.eof and rs.bof) then 

如果記錄不爲空,這將返回true。

+0

非常感謝大家!這非常有幫助! – user3344443 2014-10-16 15:56:40