2020-04-22客户端升级说明
简述
更新日志--------2020-04-22
更新:ExecSQL的Flags定义如下:
高位值,第31位,为1表示为缓存命令(即当Flags .& 0x80000000 <>0),当SQL语句不变需要执行多次的时候,减少SQL编译开销,提高效率。
第30位,为1表示不访问元数据(即当Flags .& 0x40000000 <>0),存贮过程参数类型判定依赖了元数据,但许多其他操作无需进行元数据判别,设置该选项在SQL调用次数很多时可以提高效率。
第29位,当设置第28位的时候生效。为1表示返回字段名转换为大小(即当Flags .& 0x20000000 <>0),0表示转换为小写。
第28位,设置为1时字段名大小写转换生效(即当Flags .& 0x10000000 <>0)。
低位值:
去掉高位以后的值即Flags .& 3 的值,0,表明Result返回的是结果集,当其为1,返回字段结构信息,当其为2时Result[0]返回结果,Result[1]返回字段结构信息。
用例:如果需要返回结果集,且字段转换为大写,即:
ExecSQL(0x10000000+0x20000000,....)
2020-04-22升级说明
ExecSQL函数在原有的基础上添加可选参数Flags,位置为该函数的第一个参数
PS:本次新增的参数为可选参数,不影响以前方法的使用。
定义:ExecSQL([Flags:Integer;][Params:Array;]DataBaseName,SQL:String;VarResult:Array[;UserName,Password:String][;DataKeepNull:Boolean]):Interger;
说明:执行SQL语句,该函数总共有8个参数,其中,Flags、Params、UserName;Password、DataKeepNull为可选参数,在调用时,注意参数顺序按定义中的顺序来传入,不需要的参数可以跳过不给,比如只给Params这个可选参数,则调用代码为:
param:=array("TestParamName":("Value":"ParamNameValue","Direction":3));
execsql(param,"test","myStoredProctest",result);
此外,在以上基础上,如果执行的是存贮过程,需要将参数带入,则插入一个参数在最前面,类型为数组,具体结构见参数说明。
如果数据库别名配置在本地,对本地的数据进行操作,则在调用execsql之前,需要加入rdo2关键字(见范例);如果数据库别名配置在服务器,则不需要rdo2关键字。
参数:
Flags
高位二进制位 | 说明 | 取值 | 十六进制表达 | 默认值
|
---|
31位 | 是否缓存SQL语句,当SQL语句不变需要
执行多次的时候,减少SQL编译开销,提
高效率 | Flags .& 0x80000000 <>0
1:缓存命令
0:不缓存命令 | 1:0x80000000 | 0
|
30位 | 是否不访问元数据,存贮过程参数类型判
定依赖了元数据,但许多其他操作无需进
行元数据判别,设置该选项在SQL调用次
数很多时可以提高效率。 | Flags .& 0x40000000 <>0
1:不访问元数据
0:访问元数据 | 1:0x40000000 | 0
|
29位 | 是否将返回字段名转换为大写,在第28位
为1的时候生效。 | Flags .& 0x20000000 <>0
1:转为大写
0:转为小写 | 1:0x20000000 | 0
|
28位 | 字段名大小写转换是否生效 | Flags .& 0x10000000 <>0
1:生效
0:无效 | 1:0x10000000 | 0
|
低位值 | 返回值result的内容 | Flags .& 3
0:Result为结果集
1:Result为字段结构信息
2:Result[0]返回结果,Result[1]返回字段结构信息 | 0:0
1:1
2:2
(与十进制显示一致,可用十进制进行表示) | 0 |
其它参数说明,请参考该语言帮助文档中的该函数说明。
使用范例(oracle):
f31:=0x80000000; //缓存串
f30:=0x40000000; //不访问元数据
f29:=0x20000000; //转为大写
f28:=0x10000000; //转大小写有效
df:=2; //同时返回结果集与字段结构信息
Flags:=f31+f30+f29+f28+df;
echo 'FLAGS高四位:',Flags.&0x80000000<>0,Flags.&0x40000000 <>0,Flags.&0x20000000 <>0,Flags.&0x10000000 <>0;
echo 'FLAGS低位值:',Flags.&3;
s:='select * from testtable where price<(select avg(price) from testtable)';
ret2:=rdo2 ExecSQL(Flags,'TestORA',s,result);
if ret2 then
return result;
else return SQLErrorMsg();
返回结果
其中,
Result[0]返回结果:
Result[1]返回字段结构信息: