首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scriptcontrol对象返回记录集对象

Scriptcontrol对象返回记录集对象
EN

Stack Overflow用户
提问于 2017-07-29 02:52:53
回答 1查看 234关注 0票数 0

我正在使用vbscript创建一个库,并使用scriptcontrol对象从vba调用这些例程。我尝试使用给定的sql作为参数创建一个记录集作为例程,如下所示

代码语言:javascript
复制
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

并调用该例程,如下所示

代码语言:javascript
复制
          scr.Run "GetConnection", tempload, rst

但是我的记录集返回为nothing,即使连接和记录集是在vbscript中创建的。

我需要你的帮助。

EN

回答 1

Stack Overflow用户

发布于 2017-07-30 22:02:02

你的脚本有很多问题。我不会详细介绍每一个参数,但是要知道记录集open调用有更多的参数。它们不是必需的,但是对于游标类型,缺省值是adForwardOnly,对于锁定,缺省值是adLockReadOnly。使用默认值不会使您能够从记录集中获取记录计数,因此我提供的代码仅显示记录集中第一个记录的值,以指示数据已被检索。

https://support.microsoft.com/en-us/help/272067/how-to-get-a-record-count-from-a-sql-server-ce-recordset

下面的代码可以工作,但您需要修改它以适应您的使用。运行脚本的批处理文件:

GetRecordset.bat

代码语言:javascript
复制
cscript.exe /nologo GetRecordset.vbs
pause

要运行的脚本:

GetRecordset.vbs

代码语言:javascript
复制
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连接。您通常会打开连接,运行所有必需的查询,并在关闭连接之前对其进行处理。对于同一数据库的不同查询,多次创建到同一数据库的新连接是没有意义的。这只会增加不必要的开销。我将把改进代码的工作留给您来使用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45380494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档