51Testing软件测试论坛

标题: 自己写的,QTP中的database基本操作函数,大伙指正~~ [打印本页]

作者: danmy    时间: 2007-4-12 16:17
标题: 自己写的,QTP中的database基本操作函数,大伙指正~~
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
作者: walker1020    时间: 2007-4-13 08:42
谢谢楼主的无私奉献精神。如果能再添加些注释 就更完美了。
作者: kevin_swpi    时间: 2007-4-13 10:02
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

跑一下再说   呵呵
作者: hekinwu    时间: 2007-4-13 10:09
看了一下,大概明白楼主写的,不过还没有跑过

回复楼上的,我想LZ不是用来判断SQL的错误的,主要是用来区分不同的Message。
是说当“select”的时候,应该Show出来的Message的内容是关于查询的,而其他时候则只要显示数据库执行的正确错误信息就可以了。
个人理解,不知道是否如此
作者: kevin_swpi    时间: 2007-4-13 10:31
标题: 回复 #4 hekinwu 的帖子
呵呵 仔细看了下 那个select判断的目的是
判断这个SQL是有返回值的select查询语句  然后输出查询返回

你是正解
偶错了sdlkfj7
作者: danmy    时间: 2007-4-13 11:00
自己写的比较乱,说明一下

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 编辑 ]
作者: lionel319    时间: 2007-4-13 15:06
很好的贴子,支持一下!
作者: jacky9947    时间: 2007-4-20 16:32
好贴,大力支持啊
作者: vacation9    时间: 2007-4-22 22:27
俺竟也能看懂,呵呵!




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2