2013-08-20 231 views
0

我們正在努力改變現有的Excel表單以向我們的SLQ服務器提供記錄。Excel 2003 VBA寫入SQL Server 2000 ADO

我們已經成功使用代碼清理並使用DSN和ODBC將數據寫入服務器。

scn = dsn=ODBC123

我們的目標用戶(至極的有很多)是使用2003 Excel和每個終端上的ODBC連接是不實際的。

這是我第一次嘗試使用ADODB。

我正在跳閘我的badSQL消息,但沒有收到服務器的錯誤,直到我添加了UID和Pass。

現在我越來越 運行時錯誤'-2147467559(80004005): 自動化錯誤 未指定的錯誤,你

將一個精品女裝和/或先生們看一看,並提供一些指導做好?

Dim cn As ADODB.Connection 
Dim rs As ADODB.Recordset 
Dim ssql As String 

Set cn = New ADODB.Connection 
Set rs = New ADODB.Recordset 

Const scn As String = "Provider=SQLOLEDB.1;Integrated Security=SSPI;" & _ 
    "Persist Security Info=False;" & _ 
    "Initial Catalog="DB on Server";" & _ 
    "Data Source="Server Name" & _ 
    "User ID=Form;Password=nope;" 

ssql = "sql statment that writes a record to a table using info in the excel form," & _ 
" writen in vb that has worked through an odbc" 

With cn 
    .CursorLocation = adUseClient 
    .Open scn 
    .CommandTimeout = 0 
    Set rst = .Execute(ssql) 
End With 
    On Error GoTo badsql: 

rs.Open ssql, cn, adOpenStatic, adLockOptimistic 
On Error GoTo badsql: 

rs.Close 
cn.Close 

Set rs = Nothing 
Set cn = Nothing 


MsgBox ("This record was updated in the database and documented for" & _ 
" processing. Please close this workbook.") 


badsql: 
    MsgBox ("This record was not processed please resubmit.") 
    Exit Sub' 

回答

1

我們似乎有兩種rstrsRecordset對象。我沒有在提供的代碼中看到rst的聲明。

在任何情況下,ssql中的查詢字符串都會運行兩次。一旦執行,結果(如果有)返回rst。另一次當rs被打開。

你可能只需要運行一次查詢字符串和,因爲它似乎是一個INSERT型查詢,您可能需要使用cn.Execute而非rs.Open

+0

感謝Barrowc我最終改變代碼頗有幾分但第一個和rs是一個問題。 –