FAQ > 客户端升级

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:0x800000000
    30位是否不访问元数据,存贮过程参数类型判
    定依赖了元数据,但许多其他操作无需进
    行元数据判别,设置该选项在SQL调用次
    数很多时可以提高效率。
    Flags .& 0x40000000 <>0
    1:不访问元数据
    0:访问元数据
    1:0x400000000
    29位是否将返回字段名转换为大写,在第28位
    为1的时候生效。
    Flags .& 0x20000000 <>0
    1:转为大写
    0:转为小写
    1:0x200000000
    28位字段名大小写转换是否生效Flags .& 0x10000000 <>0
    1:生效
    0:无效
    1:0x100000000
    低位值返回值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]返回字段结构信息: