51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 3286|回复: 6
打印 上一主题 下一主题

建立datadriver后遇到的问题

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2005-1-11 15:23:25 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
建立datadriver后,将数据存在一个xls文件里,但是发现当这个文件比较大时,就打不开了
table = "lesson8.xls";
rc = ddt_open(table, DDT_MODE_READ);
if (rc!= E_OK && rc != E_FILE_OPEN)
pause("Cannot open table.");
ddt_get_row_count(table,table_RowCount);

回放时总是提示"cannot open table",把xls的内容删掉一部分就没问题了,请问winrunner就不能打开大一些的文件么??其实只是100多k而已!
另外,请问如果需要连一个已经存在的数据库应该怎么写?

多谢各位了!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏

该用户从未签到

7#
发表于 2005-1-13 12:51:35 | 只看该作者
最终目的我不是说明白了吗?把MDB文件的内容读取到WR脚本的一个data table里,不是直接,好像也不可以直接读取(因为看TSL的例子就是用DSN的,也没说可以用其它的连接方式),只能通过ODBC建立到数据库(比如Access这个数据库,SQL Server,Oracle之类的,只试过Access的,因为没装其它数据库)的DSN,也就是在控制面板里面自己设定好自己的Data Source之后,再执行上面的操作就可以实现了
另外,其实上面有些语句要稍微更正一下,当然不改也可以正确执行:
.....
split(row, rowArray, "\t");
for(j = 0; j <= FieldNum; j++)
.....
我开始没注意到用split把值存入数组后,它读取到的rowArray[0]是空的,所以想了半天搞不懂为什么要0-FieldNum,因为rowArray[0]根本就是空的,应该改成:
for(j = 1; j <= FieldNum; j++) ,上面的一个也是

此外,还要注意一点就是这个语句:
db_connect("query1", "DSN=mydb", 10);
第一个名字"query1"可以随便取,但后面必须保持和它一致,第二个参数要注意,不能用下面的格式:"DSN = mydb",也就是等号两边不能加空格,否则打不开
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2005-1-13 08:37:39 | 只看该作者
TO  shyfish
你这个例子最终的目的是什么,我没有试出来
程序是可以跑,不知道 我的DATABASE配得对不对,
我的是ORACLE9i
数据库是可以连上,DSN是不是数据库的名呢?
你可以说得再清楚一点吗?
回复 支持 反对

使用道具 举报

该用户从未签到

5#
 楼主| 发表于 2005-1-12 12:49:41 | 只看该作者
非常感谢!我会再试试的。
thankyou!
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2005-1-12 12:45:52 | 只看该作者
1.WR可以打开大的xls(我试过8XXK的)文件,可能是你的表本身的问题
2.贴一段代码:(必须先自己创建一个DSN)
                db_connect("query1", "DSN=mydb", 10);
        #下面这步是必须的,因为要先打开一个表
        db_execute_query("query1", "select * from table2", recNum);  
        db_get_headers("query1", FieldNum, Headers);
        split(Headers, headArray, "\t");
        table = "table2.xls";
        ddt_open(table, DDT_MODE_READWRITE);
        for(i = 0; i <= recNum; i++)
        {
                db_get_row("query1", i, row);
                split(row, rowArray, "\t");
                for(j = 0; j <= FieldNum; j++)
                {
                        ddt_set_val_by_row(table, i+1, headArray[j], rowArray[j]);
                }
        }
        ddt_save(table);
        ddt_close(table);
        db_disconnect("query1");
是把DSN:mydb(数据源是Access的mdb文件)下的table2打开并把数据存入data table:table2里,table2的列名必须先设置好,因为没有设置data table的函数,这里设成了数据表里面的Field name一致
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2005-1-12 08:34:29 | 只看该作者
??如果把  ddt_get_row_count(table,table_RowCount); 这行去掉的话,后面的循环条件里的 table_RowCount肯定就没法用了
for(table_Row = 1; table_Row <= table_RowCount; table_Row ++)
请大虾们帮忙!!
回复 支持 反对

使用道具 举报

该用户从未签到

2#
发表于 2005-1-11 16:10:20 | 只看该作者
ddt_get_row_count(table,table_RowCount);把这一行去掉试试
回复 支持 反对

使用道具 举报

本版积分规则

关闭

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

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

GMT+8, 2024-11-9 04:54 , Processed in 0.077793 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

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