|
3#
楼主 |
发表于 2006-2-5 16:59:29
|
只看该作者
多谢kai_top的帮助!
我想了很久,觉得把错误信息反馈到Action中再处理,其实是比较麻烦。所以我改了一下,用Sub过程,直接在此过程中将错误信息打印出来。这样做数据库的校验的时候,直接call这个方法就可以了,不用再对返回值做处理。不过还是要多谢kai_top的帮助。
修改后的代码是这样的:
- Sub DBCheck( sql,expectedValue(),LineName(),n )
- '传入参数说明:sql 查询的sql语句,
- ' expectedValue() 数据库校验的预计值
- ' LineName() 数据库表中的列名
- ' n 数组的长度,或者是想要对比的数据的个数
- Dim j,str 'j是一个标识,表示校验数据库是否成功
- j=0
-
- Set con=createobject("adodb.connection")
- 'con.open "Description=IBM_ODBC;DRIVER=SQL Server;SERVER=IBM;UID=sa;"&_"PWD=123456;APP=Quick Test Pro;WSID=IBM;DATABASE=IBM_table"
- 'access方式:con.open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=d:\test.mdb"
- 'Oracle方式:
- con.open "DRIVER={Microsoft ODBC for Oracle};SERVER="your server name";UID=protest;PWD=protest;"
- set rs=createobject("adodb.recordset")
- rs.open sql,con
- If rs.eof Then
- j=1
- reporter.ReportEvent 1,"校验数据库的值","查询无结果!"
- Else
- While (not rs.eof)
- For i=0 to n-1
- str=CStr(rs.Fields(LineName(i)).value)
- If str<>expectedValue(i) then
- j=j+1
- reporter.ReportEvent 1,"校验数据库的值"," 列"&LineName(i)&"的值为:"&str&",不等于预计值:"&checkValue(i)
- End If
- Next
- rs.movenext
- Wend
- End If
- If j=0 Then
- reporter.ReportEvent 0,"校验数据库的值","数据校验正确!"
- End If
- rs.close
- set rs=nothing
- con.close
- set con=nothing
- End Sub
复制代码
将上述的代码做成一个vbs文件,添加到资源文件中去
使用的时候就可以直接调用了
- call check()
- Sub check()
- Dim expectedVal(2),dblinename(2),sqlw
- expectedVal(0)=datatable("clientName",dtLocalSheet)
- expectedVal(1)=datatable("grade",dtLocalSheet)
- expectedVal(2)=datatable("gradecode",dtLocalSheet)
- dblinename(0)="s_name"
- dblinename(1)="n_grade"
- dblinename(2)="s_gradecode"
- sqlw="select * from bs_clientsetting where n_rdstatus=1 and s_code ='"&datatable("clientCode",dtLocalSheet)&"'"
- call DBCheck(sqlw,expectedVal,dblinename,3)
- End Sub
复制代码 |
|