在PB中动态修改SQL语句

分享到:

江苏省南通电信局网管中心 黄莹

---- PowerBuilder是图形界面的Client/Server应用程序开发环境,可以很容易开发出功能强大的应用程序,在当前应用非常广泛。

---- 数据库应用程序通常进行一项确定的工作,在编写和编译时就可以确定完整的SQL语句,但是当需要使用PowerBuilder不支持的嵌入SQL语句,或者在编译时不能确定SQL语句的具体格式和参数时,只能在程序运行过程中构造SQL语句,需要使用动态SQL语句。以Format 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 ;

FETCH Cursor | Procedure

USING DESCRIPTOR DynamicDescriptionArea ;

CLOSE Cursor | Procedure ;

---- 在使用动态SQL语句时,需准备DynamicStagingArea对象(全局对象SQLSA)和DynamicDescriptionArea对象(全局对象SQLDA)。定义游标或过程,读取PREPARE语句中的SQL语句以及语句中说明的参数和类型,执行FETCH语句后,调用相关的函数逐条读取并处理检索结果。

---- 动态SQL语句虽然解能够在程序运行过程中构造SQL语句,但在实际应用中较少使用。若SELECT语句的结果序列一定,可以通过重新指定DataWindow对象的SELECT语句的方法,达到动态修改SQL语句的功能。运用时首先用Describe函数读取DataWindow对象的SELECT语句,用Replace等函数修改出符合要求的SELECT语句,并且可以增加检索条件,再用SetSQLSelect函数为DataWindow控件指定修改后的SELECT语句。

---- 程序代码:

string sql_string,sql_new

long   start_pos=1

string old_str     //select语句中需要替换的字符串

string new_str    //替换字符串,可以是结构相同的表名

dw_1.settransobject(sqlca)

sql_string=dw_1.Describe("DataWindow.Table.Select")

// Find the first occurrence of old_str.

start_pos = Pos(sql_string, old_str, start_pos)

// Only enter the loop if you find old_str.

DO WHILE start_pos > 0

// Replace old_str with new_str.

sql_string = Replace(sql_string, start_pos,  &

Len(old_str), new_str)

// Find the next occurrence of old_str.

start_pos = Pos(sql_string, old_str,  &

start_pos+Len(new_str))

LOOP

sql_new=sql_string+" where ……" //增加where字句

//判断setsqlselect 函数调用是否成功 ,不成功则返回

if (dw_1.setsqlselect(sql_new)=-1) then

messagebox("错误","不能修改SQL语句!",Exclamation!)

return

end if

dw_1.settransobject(sqlca)

dw_1.retrieve()

---- 使用SetSQLSelect有一定的要求和限制,更改后的SELECT语句在结构上必须与原先的语句匹配,在执行SetSQLSelect函数之前必须用SetTrans或SetTransObject函数设置DataWindow控件的内部事务对象。另外, DataWindow对象的数据源必须是一个不带参数的SELECT语句,如果需要使用检索参数,可以在程序代码中修改SQL Select语句。

本栏文章均来自于互联网,版权归原作者和各发布网站所有,本站收集这些文章仅供学习参考之用。任何人都不能将这些文章用于商业或者其他目的。( Pfan.cn )

linux 软件集成工具箱,在PB中动态修改SQL语句相关推荐

  1. 使用GSP动态修改SQL语句

    最近发现一款功能非常强大的解析SQL语句的引擎,GSP(全称General SQL Parser).这是一款专业的SQL引擎,适用于市面上流行的各种数据库,同时他也支持了马哈鱼分析器对SQL的分析.这 ...

  2. oracle中执行动态sql语句吗,oracle中有没有可动态执行sql语句的函数

    oracle中有没有可动态执行sql语句的函数 关注:233  答案:2  手机版 解决时间 2021-03-05 15:53 提问者祗剩寂寞 2021-03-04 22:38 oracle中有没有可 ...

  3. Pyqt5在程序中动态修改多界面的语言(英语转中文或者中文转英语)

    继上次写完<如何用Pyqt5实现在程序中动态修改界面的语言(英语转中文或者中文转英语)>一文后,有的朋友提出希望在多个界面中实现动态修改界面语言,而我上次写的文章只能实现主界面的动态语言的 ...

  4. mysql函数 动态语句_自定义函数动态执行SQL语句

    Oracle 动态SQL有两种写法:用 DBMS_SQL 或 execute immediate,建议使用后者. DDL 和 DML Sql代码 收藏代码 /*** DDL ***/ begin EX ...

  5. 如何找出MySQL数据库中的低效SQL语句

    面对业务的迅猛发展,DBA的一项重要工作就是及时发现数据库中的低效SQL语句,有的可以立刻着手解决(比如缺少合适的索引),有的需要尽快反馈给开发人员进行修改. MySQL数据库有几个配置选项可以帮助我 ...

  6. 执行计划 分析一条sql语句的效率 mysql_MySQL中一条SQL语句的执行过程

    MySQL中一条SQL语句的执行过程 发布时间:2018-11-24 18:35, 浏览次数:390 , 标签: MySQL SQL 查询语句的执行顺序: 1.客户端通过TCP连接发送连接请求到mys ...

  7. ef执行原生sql语句_EF Core中执行原生SQL语句

    一.课程介绍之所以今天录制这个系列文章的主要原因是,想在快速帮助到大家上手在ASP.NET Core WebAPI中结合EF Core来操作我们的数据库.EF Core的基础文章和基础课程实在是太多了 ...

  8. Mybatis 通过拦截器动态修改SQL

    01 使用场景 当我们在多租户的项目中,编写SQL语句都要带上tenant字段,用于区分不同的租户只能操作自己的数据. 比如,像下面的SQL select * from member where id ...

  9. mysql(十)条件语句、循环语句、动态执行SQL语句

    MySQL数据库-条件语句.循环语句.动态执行SQL语句 1.if条件语句 delimiter \\ CREATE PROCEDURE proc_if () BEGINdeclare i int de ...

最新文章

  1. 冲刺第九天 12.5 WED
  2. An error has occurred while drawing:java.lang.IllegalStateException: The display list is not valid.
  3. 子串、子数组与子序列类型问题的动态规划求解(Leetcode题解-Python语言)
  4. 中软国际 问题一php的优缺点
  5. checkbox对齐排列
  6. java的super_Java中this和super的用法总结
  7. 检查Python中是否存在文件
  8. C++对象模型:单继承,多继承,虚继承
  9. 酷开系统上线共抗疫情版块
  10. 安装xdg-open
  11. mysql 标识列是什么,mysql中标识列是什么意思有什么用
  12. 使用Axure制作网页
  13. python 代码格式化工具:pep8ify
  14. Java基础8顺序语句判断语句
  15. 天嵌科技——TQIMX6Q光盘8月更新说明
  16. 机器学习入门 --- 贝叶斯 - 中文新闻分类任务
  17. vue3 滑块拼图验证登录(vue3-puzzle-vcode)
  18. [嵌入式]汉字字模点阵
  19. matlabnbsp;蠓虫分类问题nbsp;amp;n…
  20. Linux 命令--SS

热门文章

  1. MySql数据库连接超时处理
  2. 可在广域网部署运行的QQ高仿版 -- GG叽叽(开源)
  3. java string出现次数_Java String方法获取字符出现次数及字符最大相同部分示例
  4. 计算机基础算法棋盘覆盖,分治算法求解棋盘覆盖问题互动教学过程.doc
  5. centos linux分区,人文网-Linux CentOS 系统分区方法
  6. oracle查看字典结构体,Oracle数据字典的实操
  7. linux下汇编程序gas,Linux 汇编语言(GNU GAS汇编)开发指南
  8. Redis的学习记录
  9. 对于七段数码数字模型进行改进:一个关键的数字1的问题
  10. 讯飞智慧餐厅(山东赛区)比赛通知