51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

12
返回列表 发新帖
楼主: lzz
打印 上一主题 下一主题

pls hellp me,不能正确读取数据表中的内容

[复制链接]

该用户从未签到

21#
 楼主| 发表于 2005-6-22 13:57:05 | 只看该作者
我仔细分析了一下,发现其实大家都没错,只是用的方法不同,导致的结果也不一样。
Window("Flight Reservation").WinEdit("Name:").Set DataTable("name", dttestSheet)
Window("Flight Reservation").WinEdit("Name:").Set DataTable("name", dtGlobalSheet)
// 我相信在global工作表中可以正确执行,但换在test工作表中就不行
tempData=DataTable.GetSheet("51sheet").GetParameter("name").Value //用这种方法是可以正确读取某行某个参数的值
回复 支持 反对

使用道具 举报

该用户从未签到

22#
发表于 2005-6-22 14:20:53 | 只看该作者
概念不清楚的、我还是建议最好不要用
dttestSheet
dtGlobalSheet
而且,最好不要用Global的sheet。

其实,呵呵,能永就行了,能达到你的使用目的就行了。
这个东西做的可能就问题,所以理解起来也难免有问题。还是别理解了。呵呵。
回复 支持 反对

使用道具 举报

该用户从未签到

23#
发表于 2005-6-22 14:28:59 | 只看该作者
lzz:
分开写。
a)        datatable.getsheet("sportCaption") //不清楚这行有什么作用
b)        datatable.setcurrentrow(i) // 这是将当前行设置为第i行在global运行数据表中,而我这里希望的并不是这样。


其实我也不知道为什么这样写就对。呵呵

按我的理解,datatable就好像你打开的excel文件。默认的是打开第一个sheet的
你可以做datatable.setcurrentrow(i)
而你datatable.getsheet("sportCaption") 以后,
你就能选到这个sheet上,并且对它进行操作。比如setcurrentrow

不知道这么理解对不对,
如果这么理解正确的话,呵呵,那可真要小心哦。

连起来的按说应该也对的啊。不知道你的怎么不对了。

现在对了么??能取下面行的值么?

[ Last edited by lovetest6 on 2005-6-22 at 14:32 ]
回复 支持 反对

使用道具 举报

该用户从未签到

24#
发表于 2005-6-24 10:44:32 | 只看该作者
这个问题到底解决了没有呢,我按照这样做也出现只执行1行的现象呢
回复 支持 反对

使用道具 举报

该用户从未签到

25#
发表于 2005-6-24 13:11:22 | 只看该作者
问问楼主不就知道是否解决了嘛。呵呵:)
还不清楚的去别的贴上找吧。
回复 支持 反对

使用道具 举报

该用户从未签到

26#
 楼主| 发表于 2005-6-24 16:34:19 | 只看该作者
在大家的热心帮助下,按照lovetest6所说的方法,问题已经解决了.
回复 支持 反对

使用道具 举报

该用户从未签到

27#
发表于 2005-6-24 17:09:47 | 只看该作者
datatable.getsheet("sportCaption")
datatable.setcurrentrow(i)

分开写的这种方法么??怎么我的还是不行,再试试
回复 支持 反对

使用道具 举报

该用户从未签到

28#
发表于 2005-6-24 17:48:59 | 只看该作者
呵呵,谢谢各位哦。
michelle_happy:如果还不行,就加我msn吧,或者站内短信也行:)
回复 支持 反对

使用道具 举报

该用户从未签到

29#
发表于 2005-6-25 10:21:53 | 只看该作者
Originally posted by michelle_happy at 2005-6-24 05:09 PM:
datatable.getsheet("sportCaption")
datatable.setcurrentrow(i)

分开写的这种方法么??怎么我的还是不行,再试试

我看了一圈。。怎么看不明白。。。
为什么要搞这么复杂呢。。。
如果只是为了取表。。
我是用类似下面的方法。。

DataTable.AddSheet("name")
DataTable.ImportSheet "C:\name.xls" ,1 ,"name"
msgbox DataTable.GetSheet ("name").GetCurrentRow
DataTable.GetSheet("name").SetNextRow
msgbox DataTable.GetSheet ("name").GetCurrentRow
DataTable.GetSheet("name").SetCurrentRow(3)
msgbox DataTable.GetSheet ("name").GetCurrentRow

有什么不好呢?
=_=b
回复 支持 反对

使用道具 举报

该用户从未签到

30#
发表于 2005-6-25 10:33:00 | 只看该作者
Originally posted by lzz at 2005-6-21 11:59 AM:
请大家帮我解决一下下面的问题.
我要新增一项资料,把新增资料中要用到的数据放在一个excel表中,然后在运行的时候导入该execl表。然后用一个循环分别读取excel表中的数据。为什么我运行的时候只能读取第一行的数 ...

看了不太明白
dtsportCaptionSheet
这个id从哪里得到的?
dtGlobalSheet 是全局表的默认id把?
自己添加表的id也是这个格式么/
Originally posted by QA_BAY at 2005-6-21 11:59 AM:
datatable.SetNextRow-------加这一行,是想看一下有没有取到下一行的数据,结果没有

这句还是有问题的
我觉得你应该用
datatable.GlobalSheet.SetNextRow
虽然我没有试过。。但是我觉得你这里不应该这样写的

即使默认中间没有制定sheet。。就会指到GlobalSheet。你也应该写上这么一句。。
另外
datatable.ImportSheet "C:\name.xls" ,1,Global
这里后面用到的是表名。。事实上后面你又用到dtGlobalSheet。。
起码从看上面。。实在挺混乱的。为什么不用一样的呢。。。
我总是觉得。简单就是最好。。。
能统一就统一。。包括格式。变量。能写清楚就写清楚地好。。
比如
datatable.getsheet("sportCaption")
datatable.setcurrentrow(i)
这种用法。。。能避免最好还是少用的八。。。

[ Last edited by dfinger on 2005-6-25 at 10:39 ]
回复 支持 反对

使用道具 举报

该用户从未签到

31#
发表于 2005-6-25 22:46:23 | 只看该作者
不怕用错,怕的是概念不正确,如果概念不正确,那么不出错也只是暂时的。呵呵:)

我在datatable和dtsheet 的帖中详细的写了一下,你看看有什么不正确的,或者要补充的,帮忙加一下哦:)
回复 支持 反对

使用道具 举报

该用户从未签到

32#
发表于 2005-6-27 10:11:19 | 只看该作者
dfinger分析得很正确
现在已经更正过来了.
真是受益非浅
回复 支持 反对

使用道具 举报

该用户从未签到

33#
发表于 2005-6-27 10:48:44 | 只看该作者
偶弄成功了,那天不成功估计是录制的问题,但是直接就是写的datatable.GetSheet("temp").SetCurrentRow(i)
没有分为2行写啊。

偶查了一下帮助,dtsportCaptionSheet这种写法好像不对头,只有dtLocalSheet和dtGlobalSheet. 其他名字的Sheet用index,或者直接用 “sheet名”
回复 支持 反对

使用道具 举报

该用户从未签到

34#
发表于 2007-1-13 19:41:25 | 只看该作者

回复 #33 michelle_happy 的帖子

你说的很对,为避免大家看的晕头转向,我把自己做的例子贴出来,方便大家查看。

SystemUtil.Run "C:\Program Files\Mercury Interactive\QuickTest Professional\samples\flight\app\flight4a.exe","","C:\Program Files\Mercury Interactive\QuickTest Professional\samples\flight\app\","open"
Dialog("Login").WinEdit("Agent Name:").Set "lily"
Dialog("Login").WinEdit("Password:").SetSecure "45a8b17dacf40124f0d69b9493df0dd3adff1d48"
Dialog("Login").WinButton("OK").Click


Datatable.AddSheet("TicketName")
Datatable.ImportSheet "C:\ticket_name.xls",1,"TicketName"
Dim i,rowcount
i=0
rowcount=Datatable.GetSheet("TicketName").getrowcount
reporter.ReportEvent 2,"there are "&rowcount,"row in this data table"
Do while i<rowcount
i=i+1
Datatable.Getsheet("TicketName").setcurrentrow(i)
Window("Flight Reservation").WinButton("Button").Click
Window("Flight Reservation").ActiveX("MaskEdBox").Type "011907"
Window("Flight Reservation").WinComboBox("Fly From:").Select "Denver"
Window("Flight Reservation").WinComboBox("Fly To:").Select "London"
Window("Flight Reservation").WinButton("FLIGHT").Click
Window("Flight Reservation").Dialog("Flights Table").WinList("From").Select "20260   DEN   08:12 AM   LON   03:23 PM   AA     $112.20"
Window("Flight Reservation").Dialog("Flights Table").WinButton("OK").Click
Window("Flight Reservation").WinEdit("Name:").Set DataTable("Name", 3)   
Window("Flight Reservation").WinEdit("Tickets:").SetSelection 0,1
Window("Flight Reservation").WinEdit("Tickets:").Set DataTable("Tickets", 3)
Window("Flight Reservation").WinRadioButton("Business").Set
Window("Flight Reservation").WinButton("Insert Order").Click
Loop

注释:Window("Flight Reservation").WinEdit("Name:").Set DataTable("Name", 3)  
         Window("Flight Reservation").WinEdit("Tickets:").Set DataTable("Tickets", 3)
         '其中的3是指表单的index,即新建的标单TicketName
这两行语句也可以这样写:
         Window("Flight Reservation").WinEdit("Name:").Set DataTable("Name", "TicketName")  
         Window("Flight Reservation").WinEdit("Tickets:").Set DataTable("Tickets", "TicketName")
如果还有疑问,请查看贴子:
http://bbs.51testing.com/thread-56424-1-1.html
回复 支持 反对

使用道具 举报

该用户从未签到

35#
发表于 2007-4-24 00:45:13 | 只看该作者
马上要学qtp了,看看满难的,一定要好好学!以后我想就在自动化测试发展了。
回复 支持 反对

使用道具 举报

该用户从未签到

36#
发表于 2008-3-28 13:12:11 | 只看该作者
我认为“Browser("::::School Sports Programe").Page("::.SSP System.::").WebEdit("noOfRegister").Set DataTable("noOfRegister", dtsportCaptionSheet)“这行中dtsportCaptionSheet的用法是错误的,QTP中没有这种用法,只有
dtglobalsheet和dtlocalsheet这两种用法;
应把dtsportCaptionSheet改为“SportCaption",我想就可以了
回复 支持 反对

使用道具 举报

该用户从未签到

37#
发表于 2009-6-3 15:02:09 | 只看该作者

在QTp中怎样将运行数据表中的数据返回到Excel表中

采用数据驱动的方法现将Excel表中的数据导出来,然后对数据进行修改,在导回去,这样应该怎样做啊?谢谢各位大侠给于指教
回复 支持 反对

使用道具 举报

该用户从未签到

38#
发表于 2009-6-4 20:58:07 | 只看该作者
rowCount=DataTable().getrowcount
for i =1 to rowCount
   DataTable.setcurrentrow(i)
next
回复 支持 反对

使用道具 举报

该用户从未签到

39#
发表于 2009-7-8 18:05:20 | 只看该作者
看了半天,终于有人点出问题的重点了:

machao514: 应把dtsportCaptionSheet改为“SportCaption",

既然导入的时候命名的LocalSheet是“SportCaption", 为什么后面要去用“dtsportCaptionSheet”呢???

[ 本帖最后由 vernzhang1980 于 2009-7-8 18:08 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

40#
发表于 2010-11-21 00:22:13 | 只看该作者
Set wshshell = createobject("wscript.shell")
datatable.AddSheet("51test")
datatable.GetSheet("51test").AddParameter "newvalue", "row1value"
rowcur = datatable.GetSheet("51test").GetRowCount()

For i = 1 + rowcur to 10
    DataTable.SetCurrentRow(i)
    DataTable.Value("newvalue", "51test") = "row1value" & i
        'datatable.GetSheet("51test").AddParameter "newvalue", "rowvalue" & i
    'datatable.GetSheet("Global").AddParameter "newvalue", "rowvalue" & i
Next
rownum = datatable.GetSheet("51test").GetRowCount()
wshshell.Popup rownum, 1, "title"

For i = 1 to rownum
    DataTable.SetCurrentRow(i)
        datatable.GetSheet("51test").GetParameter( "newvalue")
        Set wshshell = createobject("wscript.shell")
        wshshell.Popup datatable.GetSheet("51test").GetParameter("newvalue"), 1, "title"
'        datatable.GetSheet("Global").AddParameter "newvalue", "rowvalue" & i
Next
大家试一下这段代码,
回复 支持 反对

使用道具 举报

本版积分规则

关闭

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

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

GMT+8, 2024-11-25 20:19 , Processed in 0.072615 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

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