我正在使用vbscript创建一个库,并使用scriptcontrol对象从vba调用这些例程。我正在尝试使用给定的sql作为参数创建一个记录集作为例程,如下所示
sub GetData(sql, byref retrst)
stADO = "Provider=SQLOLEDB.1;Persist Security Info=False;Initial
Catalog=CCMSProd;Data Source=sv-hfi-ccms;UID=vc;PWD=dw;"
cnconn as adoconnection
Set cnconn = CreateObject("ADODB.Connection")
cnconn.Open stADO
msgbox cnconn.ConnectionString
msgbox cnconn.state
With cnconn
.CommandTimeout = 0
Set retrst = .Execute(sql)
msgbox retrst.recordcount
End With
cnconn.close
end sub
并调用此例程如下
scr.Run "GetConnection", tempload, rst
但是我的记录集没有返回,尽管在vbscript中创建了连接和记录集 我需要帮助。
答案 0 :(得分:0)
您的脚本存在很多问题。我不打算进入每个人,但要注意记录集打开调用有更多参数。它们不是必需的,但默认值为游标类型的adForwardOnly,以及用于锁定的adLockReadOnly。使用默认值不会使您从记录集中获取记录计数,因此我提供的代码只显示记录集中第一条记录的值,以指示检索数据。
以下代码可以使用,但您需要根据自己的需要对其进行修改。 用于运行脚本的批处理文件:
GetRecordset.bat
cscript.exe /nologo GetRecordset.vbs
pause
要运行的脚本:
GetRecordset.vbs
Dim objADORecordset
Dim strDBTableName
On Error Resume Next
'*****Modify below to a table name in your database*****
strDBTableName = "SomeDBTableName"
Set objADORecordset = CreateObject("ADODB.Recordset")
If Err.Number = 0 Then
GetRecordset "SELECT * FROM " & strDBTableName, objADORecordset
With objADORecordset
If Not .BOF Then
.MoveFirst
WScript.Echo "Field 0: " & .Fields(0).Value
Else
WScript.Echo "No records in recordset"
End If
End With
Else
WScript.Echo "Unable to create ADO Recordset"
End If
set objADORecordset = Nothing
WScript.Quit
'*********************************************
Sub GetRecordset(astrSQLQuery, aobjRecordset)
Dim strOLEConnect
Dim strUserID
Dim strUserPW
Dim objADOConnection
On Error Resume Next
WScript.Echo "SQLQuery: " & astrSQLQuery
strOLEConnect = "Provider=SQLOLEDB.1;Persist Security Info=False;Initial Catalog=CCMSProd;Data Source=sv-hfi-ccms;UID=vc;PWD=dw;"
strUserID = "vc"
strUserPW = "dw"
Set objADOConnection = CreateObject("ADODB.Connection")
If Err.Number = 0 Then
objADOConnection.Open strOLEConnect, strUserID, strUserPW
If Err.Number = 0 Then
aobjRecordset.Open astrSQLQuery, objADOConnection
If Err.Number <> 0 Then
WScript.Echo "Recordset open failed ERROR=" & Err.Number
End If
Else
WScript.Echo "Connection open failed ERROR=" & Err.Number
End If
Else
WScript.Echo "ADO connection failed ERROR=" & Err.Number
End If
Set objADOConnection = Nothing
End Sub
我把它与你的代码类似,所以你可以理解它,但它应该真正创建并在ADORecordset之前打开ADO连接。您通常会打开连接,运行所有必需的查询并在关闭连接之前处理它们。对同一数据库的不同查询多次创建与同一数据库的新连接没有任何意义。它只会增加不必要的开销。我会留给你改进代码供你使用。