51Testing软件测试论坛

标题: 如何自动实现增加、修改DataTable里面每一列的数据 [打印本页]

作者: 小宝2006    时间: 2006-8-30 15:11
标题: 如何自动实现增加、修改DataTable里面每一列的数据
现在碰到一个情况:我QTP的参数化是通过读取DataTable(就是那个execel表)里面的数据来实现的,每一次跑一遍脚本,就要修改数据表里面很多列的数据(我测试的那个程序不能输入重复的数据),我想能不能通过程序,来控制那个数据表里面的每一列的数据,再开始跑脚本之前实现动态对数据的增加修改,比如说:我第一次跑脚本用的是原来已经在数据表里面设定好的数据,第二次跑的之前,先把数据表里面的每一列数据+b   列如:原来某一列第一行的值为aa,我第二次跑脚本之前让它变成aab

这样可以吗?怎么做?
作者: ljitry    时间: 2006-8-30 15:40
Colone=datatable("Name",datatable.GetSheet("Global").SetCurrentRow(1)) 'col=aa
ColTwo=Colone&"b" 'ColTwo=aab
datatable("Name",datatable.GetSheet("Global").SetCurrentRow(1))=ColTwo

试试把它加在action1里面开头位置吧!
作者: ljitry    时间: 2006-8-30 15:44
记得每次跑完要保存数据,不然那程序没用的
作者: yangkinki    时间: 2006-8-30 17:39
建议把第二次跑的数据保存在datatable中的另外一列
var1=datatable("col1",Globalsheet)
datatable("col2",globalsheet)=var1&"b"

var2=datatable("col2",globalsheet)
msgbox var2
作者: walker1020    时间: 2006-8-30 21:00
yangkinki (kinki) 版主 的方法是可行的。楼主可以 根据 yangkinki (kinki) 版主 提供的方法试试。
作者: 风过无息    时间: 2006-8-31 09:23
我是把这些数据放在自定义的环境变量里面。也可以用的。
作者: 小宝2006    时间: 2006-8-31 10:28
标题: ljitry,请问?
原帖由 ljitry 于 2006-8-30 15:40 发表
Colone=datatable("Name",datatable.GetSheet("Global").SetCurrentRow(1)) 'col=aa
ColTwo=Colone&"b" 'ColTwo=aab
datatable("Name",datatable.GetSheet(" ...



先谢谢喔,呵呵。
你上面写的那个name指的是某列的列名吗?
datatable.getsheet("global") 的global是指datatable里面的包含那一列的表的表名吗?
你上面说的SetCurrentRow(1)是指第一行吗?SetCurrentRow(2)的话是不是就是指这一列的第二行?

因为运行老是出错,所以......呵呵

还有你后面说的每次跑完要保存数据,怎么保存?
作者: 小宝2006    时间: 2006-8-31 10:33
标题: yangkinki (kinki) ,请问你?
原帖由 yangkinki 于 2006-8-30 17:39 发表
建议把第二次跑的数据保存在datatable中的另外一列
var1=datatable("col1",Globalsheet)
datatable("col2",globalsheet)=var1&"b"

var2=datatable("col2",glob ...



你的方法我试了,可以成功的了,谢谢。
还想请问一下,要是想把数据写到其他的行(同一列定位到不同的行,或者是把某列某行的数据写到不同列不同行)要怎么做?
你上面说的那个建议,原因是什么?我不是很明白,愿闻其详
按斑竹的方法,数据是可以写进去了,就是脚本结束以后,数据没有保存的,要是想每次把跑的数据保存下来,要怎么做才好。
谢谢~~~~
作者: yangkinki    时间: 2006-8-31 12:10
保存的话可以把数据保存到xls文件中
datatable.Export ("d:/test.xls")
作者: ljitry    时间: 2006-8-31 12:28
原帖由 小宝2006 于 2006-8-31 10:28 发表



先谢谢喔,呵呵。
你上面写的那个name指的是某列的列名吗?
datatable.getsheet("global") 的global是指datatable里面的包含那一列的表的表名吗?
你上面说的SetCurrentRow(1)是指第一行吗?S ...


Name 指的是列名
global指的就是你想要张datatable里的sheet
SetCurrentRow(1)指的就是第一行,当然把“1”变变就可以指向你所想要的那行了
作者: ljitry    时间: 2006-8-31 12:37
global指的就是你想要的那张datatable里的sheet的名字
作者: ljitry    时间: 2006-8-31 12:48
标题: 回复 #7 小宝2006 的帖子
保存:
在跑完后的Results里面的Run-Time Data表倒到一个临时表里去,再把这张临时表倒到QTP的datatable里去,再点一下Save就可以了。这样每次跑的时候,直接跑就可以了,不用改数据。



Export是将数据倒到一个临时表
Import From File是将临时表的数据倒到datatable里

[ 本帖最后由 ljitry 于 2006-8-31 13:17 编辑 ]
作者: walker1020    时间: 2006-8-31 13:22
感叹:这个论坛上的高手多多!sdlkfj5
感慨:本人知道的知识太少太少了! sdlkfj1
作者: 小宝2006    时间: 2006-8-31 14:28
标题: ljitry ,运行了,还是有点错,你帮我看看,哪里写的不对
见图
作者: ljitry    时间: 2006-8-31 15:11
这是因为它是在当前的表里,这个语句它不能用在当前的表里,如果要用请换张sheet名
作者: walker1020    时间: 2006-8-31 15:13
很明显,黄色箭头标志的那行代码有问题。把这行代码改为 下面的代码就可以了:
    colone = DataTable("draft_title","draft_to_log")
作者: 小宝2006    时间: 2006-8-31 15:26
标题: ljitry 是这样吗?
把那行代码改为Colone=datatable("draft_title",datatable.GetSheet("draft_to_draft").SetCurrentRow(1))还是有错
注:表draft_to_draft也有draft_title这么一列
作者: ljitry    时间: 2006-8-31 16:16
本人建议你把要输入的数据全部放在Global表里,这样那程序就可以用啦!!其它Action的输入数据可以从Global表里用Excel语句引用过来!这样就便于数据维护了!
作者: 小宝2006    时间: 2006-8-31 16:21
标题: 后来自己又搞了下,问题解决了
先DataTable.GetSheet("Action2").SetCurrentRow(2)
再DataTable("aa", "Action2")
前面一句,我现在把他理解为像一个指针一样的东西 ,先指像第二行 ,然后在从第二行里面选则某列取出值出来

试了,可以取出action2 第2行的aa这一列的值
作者: ljitry    时间: 2006-8-31 16:23
原帖由 walker1020 于 2006-8-31 15:13 发表
很明显,黄色箭头标志的那行代码有问题。把这行代码改为 下面的代码就可以了:
    colone = DataTable("draft_title","draft_to_log")



你这个跟前面那位的datatable("draft_title",dtlocalsheet)有什么区别呢?!!!!!sdlkfj8
作者: ljitry    时间: 2006-8-31 16:31
原帖由 小宝2006 于 2006-8-31 16:21 发表
先DataTable.GetSheet("Action2").SetCurrentRow(2)
再DataTable("aa", "Action2")
前面一句,我现在把他理解为像一个指针一样的东西 ,先指像第二行 ,然后在从第二行里面选则 ...



你知道这样做的话后果吗?这样的话你在Action2里其它的取值都是取的第2行的值。除非是你所希望的!sdlkfj2
作者: 小宝2006    时间: 2006-9-1 11:44
这个我知道,等想读第一行数据的时候,把它在指回去就好了
DataTable.GetSheet("Action2").SetCurrentRow(1)
这样就又是读第一行的数据了
作者: ljitry    时间: 2006-9-1 13:22
明白就好!!!有问题再聊!!!
作者: caigua    时间: 2006-12-27 11:30
难道你们不知道用ValueByRow这个方法么?
比如
DataTable.GetSheet(strSheet).GetParameter(strParam).ValueByRow(intRow)
作者: walker1020    时间: 2006-12-27 12:46
caigua  说的方法值得一试!




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