分类: WINDOWS
2012-06-28 10:20:13
(一)如果选择录制脚本的话
1、vugen会生成以下这些跟协议不同的文件
vdf.h
作用:定义各种变量
print.inl
作用:打印表格使用的函数。录制脚本时才有用,写脚本的话没有用
oracle20090225b.grd
作用:打印表格的格式。录制脚本时才有用,写脚本的话没有用
oracle20090225b.rdf
作用:这个不大清楚,应该是打印表格的内容。用ue打开都是些框框。录制脚本时才有用,写脚本的话没有用
2、录制脚本的好处
需要的东西什么都有了。只要找到要执行的。然后将其中的sqltext部分参数化掉就可以了。
select时生成的几个表格不错。可以在上面完成参数的保存和将搜索的结果保存成dat文件。用起来还是比较直观的
3、录制脚本不好的地方
使用plsql或者toad这样的工具录制出来的脚本有很多的操作就是中不需要的。对于不了解lr脚本的用户来说这些东西会造成一些麻烦。了解的话把这些不需要的语句都去掉就行了。
(二)如果选择自己写脚本的话
需要用到以下这些语句
#include "lrd.h"
static LRD_INIT_INFO InitInfo = {LRD_INIT_INFO_EYECAT};
static LRD_DEFAULT_DB_VERSION DBTypeVersion[] =
{
{LRD_DBTYPE_NONE, LRD_DBVERSION_NONE}
};
//定义各种变量。录制生成的脚本中,这些变量的定义在vdf.h中。
static void FAR * OraEnv1;
。。。
unsigned long rownum;
static unsigned long uliRowsProcessed;
static unsigned long uliFetchedRows;
static LRD_VAR_DESC MEMBERCODE_D55 =
{LRD_VAR_DESC_EYECAT, 500, 8, LRD_DBTYPE_ORACLE, {1, 0, 0},
。。。。
vuser_init()
{
//初始化部分
lrd_init(&InitInfo, DBTypeVersion);
lrd_initialize_db(LRD_DBTYPE_ORACLE, 3, 0);
lrd_env_init(LRD_DBTYPE_ORACLE, &OraEnv1, 0, 0);
lrd_ora8_handle_alloc(OraEnv1, SVCCTX, &OraSvc1, 0);
lrd_ora8_handle_alloc(OraEnv1, SERVER, &OraSrv1, 0);
lrd_ora8_handle_alloc(OraEnv1, SESSION, &OraSes1, 0);
//连接数据库
lrd_server_attach(OraSrv1, "aaa", -1, 0, 0); //这里填写数据库的名称
lrd_ora8_attr_set_from_handle(OraSvc1, SERVER, OraSrv1, 0, 0);
//设定数据库密码
lrd_ora8_attr_set(OraSes1, USERNAME, "aaa", -1, 0); //这里填写用户名
lrd_ora8_attr_set(OraSes1, PASSWORD, "bbb", -1, 0);//这里填写密码
//初始化连接session
lrd_ora8_attr_set_from_handle(OraSvc1, SESSION, OraSes1, 0, 0);
//开始连接数据库
lrd_session_begin(OraSvc1, OraSes1, 1, 0, 0);
lrd_ora8_handle_alloc(OraEnv1, STMT, &OraStm4, 0);
}
Action()
{//设定查询语句
lrd_ora8_stmt(OraStm4, "select * from member", 1, 0, 0);//这里填写SQL语句
//执行查询语句
lrd_ora8_exec(OraSvc1, OraStm4, 0, 0,&rownum, 0, 0, 0, 0, 1);
//这些无聊的东西不绑定的话无法执行lrd_ora8_fetch。一个查询结果的每个字段都要绑定一下。像这样的东西OraDef37,MEMBERCODE_D55。需要在上面定义一下
lrd_ora8_bind_col(OraStm4, &OraDef37, 1, &MEMBERCODE_D55, 0, 0);
//保存变量第1列 第1行。保存到参数a中。通过这个就可以在之后使用查询到的直的。这个函数一般用在fatch之前。
lrd_ora8_save_col(OraStm4,1,1,0,"a");
//执行fetch。倒数第4个参数是0。在帮助中是PrintRow1这类的东西,这是在print.inl那个文件中定义的用来把表格打出来的函数。这里用0就是不用这个打印的东西,这样的话也就用不到print.inl这个文件和其他的定义打印表格格式的文件了。
lrd_ora8_fetch(OraStm4, 2,2, &uliFetchedRows, 0, 2, 0, 0);
lr_output_message("%s.%s",lr_eval_string("{a}"));
}
vuser_end()
{
//释放数据库连接
lrd_handle_free(&OraStm4, 0);
lrd_session_end(OraSvc1, OraSes1, 0, 0);
lrd_server_detach(OraSrv1, 0, 0);
lrd_handle_free(&OraEnv1, 0);
}