李zi 发表于 2005-1-11 15:23:25

建立datadriver后遇到的问题

建立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而已!
另外,请问如果需要连一个已经存在的数据库应该怎么写?

多谢各位了!

AlanStone 发表于 2005-1-11 16:10:20

ddt_get_row_count(table,table_RowCount);把这一行去掉试试

李zi 发表于 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 ++)
请大虾们帮忙!!

shyfish 发表于 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, rowArray);
                }
        }
        ddt_save(table);
        ddt_close(table);
        db_disconnect("query1");
是把DSN:mydb(数据源是Access的mdb文件)下的table2打开并把数据存入data table:table2里,table2的列名必须先设置好,因为没有设置data table的函数,这里设成了数据表里面的Field name一致

李zi 发表于 2005-1-12 12:49:41

非常感谢!我会再试试的。
thankyou!

QA_BAY 发表于 2005-1-13 08:37:39

TOshyfish
你这个例子最终的目的是什么,我没有试出来
程序是可以跑,不知道 我的DATABASE配得对不对,
我的是ORACLE9i
数据库是可以连上,DSN是不是数据库的名呢?
你可以说得再清楚一点吗?

shyfish 发表于 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-FieldNum,因为rowArray根本就是空的,应该改成:
for(j = 1; j <= FieldNum; j++) ,上面的一个也是

此外,还要注意一点就是这个语句:
db_connect("query1", "DSN=mydb", 10);
第一个名字"query1"可以随便取,但后面必须保持和它一致,第二个参数要注意,不能用下面的格式:"DSN = mydb",也就是等号两边不能加空格,否则打不开
页: [1]
查看完整版本: 建立datadriver后遇到的问题