51Testing软件测试论坛

标题: 关于LR动态调用数据库的小问题 [打印本页]

作者: cyk00    时间: 2010-3-1 10:29
标题: 关于LR动态调用数据库的小问题
我用的是kerzhang大神曾经06年提出的动态调用的方法
原帖:
http://www.51testing.com/?uid-2327-action-viewspace-itemid-1539

我的部分代码为:
lr_load_dll("GetData.dll");
        i=init_db("DRIVER={Microsoft ODBC for Oracle};UID=***; PWD=***; SERVER=orcl02");
        if (i!=0)
        {
           lr_error_message("init db error");
           return -1;
        }//验证是否连接

        init_hstmt(&ll_hstmt);

        i+=execSQL("SELECT TOP 13 b.operatorrisksid,b.targetid FROM que_operatorrisks b");
        lr_output_message("i=%d",i);

        i+=bindCol(1,oper,"c",50,ll_hstmt);//绑定列
           lr_output_message("i=%d",i);
        i+=bindCol(2,targ,"c",20,ll_hstmt);
         lr_output_message("i=%d",i);

这里我遇到了困难
1.init_hstmt(&ll_hstmt)这个函数的作用是什么?我去判断其值时,始终不为0
2.bindCol()这个函数,几个参数分别应为什么?SQL中的列号,是指在数据库中的第几列么?

希望有高人指点~谢谢~
作者: skyzhu    时间: 2010-3-1 10:58
这问题你要问这个DLL文件的作者了
作者: 云层    时间: 2010-3-1 10:59
由于kerzhang并没有给出具体的getdata.dll的代码,所以我在用的时候也是猜的

基本上我把查询语句定为一个返回属性时,可以正常使用
作者: 云层    时间: 2010-3-1 11:01
bindCol(2,sp)
头两位是,第一位是返回的取值顺序,如果要第一列,写1,要第二列写2

第二个参数是返回的内容保存的变量名,其他不详
作者: cyk00    时间: 2010-3-1 11:11
谢谢答复~

但还是想麻烦说下“把查询语句定为一个返回属性时,可以正常使用”是什么意思?
因为我想将查询出的内容进行提取,并存入oper,targ这两个数组里面,在后面进行使用
能举个例子更好

另外关于bindCol()这个函数的第一个参数
是说无论我要取值是在数据库的任何一列,这头两个参数,分别都是1和2?
作者: cyk00    时间: 2010-3-1 11:12
标题: 回复 2# 的帖子
作者貌似隐退了。。我也没有办法。。
作者: cyk00    时间: 2010-3-1 11:13
标题: 回复 5# 的帖子
谢谢答复~

但还是想麻烦说下“把查询语句定为一个返回属性时,可以正常使用”是什么意思?
因为我想将查询出的内容进行提取,并存入oper,targ这两个数组里面,在后面进行使用
能举个例子更好

另外关于bindCol()这个函数的第一个参数
是说无论我要取值是在数据库的任何一列,这头两个参数,分别都是1和2?
作者: 云层    时间: 2010-3-1 11:18
就是我直接写select 属性名 from 表,只有一个属性值返回没啥问题,而多个返回你可以写select * 用bindcol(属性编号 来解决

保存到数组默认不行,你要自己写个再赋值的过程就可以了

你取值的行是通过循环实现的,1,2是说明多个返回中第几个属性而已

其实我觉得动态调用数据库没啥用,我宁可写个别的东西来关联抓,方便
作者: cyk00    时间: 2010-3-1 11:42
标题: 回复 8# 的帖子
有点明白了~
是说对于我所写的sql语句
SELECT TOP 13 b.operatorrisksid,b.targetid FROM que_operatorrisks b
bindCol一个参数假如为1,则指向的是b.operatorrisksid这个列,如果为2,则指向b.targetid这个列?
最多能这样取几个列?
作者: cyk00    时间: 2010-3-1 12:01
标题: 回复 8# 的帖子
int i=0;
        int x=0;
        long ll_hstmt;
        char *a[100];
        char *b[100];
        char oper[50],targ[20];

        lr_load_dll("GetData.dll");
        i=init_db("DRIVER={Microsoft ODBC for Oracle};UID=**; PWD=** ; SERVER=**");
        if (i!=0)
        {
           lr_error_message("init db error");
           return -1;
        }

        i=init_hstmt(&ll_hstmt);
        i+=execSQL("SELECT TOP 13 b.operatorrisksid,b.targetid FROM que_operatorrisks b");
        lr_output_message("i=%d",i);

        i+=bindCol(1,oper,"c",50,ll_hstmt);
        i+=bindCol(2,targ,"c",20,ll_hstmt);

        while (i!=100)
        {
                i=fetchData(ll_hstmt);
                *a[x]=oper;
                *b[x]=targ;
                x++;
        }
        disConnect_hstmt(ll_hstmt);
        free(oper);
        free(targ);
        x=0;

这是我的完整代码,从数据库中取出,然后存入指针型数组a和b中~
但是我总觉得数组上的定义哪里有些问题
希望高人能为我指点一下~

[ 本帖最后由 cyk00 于 2010-3-1 17:50 编辑 ]
作者: 苏高跃    时间: 2010-3-1 14:31
标题: 回复 10# 的帖子
具体说明下函数:
init_hstmt(&ll_hstmt)这个函数的作用是什么?
bindCol()这个函数,几个参数分别应为什么?作用是什么?
作者: 苏高跃    时间: 2010-3-1 14:31
标题: 回复 1# 的帖子
帮你顶
作者: cyk00    时间: 2010-3-1 14:34
标题: 回复 11# 的帖子
这两个函数我也不是很清楚~你可以看看原帖,在本贴的开头我有写~
作者: cyk00    时间: 2010-3-1 14:40
标题: 回复 12# 的帖子
thx~~~
作者: 苏高跃    时间: 2010-3-1 14:43
标题: 回复 13# 的帖子
init_hstmt(&hstmt);?这个函数没写是什么意思
作者: cyk00    时间: 2010-3-1 14:46
标题: 回复 15# 的帖子
没写,但是主要用于断开数据库还是什么的~我现在可以连接上数据库了,但是没办法将数据进行复制出来~郁闷得很~

另外,我上面那段代码有好多处错误,暂时还是不要看了~
作者: 苏高跃    时间: 2010-3-1 14:50
标题: 回复 8# 的帖子
就是我直接写select 属性名 from 表,只有一个属性值返回没啥问题,而多个返回你可以写select * 用bindcol(属性编号 来解决

保存到数组默认不行,你要自己写个再赋值的过程就可以了

你取值的行是通过循环实现的,1,2是说明多个返回中第几个属性而已

其实我觉得动态调用数据库没啥用,我宁可写个别的东西来关联抓,方便

顶。。。。
但使用关联怎么弄呢?
作者: cyk00    时间: 2010-3-1 14:56
标题: 回复 17# 的帖子
你用这个方法成功了?
我就是在取值的时候出现了问题,啥值都没取出来
暂时也没找到原因

关联分为手动关联和自动关联,当你重跑脚本之后,在工具栏里面有专门的一条选项是建立关联
手动关联比较繁琐,但能准确性高,步骤为:
两次录制脚本,然后对比脚本(工具栏里也有这么一个选项)
找出不同的地方,然后判断左右边界,进行关联
具体的方法,在网上很多地方都能找到,你可以去搜索一下~
作者: 云层    时间: 2010-3-1 15:00
原帖由 苏高跃 于 2010-3-1 14:50 发表
就是我直接写select 属性名 from 表,只有一个属性值返回没啥问题,而多个返回你可以写select * 用bindcol(属性编号 来解决

保存到数组默认不行,你要自己写个再赋值的过程就可以了

你取值的行是通过循环实现的 ...


我写个动态页面能够列出数据库里面的值,然后用lr做个关联出来就行了,我在kaixin网的脚本里面就用了类似的方式做出来的
作者: cyk00    时间: 2010-3-1 15:14
标题: 回复 19# 的帖子
我在fetchData(ll_hstmt)这个函数之后
进行了一次oper值的输出,但值为空~可能的原因有哪些?
作者: 苏高跃    时间: 2010-3-1 15:35
标题: 回复 20# 的帖子
你做这个目的是为了取数据库表里面的值吗?
作者: cyk00    时间: 2010-3-1 15:50
标题: 回复 21# 的帖子
是的,为了将表里的值取出来,在后面的脚本中使用
作者: cyk00    时间: 2010-3-1 16:45
标题: 回复 21# 的帖子
等待中~~
怎么整也无法把值取出来~不知道自己是哪里弄错了~
作者: cyk00    时间: 2010-3-1 17:32
标题: 回复 4# 的帖子
云老大……
我的程序还是无法取出数据,我也看不出哪里出现了问题~
我有点怀疑我下载的dll文件是否为正确的~
是否能给我发一份你的脚本以及dll文件,以便我查看是哪里出现了错误~
cyk00@sina.com
感激不尽~




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