cyk00 发表于 2010-3-1 10:29:11

关于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:58

这问题你要问这个DLL文件的作者了

云层 发表于 2010-3-1 10:59:00

由于kerzhang并没有给出具体的getdata.dll的代码,所以我在用的时候也是猜的

基本上我把查询语句定为一个返回属性时,可以正常使用

云层 发表于 2010-3-1 11:01:36

bindCol(2,sp)
头两位是,第一位是返回的取值顺序,如果要第一列,写1,要第二列写2

第二个参数是返回的内容保存的变量名,其他不详

cyk00 发表于 2010-3-1 11:11:50

谢谢答复~

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

另外关于bindCol()这个函数的第一个参数
是说无论我要取值是在数据库的任何一列,这头两个参数,分别都是1和2?

cyk00 发表于 2010-3-1 11:12:18

回复 2# 的帖子

作者貌似隐退了。。我也没有办法。。

cyk00 发表于 2010-3-1 11:13:58

回复 5# 的帖子

谢谢答复~

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

另外关于bindCol()这个函数的第一个参数
是说无论我要取值是在数据库的任何一列,这头两个参数,分别都是1和2?

云层 发表于 2010-3-1 11:18:55

就是我直接写select 属性名 from 表,只有一个属性值返回没啥问题,而多个返回你可以写select * 用bindcol(属性编号 来解决

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

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

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

cyk00 发表于 2010-3-1 11:42:56

回复 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:21

回复 8# 的帖子

int i=0;
        int x=0;
        long ll_hstmt;
        char *a;
        char *b;
        char oper,targ;

        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=oper;
                *b=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:15

回复 10# 的帖子

具体说明下函数:
init_hstmt(&ll_hstmt)这个函数的作用是什么?
bindCol()这个函数,几个参数分别应为什么?作用是什么?

苏高跃 发表于 2010-3-1 14:31:51

回复 1# 的帖子

帮你顶

cyk00 发表于 2010-3-1 14:34:32

回复 11# 的帖子

这两个函数我也不是很清楚~你可以看看原帖,在本贴的开头我有写~

cyk00 发表于 2010-3-1 14:40:34

回复 12# 的帖子

thx~~~:)

苏高跃 发表于 2010-3-1 14:43:07

回复 13# 的帖子

init_hstmt(&hstmt);?这个函数没写是什么意思

cyk00 发表于 2010-3-1 14:46:19

回复 15# 的帖子

没写,但是主要用于断开数据库还是什么的~我现在可以连接上数据库了,但是没办法将数据进行复制出来~郁闷得很~

另外,我上面那段代码有好多处错误,暂时还是不要看了~

苏高跃 发表于 2010-3-1 14:50:30

回复 8# 的帖子

就是我直接写select 属性名 from 表,只有一个属性值返回没啥问题,而多个返回你可以写select * 用bindcol(属性编号 来解决

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

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

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

顶。。。。
但使用关联怎么弄呢?

cyk00 发表于 2010-3-1 14:56:06

回复 17# 的帖子

你用这个方法成功了?
我就是在取值的时候出现了问题,啥值都没取出来
暂时也没找到原因

关联分为手动关联和自动关联,当你重跑脚本之后,在工具栏里面有专门的一条选项是建立关联
手动关联比较繁琐,但能准确性高,步骤为:
两次录制脚本,然后对比脚本(工具栏里也有这么一个选项)
找出不同的地方,然后判断左右边界,进行关联
具体的方法,在网上很多地方都能找到,你可以去搜索一下~

云层 发表于 2010-3-1 15:00:52

原帖由 苏高跃 于 2010-3-1 14:50 发表 http://bbs.51testing.com/images/common/back.gif
就是我直接写select 属性名 from 表,只有一个属性值返回没啥问题,而多个返回你可以写select * 用bindcol(属性编号 来解决

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

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

我写个动态页面能够列出数据库里面的值,然后用lr做个关联出来就行了,我在kaixin网的脚本里面就用了类似的方式做出来的

cyk00 发表于 2010-3-1 15:14:10

回复 19# 的帖子

我在fetchData(ll_hstmt)这个函数之后
进行了一次oper值的输出,但值为空~可能的原因有哪些?
页: [1] 2
查看完整版本: 关于LR动态调用数据库的小问题