51Testing软件测试论坛

标题: 连接ORACLE 我要装ORACLE ADD-IN 吗 [打印本页]

作者: fs_ivy    时间: 2006-7-3 17:50
标题: 连接ORACLE 我要装ORACLE ADD-IN 吗
Dim Cnn
Set Cnn = CreateObject("ADODB.Connection")
Cnn.ConnectionString = "Provider=OraOLEDB.Oracle.1;Data Source=oracletest;Password=nhgtfctest001;User ID=nhgtfc001;Persist Security Info=True"

Cnn.Open
If Cnn.State = 0 Then
     Reporter.ReportEvent micFail, "testing", "连接数据库失败"
else
     Reporter.ReportEvent micPass, "testing",   "连接数据库成功"
End If

'-----------我定义了ODBC连接,ODBC的数据源名是ORACLETEST,测试ODBC连接也通过,但出现“无法处理服务名”,我要装ORACLE ADD-IN 吗?
作者: xiaonan    时间: 2006-7-3 17:58
只是连接数据库的话,我想不需要插件的.参考一下这段代码
Dim res,cmd,sql
Set Res=createobject("adodb.recordset")
Set Cmd=createobject("adodb.command")
Cmd.activeconnection="Provider=SQLOLEDB.1;Password=111111;Persist Security Info=True;User ID=sa;Initial Catalog=xhq;Data Source=192.168.191.142"
Cmd.CommandType = 1
sql="select name from company where (id=1)"
Cmd.CommandText = sql
Set res = Cmd.Execute()
Set res = nothing
Set cmd.ActiveConnection = nothing
Set Cmd= nothing
作者: fs_ivy    时间: 2006-7-3 18:05
改DRIVER为DRIVER={Oracle in OraHome92 }就可以了,

再问取数据表的内容也不需ORACLE -ADD IN,什么时候要呢?
作者: xiaonan    时间: 2006-7-3 18:38
在录制识别ORACLe控件的时候,需要ORACLE -ADD IN,
作者: aprina    时间: 2006-7-3 21:10
Data Source=oracletest中的"oracletest"需要在tnsnames.ora中定义好。
Provider 要设置为OraOLEDB.这是连接oracle server的.
定义ODBC 数据源时需要driver为: oracle in OraHome92 或 microsoft ODBC for oracle

另外xiaonan版主的脚本中: Provider=SQLOLEDB.1, 是连接SQLSERVER的.
作者: xiaonan    时间: 2006-7-4 08:41
对,我的那段代码是连接SQL的,因为手头上没oracle来连.其实原理都是一样的,我只是给大家一点参考.
作者: aprina    时间: 2006-7-5 13:20
Dim res,cmd,sql
Set Res=createobject("adodb.recordset")
Set Cmd=createobject("adodb.command")
Cmd.activeconnection="Provider=SQLOLEDB.1;Password=111111;Persist Security Info=True;User ID=sa;Initial Catalog=xhq;Data Source=192.168.191.142"
Cmd.CommandType = 1
sql="select name from company where (id=1)"
Cmd.CommandText = sql
Set res = Cmd.Execute()
Set res = nothing
Set cmd.ActiveConnection = nothing
Set Cmd= nothing
问一下xiaonan版主的这段脚本中,如果希望增加一个检查点,如:当name='admin'的时候,在result report中给出pass的报告,怎样写呢?
我试着写了几个,总报“在对应所需名称或序数的集合中,未找到项目。" 的错误,希望帮助给出正确的脚本,多谢了。
作者: xiaonan    时间: 2006-7-5 13:57
If name="admin" Then
  Reporter.ReportEvent 0, "pass","pass"
else
  Reporter.ReportEvent 1, "fail","fail"
End If

[ 本帖最后由 xiaonan 于 2006-7-5 14:57 编辑 ]
作者: aprina    时间: 2006-7-5 14:38
增加这一段后,不论name是否='admin',都返回到成功.
作者: xiaonan    时间: 2006-7-5 14:51
你把name值取出来看看,然后单步调试,看看原因
作者: aprina    时间: 2006-7-5 15:25
是这样的,
1. 如果这样写检查语句,在If res.fields(seat_id)=0 Then这行会报“在对应所需名称或序数的集合中,未找到项目。"
sql="select seat_id from fm_seat where seat_id=3086"
Cmd.CommandText = sql
Set res = Cmd.Execute(sql)
If res.fields(seat_id)=0 Then
   Reporter.ReportEvent micpass, "test","output"
else
  Reporter.ReportEvent micfail, "testl","fail"
End If

2.如果按下面这样改写if 语句就会直接pass.但是实际上这个语句:select seat_id from fm_seat where seat_id=3086(查出来的seat_id肯定是3086),所以我觉得应该每次都应该返回失败的。
If seat_id=1 Then
   Reporter.ReportEvent micpass, "test","output"
else
  Reporter.ReportEvent micfail, "testl","fail"
End If
作者: xiaonan    时间: 2006-7-5 16:14
1   res("seat_id")或者直接res(0)这样来取字段值
2   你不能把字段名直接当变量使用啊

[ 本帖最后由 xiaonan 于 2006-7-5 16:16 编辑 ]
作者: aprina    时间: 2006-7-5 16:22
res.fields("seat_id") =0 与res(0)=0 ,都报同样的错误: general run error.
作者: xiaonan    时间: 2006-7-5 16:29
Dim res,cmd,sql
Set Res=createobject("adodb.recordset")
Set Cmd=createobject("adodb.command")
Cmd.activeconnection="Provider=SQLOLEDB.1;Password=111111;Persist Security Info=True;User ID=sa;Initial Catalog=xhq;Data Source=192.168.191.142"
Cmd.CommandType = 1
sql="select seat_id from fm_seat where seat_id=3086"
Cmd.CommandText = sql
Set res = Cmd.Execute()
是res("seat_id"),还有你单步调试一下啊,具体是哪句出错
作者: xiaonan    时间: 2006-7-5 16:30
还有要转换一下类型都用整形后再比较
作者: aprina    时间: 2006-7-5 17:47
已经解决了,谢谢!把解决过程跟大家沟通一下
1〉如果num=res.fields("seat_id"),if num>0 处会报类型不匹配
2〉如果用if int(num)>0, 报语法错误
在QTP中,dim num as int ,dim num as integer时,报 The test run cannot continue duo to a syntax error

后来发现int(num) ,dim num as int 是VB的用法,可能在Expert View中的vb script村在一点小差异,才会发生上面的错误。

最终是用Cint(res.fields("seat_id"))>0 解决了。

另外:前面报那个““在对应所需名称或序数的集合中,未找到项目。" 错误,是由于sql="select seat_id from fm_seat where seat_id=3086" 这个语句没有记录返回。

呵呵,因为初次调试,走了很多弯路。所以今后如果各位版主们能支持更仔细些。再次感谢各位。


作者: lindongfeng    时间: 2006-8-8 11:17
直接用系统自带的驱动程序就可以了,很快就把连接字符串建立起来了。何必手写呢。




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