51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2116|回复: 8
打印 上一主题 下一主题

[原创] 自己写的,QTP中的database基本操作函数,大伙指正~~

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2007-4-12 16:17:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Public Cnn

Set Cnn = CreateObject("ADODB.Connection")
'-----------------------------------------------------------------
'函数功能:连接数据库
'-----------------------------------------------------------------
Public Sub DBConnect(ByVal DBType,ByVal DBServer,ByVal DBUser,ByVal DBPass,ByVal DBName)
        On error resume Next
        Dim StrCon,rel

        Select Case DBType
                Case 0                        'Sql Server
                        StrCon =        "Provider=MSDASQL;Driver={SQL Server};Server="&DBServer&";Database="&DBName&";Uid="&DBUser&";Pwd="&DBPass&";"
                Case 1                        'Oracle
                        StrCon =        "Provider=MSDAORA.1;Data Source="&DBServer&";Password="&DBPass&";User ID="&DBUser&";Persist Security Info=True"
                Case 2                        'Sybase
                        StrCon =        "Driver={SYBASE SYSTEM 11};Srvr="&DBServer&";Uid="&DBUser&";Pwd="&DBPass&";Database="&DBName&";"
                Case 3                        'Access
                        StrCon =        "Driver={Microsoft Access Driver (*.mdb)};Dbq="&DBName&";Uid="&DBUser&";Pwd="&DBPass&";"
        End Select        

        Cnn.Open StrCon
        rel = chkDBError()
        If rel = true Then
                MsgBox "数据库连接失败,测试中止!"
                On Error GoTo 0
        Else
                Reporter.ReportEvent micPass,"数据库已建立连接! StrCon = " &strCon
        End If
End Sub

'----------------------------------------------------------------
'函数功能:检查数据库执行是否有错误发生
'返回值: true/false
'----------------------------------------------------------------
Public Function chkDBError()
        Dim ObjError
        If Cnn.Errors.Count > 0 Then
                For Each ObjError In Cnn.Errors
                        If objError.Number <> 0 Then
                                Reporter.ReportEvent micFail,数据库操作失败:" &objError.description
                                chkDBError = true
                        End If
                Next
        Else
                chkDBError = false
        End If
End Function

'----------------------------------------------------------------
'函数功能:执行sql
'返回值: -1,sql语句执行错误
'         0,查询sql没有有结果返回
'              >0,查询sql有结果时为结果集记录数,
'             非查询sql执行成功 ,值为1
'-----------------------------------------------------------------
Public Function ExecuteSql(ByVal sqlstr)
        On error resume next
        Dim rel,Rst
        Dim RstCol
        Dim i,j,n
       
        Set Rst =CreateObject("ADODB.Recordset")
        sqlstr = LTrim(sqlstr)

        If Left(sqlstr,6)="select" Then
                Rst.open sqlstr, Cnn

                If chkDBError() =  True Then
                        rel = -1
                        Reporter.ReportEvent micFail, "查询语句 "&sqlstr& "  发生错误!"
                Else
                   IF Rst.EOF THEN
                                rel = 0
                                Reporter.ReportEvent micWarning, "查询语句 "&sqlstr& "  无返回值!"
                        Else
                                i = 0
                                For each RstCol in Rst.Fields
                                        i = i+1
                                   datatable.AddSheet("SQL RecordSet").AddParameter RstCol.name,""
                Next
                                n=0
                                While not Rst.EOF
                                        n=n+1
                                        For j = 0  to i-1
                                                datatable.SetCurrentRow n
                        datatable.Value( Rst.Fields(j).name,"SQL RecordSet") =  Rst.Fields(j).value
                                        Next
                                        Rst.MoveNext
                                Wend
                               
                                rel =datatable.GetSheet("SQL RecordSet").GetRowCount
                                Reporter.ReportEvent  micPass,"查询语句 "&sqlstr& "  返回"&rel&"条结果,保存于datatable <SQL RecordSet>"
                        End if
                End If                
        Else
                Rst.open sqlstr, Cnn
                If chkDBError() =  True Then                
                        rel = -1
                        Reporter.ReportEvent micFail,"执行语句 "&sqlstr& "  发生错误!"
                Else        
                        rel = 1
                        Reporter.ReportEvent micPass,"执行语句 "&sqlstr& "  成功!"
                End If
        End If

    ExecuteSql=CInt(rel)
        Rst.close
End Function
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

  • TA的每日心情
    开心
    2016-2-27 08:48
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    2#
    发表于 2007-4-13 08:42:10 | 只看该作者
    谢谢楼主的无私奉献精神。如果能再添加些注释 就更完美了。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3#
    发表于 2007-4-13 10:02:25 | 只看该作者
    Reporter.ReportEvent micFail,数据库操作失败:" &objError.description
    ----
    Reporter.ReportEvent micFail,"数据库操作失败:" &objError.description

    ---------------------------------
    看完了  上面LZ有个小小失误  然后
            If Left(sqlstr,6)="select" Then -------- 为什么用select来作为SQL语句正错的判断呢
                    Rst.open sqlstr, Cnn
                    .............
            Else
                    Rst.open sqlstr, Cnn
                    .............
            End If

    跑一下再说   呵呵
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    4#
    发表于 2007-4-13 10:09:04 | 只看该作者
    看了一下,大概明白楼主写的,不过还没有跑过

    回复楼上的,我想LZ不是用来判断SQL的错误的,主要是用来区分不同的Message。
    是说当“select”的时候,应该Show出来的Message的内容是关于查询的,而其他时候则只要显示数据库执行的正确错误信息就可以了。
    个人理解,不知道是否如此
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    5#
    发表于 2007-4-13 10:31:58 | 只看该作者

    回复 #4 hekinwu 的帖子

    呵呵 仔细看了下 那个select判断的目的是
    判断这个SQL是有返回值的select查询语句  然后输出查询返回

    你是正解
    偶错了sdlkfj7
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    6#
     楼主| 发表于 2007-4-13 11:00:58 | 只看该作者
    自己写的比较乱,说明一下

    DBconnect初始化数据库连接,传入5个参数
       DBtype -数据库类型
       server,服务器名称
       user,用户
       pass,密码
       DBname,数据库名

    ChkDbError 用于检查数据库错误的,返回的ADO自己的错误描述

    ExcuteSql 执行sql用的

    执行select语句时,错误返回-1,查询无结果返回0,查询有数据返回结果条数,结果保存到datatable SQL RecordSet里
    执行其他语句        错误返回-1,正确返回1

    [ 本帖最后由 danmy 于 2007-4-13 11:05 编辑 ]
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    7#
    发表于 2007-4-13 15:06:55 | 只看该作者
    很好的贴子,支持一下!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    8#
    发表于 2007-4-20 16:32:20 | 只看该作者
    好贴,大力支持啊
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    9#
    发表于 2007-4-22 22:27:07 | 只看该作者
    俺竟也能看懂,呵呵!
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-16 00:36 , Processed in 0.088765 second(s), 28 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表