ChanJian910 发表于 2009-11-30 17:47:48

如何在一个Action内执行多个SQL语句?

代码1:将查询字段设为常量               
                        LoginUserName="吴静"
                        SupplyExportCodeName="需求09110000149"
       
                        Dim con
                        Dim conset
                        Dim rs
                        Dim sql

                        Dim con2
                        Dim conset2
                        Dim rs2
                        Dim sql2
                        If (UseCase="代管物资出库") Then


                        '//建立连接
                        Set con=createobject("adodb.connection")
                        conset="MSDASQL.1;Persist Security Info=False;User ID=sa;PWD=1111;Data Source=datasource_gzmmis;Initial Catalog=gzscene"

                        '//打开数据源链接
                        con.open conset

                        '//建立空的记录集
                        Set rs=createobject("adodb.recordset")

                        '//设置SQL语句
                        msgbox SupplyExportCodeName
                        sql="use gzscene select SupplyExportCode from im_supplyexport where stockapplycode like'%"+SupplyExportCodeName+"%' "

                        '//打开记录集
                        rs.open sql,con,1,2
                        rs.Movefirst
                        SupplyExportCodeValue=rs("SupplyExportCode").value

                        msgbox SupplyExportCodeValue

                        End If


                        '//建立连接
                        Set con2=createobject("adodb.connection")
                        conset2="MSDASQL.1;Persist Security Info=False;User ID=sa;PWD=1111;Data Source=datasource_gzmmis;Initial Catalog=gzscene"
                        Set rs2=createobject("adodb.recordset")

                       
                        '//打开数据源链接
                        con2.open conset2

                        msgbox "LoginUserName="+LoginUserName

                        sql2="use gzscene select PWD from S_USER where UNAME like'%"+LoginUserName+"%' "
                        rs2.open sql2,con,1,2
                        rs2.Movefirst

                        LogPwd=rs2("PWD").value

                        msgbox LogPwd


代码2:将查询字段设为变量,而变量由excel提供

                        LoginUserName=bsSheet.Cells(2,3)
                        SupplyExportCodeName=bsSheet.Cells(2,2)

                        Dim con
                        Dim conset
                        Dim rs
                        Dim sql

                        Dim con2
                        Dim conset2
                        Dim rs2
                        Dim sql2
                        If (UseCase="代管物资出库") Then


                        '//建立连接
                        Set con=createobject("adodb.connection")
                        conset="MSDASQL.1;Persist Security Info=False;User ID=sa;PWD=1111;Data Source=datasource_gzmmis;Initial Catalog=gzscene"

                        '//打开数据源链接
                        con.open conset

                        '//建立空的记录集
                        Set rs=createobject("adodb.recordset")

                        '//设置SQL语句
                        msgbox SupplyExportCodeName
                        sql="use gzscene select SupplyExportCode from im_supplyexport where stockapplycode like'%"+SupplyExportCodeName+"%' "

                        '//打开记录集
                        rs.open sql,con,1,2
                        rs.Movefirst
                        SupplyExportCodeValue=rs("SupplyExportCode").value

                        msgbox SupplyExportCodeValue

                        End If


                        '//建立连接
                        Set con2=createobject("adodb.connection")
                        conset2="MSDASQL.1;Persist Security Info=False;User ID=sa;PWD=1111;Data Source=datasource_gzmmis;Initial Catalog=gzscene"
                        Set rs2=createobject("adodb.recordset")

                       
                        '//打开数据源链接
                        con2.open conset2

                        msgbox "LoginUserName="+LoginUserName

                        sql2="use gzscene select PWD from S_USER where UNAME like'%"+LoginUserName+"%' "
                        rs2.open sql2,con,1,2
                        rs2.Movefirst

                        LogPwd=rs2("PWD").value

                        msgbox LogPwd

问题描述:如果单独执行代码1,是成功的,执行代码2时此时执行到rs2.open sql2,con,1,2的时候就会提示”参数类型不正确,或不在可以接受的范围之内,或与其他参数冲突“,请问我将两个sql即:sql,sql2z放在同一个Action里面该如何处理?
PS:代码2中的两个LoginUserName等是放在excel里面,且存在循环

[ 本帖最后由 walker1020 于 2009-12-1 10:15 编辑 ]

walker1020 发表于 2009-12-1 10:19:09

建议楼主 直接 在 PL/SQL 里面执行 你说的sql,sql2,看看那两个SQL 语句是否有问题。 当然,你需要先用SQL语句把代码1和代码2实现出来。

dftx511619 发表于 2009-12-1 10:24:09

好乱啊, 建议楼主 把连接数据库, 获取数据, 断开连接
都写成 公共函数吧, 这样方便!

skyzhu 发表于 2009-12-1 12:11:12

送楼主了,细节自己调整
connect:连接
sql:查询SQL
ReturnParamArray:需要返回的字段名称
Function SQL_select(connect,sql,ReturnParamArray)
    On Error Resume Next
    Dim ReturnValue(50,1000)
    Set cnn =CreateObject ("adodb.connection")
    cnn.open = connect
    Set res =CreateObject ("adodb.recordset")
    'sql = "select * from td.USERS"
    'sql = "EXEC BUG_Statistics_by_User 'xx','xx','xxxx'"
    res.open sql,cnn
    res.MoveFirst
    If Err Then
      'MsgBox "数据库查询错误"
      Exit Function
    End If
    Dim i,j
    Do While Not res.EOF
      For i = 0 To UBound(ReturnParamArray)
            ReturnValue(i,j) = res.fields(ReturnParamArray(i))
'            If Err Then
'                ReturnValue(i,j) = ""
'                Err.Clear
'            End If
      Next
      j = j + 1
      res.MoveNext
    Loop
    SQL_select = ReturnValue
    res.close
    Set res = Nothing
    cnn.close
    Set cnn = Nothing
End Function

hsjzfling 发表于 2009-12-1 13:12:13

use gzscene
这段才是根本原因,ADO语句是不能使用use关键字的,只能将库名gzscene写到连接字符串中
页: [1]
查看完整版本: 如何在一个Action内执行多个SQL语句?