浏览器大全:是一个提供流行浏览器教程、在线学习分享的学习平台!

在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语句。 

相关软件

2345加速浏览器官方版

2345加速浏览器官方版 | 56.2MB

2345加速浏览器官方版

新一代2345加速浏览器采用Chromium和IE双内核,主打极速与安全特性。基于Chromium深度定制,引入网页智能预加载技术,访问网页更快速..

QQ浏览器官方正式版

QQ浏览器官方正式版 | 49.67MB

QQ浏览器官方正式版

QQ浏览器秉承TT浏览器1-4系列方便易用的特点,但技术架构不同,交互和视觉表现也重新设计,采用Chromium内核+IE双内核,让浏览快速稳定...

百度浏览器最新版下载

百度浏览器最新版下载 | 13.3MB

百度浏览器最新版下载

q百度浏览器,是一款简洁轻快、智能懂你的浏览器。依靠百度强大的搜索平台,在满足用户浏览网页的基础上,它整合百度体系业务优势,带给用户更方便的浏览方式功能...

UC浏览器官方正式版

UC浏览器官方正式版 | 44.2MB

UC浏览器官方正式版

UC浏览器(UC Browser)是UC Mobile Limited在2004年8月开发的一款软件,分uc手机浏览器和uc浏览器电脑版。UC浏览器是全球使用量最大的第三方手机浏览器...

猎豹浏览器2022最新版下载

猎豹浏览器2022下载 | 45MB

猎豹浏览器2022最新版下载

猎豹安全浏览器对Chrome的Webkit内核进行了超过100项的技术优化,访问网页速度更快。其具有首创的智能切换引擎,动态选择内核匹配不同网页...

360安全浏览器官方版下载

360安全浏览器下载 | 21.4MB

360安全浏览器官方版下载

360安全浏览器拥有全国最大的恶意网址库,采用恶意网址拦截技术,可自动拦截挂马、欺诈、网银仿冒等恶意网址。独创沙箱技术,在隔离模式即使访问****也不会感染...