




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、下拉列表框的封装 我们再开发程序的时候,经常会需要从数据库里取岀数据放 到下拉列表框内,通常的作法是:每遇到这种情况,都定义一个 游标,打开游标,取出数据,放到下拉列表框内,关闭游标。代 码重复,针对这种情况,我将这段代码封装到下拉列表框内,形 成自定义标准对彖,需要的时候,只要将SQL语句传给对象即 可。 需要的知识如下: 1、游标 在某些PowerBuilder应用程序的开发屮,您可能根本用不到游标 这样一个对彖。在PowerBuilder中却已有DataWindow来代劳了。 事实上,D ataWindow不仅可以替代游标进行从后台数据库查询多 条记录的复杂操作,而且还远不止这些。但是同
2、DataWindow和 DataStore相比,游标也有其自身的优点,比如系统资源占用少,操 作灵活,可根据需要定义变量类型如全局、实例或局部类型和访 问类型如私有或公共等。 游标的操作 使用游标有四种基本的步骤:声明游标、打开游标、提取数据、 关闭游标。 声明游标 象使用其它类型的变量一样,使用一个游标之前,首先应当声明 它。游标的声明包括两个部分: 游标的名称;这个游标所用到的SQL语句。如要声明一个叫作 ccpmc的游标用以查询产品,您可以编写如下代码: DECLARE ccpmc CURSOR FOR SELECT cpmc FROM table_cp; 在游标的声明屮有一点值得注意的
3、是,如同其它变量的声明一样, 声明游标的这一段代码行是不执行的,您不能将debug时的断点 设在这一代码行上,也不能用IF.END IF语句来声明两个同名的 游标,如下列的代码就是错误的。 IF lb_condition THEN DECLARE ccpmc CURSOR FOR SELECT cpmc FROM table_cp; ELSE DECLARE ccpmc CURSOR FOR SELECT cpmc FROM table_cp 1; END IF 打开游标 声明了游标后在作其它操作之前,必须打开它。打开游标是执行 与其相关的一段SQL语句,例如打开上例声明的一个游标,我们只 需
4、键入:OPEN ccpmc; 由于打开游标是对数据库进行一些SQL SELECT的操作,它将耗 费一段时间,主要取决于您使用的系统性能和这条语句的复杂程 度。 提取数据 当用OPEN语句打开了游标并在数据库屮执行了查询后,您不能 立即利用在查询结果集中的数据。您必须用FETCH语句来取得 数据。一条FETCH语句一次可以将一条记录放入程序员指定的 变量屮。事实上,FETCH语句是游标使用的核心。在DataWindow 和DataStore屮,执行了 Retrieve()函数以后,查询的所有结果全部 可以得到;而使用游标,我们只能逐条记录地得到查询结果。已经 声明并打开一个游标后,我们就可以将数
5、据放入任意的变量屮。 在FETCH语句屮您可以指定游标的名称和目标变量的名称。如 下例: FETCH ccpmc INTO:ls_cpinc; 从语法上讲,上面所述的就是一条合法的取数据的语句,但是一般 我们使用游标却还应当包括其它的部分。正如我们前面所谈到的, 游标只能一次从后台数据库屮取一条记录,而在多数情况下,我们 所想要作的是在数据库中从第一条记录开始提取,一直到结束。 所以我们一般要将游标提取数据的语句放在一个循环体内,直至 将结果集中的全部数据提取后,跳出循环圈。通过检测 SQLCA.SQLCODE的值,可以得知最后一条FETCH语 句是否成功。一般,当SQLCODE值为0时表明一
6、切正常,100表 示已经取到了结果集的末尾,而其它值均表明操作出了问题,这样 我们可以编写以下的代码: FETCH ccpmc INTO:ls_cpmc; do while sqlca.sqlcode=0 FETCH ccpmc INTO:ls_cpmc; loop 关闭游标 在游标操作的最后请不要忘记关闭游标,这是一个好的编程习惯, 以使系统释放游标占用的资源。关闭游标 的语句很简单: CLOSE ccpmc; 游标的类型 同其它变量一样,我们也可以定义游标的访问类型:全局、共享、 实例或局部,游标变量的命名规范建议也同其它变量一样。 游标的高级技巧 尽管目前基于SQL语句的后台数据库所支持
7、的语言都大致相当, 但对游标的支持却有着一些差异,例如对滚动游标支持。所谓滚 动游标,就是程序员可以指定游标向前后任意一个方向滚动。如 在Informix屮,您甚至还可以将游标滚向结果集开头或末尾,使用 的语句分别是 FETCH FIRST,FETCH LAST、FETCH PRIOR 和 FETCH NEXTo当程序员用FETCH语句,其缺省是指FETCH NEXTo由于滚动是在数据库后台实现的,所以滚动游标为用户编 程提供了极大的方便。 上面所说的是静态游标,所谓静态游标就是SQL语句不能是变 量,而我们这个程序需要传递变量的SQL语句,所以就要用到 动态游标。 2、动态游标 动态游标就是
8、可以用变量的字符串(SQL语句)进行定义的游标, 它与静态游标操作的不同在于先把变量串放入动态区,然后从动 态区定义游标.定义过程类似下面的语句: string s_temp s_temp=nselect cpbm from cp where cp like prepare sqlsa from :s_temp; declare dynamic_cursorl cursor for sqlsa; 下面就是本程序的具体作法: 自定义标准下拉列表框对彖,定义对象函数of_sc(sql(string as_sql) 代码如下: string s_var prepare sqlsa from :as_
9、sql; 把 SQL 语句放入动态区,sa_sql 是从调 用者传过来的变量SQL串 declare dc_c dynamic cursor for sqlsa; 从动态区定义动态游标 open dynamic dc_c;/打开动态游标 this.setredraw(false) this.reset() fetch dc_c into :s_var;/取出一行数据 do while sqlca.sqlcode=0 this.additem(s_var) fetch dc_c into :s_var;/循环取数 loop this.setredraw(true) close dc_c;/关闭游标 以后当需要从数据库里取出数据放到下拉列表框内时只需调用 下拉列表框的函数 of_setsql(string as_sql)即可,如: string ls_sql ls_sql=nselect cpmc from table_cpn
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 市政管道施工环境影响评估方案
- 户外景观艺术装置设计方案
- 商业区景观环境建设方案
- 大学生舆情引导与公共危机治理中的信息整合模式
- 北京市技工院校教学管理办法2025
- 职场礼仪知识强化训练试题及答案
- 2025年食品生产安全作业试题及答案
- 2025年农贸市场岗前安全生产试题及答案
- 改善睡眠质量心理试题及答案
- 磨工培训试题及答案
- 护理事业十五五发展规划(2026-2030)
- 2025循环流化床锅炉水冷壁防磨格栅安装及检验规程
- 自来水安装施工合同4篇
- 输血常识试题及答案
- 省级职业技能大赛2024(高职组)口腔修复工艺赛项规程
- 《生态系统服务评估》课件
- 《系统性红斑狼疮肾炎》课件
- 白象食品测试题及答案
- 食堂满意度测评制度
- 公司管理制度上墙图
- 管道气密性试验方案
评论
0/150
提交评论