51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 3029|回复: 11
打印 上一主题 下一主题

[求助] QTP database的查询

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2007-10-29 16:24:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我在本网站上看到  DataTable.GetSheet("Action1").GetParameter("from").ValueByRow(1) 可以查询出database的数据
但为什么我在添加语句 想查询 datatable 中的 数据的时候 不能成功
所 添加的 语句为
Dim b
b=DataTable.GetSheet("Action1").GetParameter("from").ValueByRow(1)  ' 我的数据的 列名为from  
msgbox b   ' 这个是我想查看如何 查询出来的值

不知道是什么地方写错了
希望 高手指出
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2007-10-29 16:26:47 | 只看该作者
Dim b
datatable.SetCurrentRow 1
b = datable.value("from","Action1")
msgbox b
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2007-10-29 16:58:43 | 只看该作者
DataTable.SetCurrentRow(1)
d =DataTable.RawValue("nihao","Global")    '  nihao 是我的 datatable的列名字
  msgbox d
这个也是可以查询书datatable 的 数据的
回复 支持 反对

使用道具 举报

该用户从未签到

4#
 楼主| 发表于 2007-10-29 18:16:10 | 只看该作者
现在我在想
现在在Globle 中有10 行的数据 在运行的时候要运行10次  我 要是想 要每次的运行的时候就叫他显示运行的是那行的 datatable中的数据的话  怎么做
是 直接用 for i=0 to 10
DataTable.SetCurrentRow(i)
d =DataTable.RawValue("nihao","Global")   
我想这样是可以的
但是没有试过
回复 支持 反对

使用道具 举报

该用户从未签到

5#
 楼主| 发表于 2007-10-30 11:19:54 | 只看该作者
我现在想 还用 没有其他别的 办法
希望知道的高手们 告知一下

还有 现在我想学在qtp 中的编程 从什么地方开始 入手
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2007-10-30 11:56:09 | 只看该作者
如果你的parameter是放在Global里的话就这样写就可以了,Global不用写循环语句.
DataTable.GetSheet("Global").GetParameter("Parameter").RawValue
回复 支持 反对

使用道具 举报

该用户从未签到

7#
发表于 2007-10-30 23:21:07 | 只看该作者
原帖由 alextowxm 于 2007-10-29 18:16 发表
现在我在想
现在在Globle 中有10 行的数据 在运行的时候要运行10次  我 要是想 要每次的运行的时候就叫他显示运行的是那行的 datatable中的数据的话  怎么做
是 直接用 for i=0 to 10
DataTable.SetCurrentRo ...


直接: msgbox DataTable(("nihao", dtGlobalSheet)
global会有循环的
回复 支持 反对

使用道具 举报

该用户从未签到

8#
 楼主| 发表于 2007-10-31 11:58:57 | 只看该作者
谢谢
我知道le原来是这样的 呀
就是说 在globle中的时候 是现在run是一样的 是便利数据库中的 所有的数据
那么在local(action ) 数据库中的数据就是值对本action 其作用 只能在本action中用
回复 支持 反对

使用道具 举报

该用户从未签到

9#
 楼主| 发表于 2007-10-31 14:57:28 | 只看该作者
原帖由 tonyzhangjie 于 2007-10-30 11:56 发表
如果你的parameter是放在Global里的话就这样写就可以了,Global不用写循环语句.
DataTable.GetSheet("Global").GetParameter("Parameter").RawValue

  

为什么在我加上这句话的时候 QTp 在run 的时候报错
不知道为什么
请指点一下
回复 支持 反对

使用道具 举报

该用户从未签到

10#
 楼主| 发表于 2007-10-31 14:59:49 | 只看该作者
由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表的第一列      


这个是我在网上找到的资料 共享一下
然后我在实践 一下看看是不是这样
回复 支持 反对

使用道具 举报

该用户从未签到

11#
 楼主| 发表于 2007-10-31 17:43:52 | 只看该作者
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 不是所有的 )
回复 支持 反对

使用道具 举报

该用户从未签到

12#
 楼主| 发表于 2007-10-31 17:48:06 | 只看该作者
我现在在想在setting 中的 run-> run on all rows  是设置的是Global的数据库中如何运行的
如过 现在选择 run one iteration only 的时候 也只是执行一行 就停止了
回复 支持 反对

使用道具 举报

本版积分规则

关闭

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

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

GMT+8, 2024-9-22 15:39 , Processed in 0.080829 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

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