关于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中的列号,是指在数据库中的第几列么?
希望有高人指点~谢谢~ 这问题你要问这个DLL文件的作者了 由于kerzhang并没有给出具体的getdata.dll的代码,所以我在用的时候也是猜的
基本上我把查询语句定为一个返回属性时,可以正常使用 bindCol(2,sp)
头两位是,第一位是返回的取值顺序,如果要第一列,写1,要第二列写2
第二个参数是返回的内容保存的变量名,其他不详 谢谢答复~
但还是想麻烦说下“把查询语句定为一个返回属性时,可以正常使用”是什么意思?
因为我想将查询出的内容进行提取,并存入oper,targ这两个数组里面,在后面进行使用
能举个例子更好
另外关于bindCol()这个函数的第一个参数
是说无论我要取值是在数据库的任何一列,这头两个参数,分别都是1和2?
回复 2# 的帖子
作者貌似隐退了。。我也没有办法。。回复 5# 的帖子
谢谢答复~但还是想麻烦说下“把查询语句定为一个返回属性时,可以正常使用”是什么意思?
因为我想将查询出的内容进行提取,并存入oper,targ这两个数组里面,在后面进行使用
能举个例子更好
另外关于bindCol()这个函数的第一个参数
是说无论我要取值是在数据库的任何一列,这头两个参数,分别都是1和2? 就是我直接写select 属性名 from 表,只有一个属性值返回没啥问题,而多个返回你可以写select * 用bindcol(属性编号 来解决
保存到数组默认不行,你要自己写个再赋值的过程就可以了
你取值的行是通过循环实现的,1,2是说明多个返回中第几个属性而已
其实我觉得动态调用数据库没啥用,我宁可写个别的东西来关联抓,方便
回复 8# 的帖子
有点明白了~是说对于我所写的sql语句
SELECT TOP 13 b.operatorrisksid,b.targetid FROM que_operatorrisks b
bindCol一个参数假如为1,则指向的是b.operatorrisksid这个列,如果为2,则指向b.targetid这个列?
最多能这样取几个列?
回复 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 编辑 ]
回复 10# 的帖子
具体说明下函数:init_hstmt(&ll_hstmt)这个函数的作用是什么?
bindCol()这个函数,几个参数分别应为什么?作用是什么?
回复 1# 的帖子
帮你顶回复 11# 的帖子
这两个函数我也不是很清楚~你可以看看原帖,在本贴的开头我有写~回复 12# 的帖子
thx~~~:)回复 13# 的帖子
init_hstmt(&hstmt);?这个函数没写是什么意思回复 15# 的帖子
没写,但是主要用于断开数据库还是什么的~我现在可以连接上数据库了,但是没办法将数据进行复制出来~郁闷得很~另外,我上面那段代码有好多处错误,暂时还是不要看了~
回复 8# 的帖子
就是我直接写select 属性名 from 表,只有一个属性值返回没啥问题,而多个返回你可以写select * 用bindcol(属性编号 来解决保存到数组默认不行,你要自己写个再赋值的过程就可以了
你取值的行是通过循环实现的,1,2是说明多个返回中第几个属性而已
其实我觉得动态调用数据库没啥用,我宁可写个别的东西来关联抓,方便
顶。。。。
但使用关联怎么弄呢?
回复 17# 的帖子
你用这个方法成功了?我就是在取值的时候出现了问题,啥值都没取出来
暂时也没找到原因
关联分为手动关联和自动关联,当你重跑脚本之后,在工具栏里面有专门的一条选项是建立关联
手动关联比较繁琐,但能准确性高,步骤为:
两次录制脚本,然后对比脚本(工具栏里也有这么一个选项)
找出不同的地方,然后判断左右边界,进行关联
具体的方法,在网上很多地方都能找到,你可以去搜索一下~ 原帖由 苏高跃 于 2010-3-1 14:50 发表 http://bbs.51testing.com/images/common/back.gif
就是我直接写select 属性名 from 表,只有一个属性值返回没啥问题,而多个返回你可以写select * 用bindcol(属性编号 来解决
保存到数组默认不行,你要自己写个再赋值的过程就可以了
你取值的行是通过循环实现的 ...
我写个动态页面能够列出数据库里面的值,然后用lr做个关联出来就行了,我在kaixin网的脚本里面就用了类似的方式做出来的
回复 19# 的帖子
我在fetchData(ll_hstmt)这个函数之后进行了一次oper值的输出,但值为空~可能的原因有哪些?
页:
[1]
2