51Testing软件测试论坛

标题: QTP database的查询 [打印本页]

作者: alextowxm    时间: 2007-10-29 16:24
标题: QTP database的查询
我在本网站上看到  DataTable.GetSheet("Action1").GetParameter("from").ValueByRow(1) 可以查询出database的数据
但为什么我在添加语句 想查询 datatable 中的 数据的时候 不能成功
所 添加的 语句为
Dim b
b=DataTable.GetSheet("Action1").GetParameter("from").ValueByRow(1)  ' 我的数据的 列名为from  
msgbox b   ' 这个是我想查看如何 查询出来的值

不知道是什么地方写错了
希望 高手指出
作者: danmy    时间: 2007-10-29 16:26
Dim b
datatable.SetCurrentRow 1
b = datable.value("from","Action1")
msgbox b
作者: alextowxm    时间: 2007-10-29 16:58
DataTable.SetCurrentRow(1)
d =DataTable.RawValue("nihao","Global")    '  nihao 是我的 datatable的列名字
  msgbox d
这个也是可以查询书datatable 的 数据的
作者: alextowxm    时间: 2007-10-29 18:16
现在我在想
现在在Globle 中有10 行的数据 在运行的时候要运行10次  我 要是想 要每次的运行的时候就叫他显示运行的是那行的 datatable中的数据的话  怎么做
是 直接用 for i=0 to 10
DataTable.SetCurrentRow(i)
d =DataTable.RawValue("nihao","Global")   
我想这样是可以的
但是没有试过
作者: alextowxm    时间: 2007-10-30 11:19
我现在想 还用 没有其他别的 办法
希望知道的高手们 告知一下

还有 现在我想学在qtp 中的编程 从什么地方开始 入手
作者: tonyzhangjie    时间: 2007-10-30 11:56
如果你的parameter是放在Global里的话就这样写就可以了,Global不用写循环语句.
DataTable.GetSheet("Global").GetParameter("Parameter").RawValue
作者: gy21st    时间: 2007-10-30 23:21
原帖由 alextowxm 于 2007-10-29 18:16 发表
现在我在想
现在在Globle 中有10 行的数据 在运行的时候要运行10次  我 要是想 要每次的运行的时候就叫他显示运行的是那行的 datatable中的数据的话  怎么做
是 直接用 for i=0 to 10
DataTable.SetCurrentRo ...


直接: msgbox DataTable(("nihao", dtGlobalSheet)
global会有循环的
作者: alextowxm    时间: 2007-10-31 11:58
谢谢
我知道le原来是这样的 呀
就是说 在globle中的时候 是现在run是一样的 是便利数据库中的 所有的数据
那么在local(action ) 数据库中的数据就是值对本action 其作用 只能在本action中用
作者: alextowxm    时间: 2007-10-31 14:57
原帖由 tonyzhangjie 于 2007-10-30 11:56 发表
如果你的parameter是放在Global里的话就这样写就可以了,Global不用写循环语句.
DataTable.GetSheet("Global").GetParameter("Parameter").RawValue

  

为什么在我加上这句话的时候 QTp 在run 的时候报错
不知道为什么
请指点一下
作者: alextowxm    时间: 2007-10-31 14:59
由QTP自动生成的语句是这样的:
DataTable("Col", dtLocalSheet)
DataTable("Col", dtGlobalSheet)
其中,dtLocalSheet就是当前Action的DataTable,dtGlobalSheet就是Global的DataTable,Col是列名
还有很多写法,比如
DataTable("Col", "Action2")
就是读取Action2的Col列。
你完全可以读取另一个Action的DataTable,而不需要跨Action传递变量,使用DataTable比变量更方便,因为结束后能在Result里看到运行时的值
你可以在一个Action里读取另外一个Action的列,但是要注意另外一个Action的当前行
比如你在Action1里读取Action2的某列,如果Action1运行到第二行,你读取的Action2还是第一行的数据,解决办法就是写上这句:
DataTable.GetSheet("Action2").SetCurrentRow(2)
你也可以用GetCurrentRow来获取Action1的行,然后再用SetCurrentRow来保持两个Action的当前行一致:
CurrRow = DataTable.GetSheet("Action1").GetCurrentRow
DataTable.GetSheet("Action2").SetCurrentRow(CurrRow)
还有一种写法:
DataTable(1, "Action2")
这样就是读取Action2的第一列,不管第一列叫什么名字,都能读
这样就很方便,比如:
For i = 1 To 10
        MsgBox DataTable(i, "Action2")
Next
这样就能循环读取Action2的1~10列了
同样,表也可以用数字代替:
DataTable(1, 2)
这样就是读取第二个Action表的第一列      


这个是我在网上找到的资料 共享一下
然后我在实践 一下看看是不是这样
作者: alextowxm    时间: 2007-10-31 17:43
global 是全局的数据表,local table只是某个动作的本地数据表. 选择global,global中有多少行数据,qtp就会执行多少次. local action 只是全局中的一个部分,当然只是执行一次了
现在在我的QTp中里边有action1和action2 两个action现在分别在两个action 中添加datatable (10hang )
现在action1-> 右键 (Action call properties..)-> run (选择Run on all rows ) 这样
在run的时候 我就可以看到 action1 便利的所有的 datatable的 所有的行(10也就是说action1 贝执行了10 次)以后在去执行action2 (这个原理和global数据的原理是一样的 ,只是执行的是本action 不是所有的 )
作者: alextowxm    时间: 2007-10-31 17:48
我现在在想在setting 中的 run-> run on all rows  是设置的是Global的数据库中如何运行的
如过 现在选择 run one iteration only 的时候 也只是执行一行 就停止了




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