PB 动态修改数据窗口DW的SQL

在PB中动态修改数据窗口DW的SQL语句方法注意事项
数据库应用程序通常进行一项确定的工作,在编写和编译时就可以确定完整的SQL语句,但是在编译时不能确定SQL语句的具体格式和参数时,只能在程序运行中构造SQL语句,需要使用动态SQL语句。以Foramat 4 动态SQL语句为例,使用格式如下:
DECLARE Cursor | Procedure  
     DYNAMIC CURSOR | PROCEDURE  FOR DynamicStagingArea ; 
     PREPARE DynamicStagingArea FROM SQLStatement  {USING TransactionObject} ; 
     DESCRIBE DynamicStagingArea  INTO DynamicDescriptionArea ;
     OPEN DYNAMIC Cursor | Procedure 
     USING DESCRIPTOR DynamicDescriptionArea} ; 
     EXECUTE DYNAMIC Cursor | Procedure 
     USING DESCRIPTOR DynamicDescriptionArea ;
     ETCH Cursor | Procedure 
     USING DESCRIPTOR DynamicDescriptionArea ;
     CLOSE Cursor | Procedure ;
     —在使用动态SQL语句时,需准备DynamiccStagingArea 对象(全局对象SQLSA)和DynamicDescriptAera对象(全局对象SQLDA)。定义游标或过程,读取prepare语句中的SQL语句以及语句中说明的参数和类型,执行Fetch语句后,调用相关的函数逐条读取并处理检索结果。动态SQL虽然能够在程序运行中构造SQL语句,但在实际中较少使用。若select语句中的结果序列一定,可以通过重新指定datawindow对象的select语句的语法,达到动态修改SQL语句的功能。运用 首先用Desccribe 函数读取datawindow对象的select语句,用replace等函数修盖出符合要求的select语句,并且可以增加检索条件,在用setsqlselect函数为datawindow控件指定修改后的select语句。
代码样例:
string sql_string,sql_new
long start_pos = 1
string old_str //select 语句中需要替换的字符串
string new_str //替换字符串 可以是结构相同的表名

new_str = ‘xt_xmfl_dict’
old_str = ‘XT_FB_DICT’
sql_string = dw_1.describe(“datawindow.table.select” )
start_pos = pos(sql_string,old_str,start_pos)
do while start_pos > 0
sql_string = replace(sql_string,start_pos,len(old_str),new_str)
start_pos = pos(sql_string,old_str,start_pos+len(new_str))

loop
if pos(sql_new,‘where’) = 0 then
sql_new =sql_string +" where bm =‘1’"
end if
if dw_1.setsqlselect(sql_new) = -1 then
messagebox(‘错误’,’!!!’)
return
end if

dw_1.settransobject(SQLCA)
dw_1.retrieve( )
使用selsqlseelct 有一定的妖气护额限制,更改后的select语句select语句在结构上必须与原先的语句匹配,在执行setsqlseelct函数之前必须调用settrans或settransobject函数设置datawindow控件的内部事务对象。另外,datawindow对象的数据源必须是一个不带参数的select语句,如果需要使用参数检索,可以在程序中修改sql select语句。

  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:书香水墨 设计师:CSDN官方博客 返回首页
评论

打赏作者

半世琉璃的程序猿

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值