PB中的DataStore的应用示例
编程过程中想在窗口中加一个下拉列表(DDLB),原来听同学说过可以动态改变下拉列表的值,数据库中的表改变,前台客户端的下拉列表就会变,记得当时同学说的是用一个叫下拉数据窗口(DDDW)的东西做的,一直没试过,今天遇到了这样的问题,想试一下,于是在网上查找例子,但似乎都不合我的意,下面简单说下需求:
涉及表:1、dm_yhzl (银行种类代码表)
字段:yhzl _dm(银行种类代码,如1100、1200等) ,yhzl_mc(银行种类名称,如中国工商银行等)
2、dm_yh(银行名称代码表)
字段:yhzl_dm(银行种类代码),yh_dm(银行代码,如1101等),yh_mc(具体银行名称)
需求:窗口中有一个下拉列表,里面的ITEM中包含dm_yhzl中所有的银行种类,下拉列表中的内容随着银行种类代码表中数据增加而增加,然后数据窗口中的具体银行信息为下拉列表中银行种类下的所有分行等信息。
实现:因听同学说DDDW可以连接到数据表进行取数,开始便想试着弄一下,但DDDW好像只能在数据窗口中使用,如Freeform等类型的数据窗口,但我想要的是窗口中的DDLB,所以不满足我的需求,于是想到了用游标的方式来实现,于是上网查询游标的使用方法(原来没用过,小白一下),但PBer们好像都反映游标不好用,查询速度慢,建议使用DataStore来代替游标,于是便又接触到了新鲜事物:DataStore(哈,再小白一下),根据网上的介绍,感觉应该可以满足我的需求,于是试着做了起来。
第一步,创建一个数据窗口(Grid型),选择dm_yhzl表中的两列,如需过滤可设置where条件等,起名为dw_yhzl。
第二步,再创建一个Grid型的银行信息数据窗口,选择dm_yh中的yh_dm和yh_mc列,起名为dw_yh。
第三步,在窗口控件中添加下拉列表(DDLB),起名为ddlb_yhzl,下面添加数据窗口控件,对应的数据窗口为刚才建立的dw_yh。
第四步,在窗口控件的open事件中写如下代码:
string ls_yhzl
long ll_row,ll_row_count
datastore ds_yhzl //声明Datastore变量
ds_yhzl = create datastore //将Datastore实例化
ds_yhzl.dataobject = "dw_yhzl" //为datastore分配数据窗口对象
ds_yhzl.settransobject(sqlca) //指定连接实例
ds_yhzl.retrieve() //提取数据
ll_row_count = ds_yhzl.rowcount() //将所取数据的行数存储在ll_row_count变量中
for ll_row = 1 to ll_row_count //创建循环语句进行取值
ls_yhzl = ds_yhzl.getitemstring(ll_row,"yhzl_mc") //取当前行的yhzl_mc字段对应的值
ddlb_yhzl.additem(ls_yhzl) //将取到的当前行的值添加到下拉列表中
next //取下一条记录
destroy ds_yhzl //释放datastore
通过以上操作,在打开窗口控件时,下拉列表中自动添加了银行种类代码表中的所有银行种类,想查询银行种类下的具体银行信息,可以添加查询按钮,在查询按钮的clicked事件中添加如下代码(也可以在下拉列表的selectionchanged事件中添加,但数据较多时可能会速度慢):
string old_select,setselect,setwhere
old_select=dw_1.describe("datawindow.table.sqlselect") //将当前数据窗口的SQL语句存入变量old_select
setselect="select yh_dm,yh_mc from dm_yhzl a,dm_yh b " //设置select语句,注意最后的双引号前要加一个空格
setwhere="a.yhzl_dm=b.yhzl_dm" //设置where条件
if trim(ddlb_yhzl.text)<>'' then //如果在下拉列表中选择了银行种类,则在查询条件中加入如下条件语句
setwhere+=" and a.yhzl_mc=' " + ddbl_yhzl.text + " ' "
end if
dw_1.object.datawindow.table.select=setselect+setwhere //动态修改数据窗口的查询语句
dw_1.settransobject(sqlca) //指定连接实例
dw_1.retrieve() //按修改后的条件提取数据
dw_1.object.datawindow.table.select=old_select //将数据窗口的查询语句重置为原来的查询语句
好了,大功告成,运行程序,打开窗口,下拉列表中出现了所有银行种类,如不进行选择,点击查询按钮,数据窗口中显示出所有银行信息,如工行的各分行、建行的各分行、农行的各分行等。如果在银行种类中选择中国工商银行,点击查询控钮,则列出工行的所有分行信息。
在此例中学到了datastore的应用,感觉非常有用,这样使用后,如果有新的银行信息加入时,只要对数据库中的银行种类表进行维护,客户端的下拉列表即可同时更新,非常方便。
PB中的DataStore的应用示例的更多相关文章
- PB中multieditline空间的“~r~n"转"~n"
private: constant String MULEDIT_NEWLINE = "~r~n" //multilineEdit控件的换行符号 constant String M ...
- Python 3.X 调用多线程C模块,并在C模块中回调python函数的示例
由于最近在做一个C++面向Python的API封装项目,因此需要用到C扩展Python的相关知识.在此进行简要的总结. 此篇示例分为三部分.第一部分展示了如何用C在Windows中进行多线程编程:第二 ...
- pb中遍历查询数据库数据问题(数据库为 sql server)
指针可以实现但是不推荐 例如:(部分代码) for ll_a = 1 to ll_count ll_b = ll_i + ll_a //插入行行号先下移一位 dw_main.inser ...
- 如何在PB中调用 Microsoft WEB 浏览器 控件?
PB中使用Microsoft Web Browser控件步骤: 在pb的某窗口中加入OLE对象,选择Insert control(插入控件),然后选中"Microsoft WEB 浏览器&q ...
- Java中的break循环——通过示例学习Java编程(13)
作者:CHAITANYA SINGH 来源:https://www.koofun.com//pro/kfpostsdetail?kfpostsid=24 break语句通常用于以下两种情况: (A)使 ...
- ioctl在socket中的一些用法及示例
原文: http://blog.chinaunix.net/uid-20692625-id-3172833.html ----------------------------------------- ...
- 使用注解注入properties中的值的简单示例
spring使用注解注入properties中的值的简单示例 1.在web项目的src目录下新建setting.properties的文件,内容如下: version=1 2.在spring的xm ...
- 在 ASP.NET MVC 中充分利用 WebGrid (microsoft 官方示例)
在 ASP.NET MVC 中充分利用 WebGrid https://msdn.microsoft.com/zh-cn/magazine/hh288075.aspx Stuart Leeks 下载代 ...
- Tyrion中文文档(含示例源码)
Tyrion是一个基于Python实现的支持多个WEB框架的Form表单验证组件,其完美的支持Tornado.Django.Flask.Bottle Web框架.Tyrion主要有两大重要动能: 表单 ...
随机推荐
- SNOI2017炸弹
这个东西其实我是不太会的……但是勉强卡过去了. 首先肯定是建有向图,然后求每个节点能访问的节点个数,最裸的打法就是按照题意枚举建边然后tarjan缩点,用bitset记录一下访问节点,但是bitset ...
- Linux 服务器安装jdk,mysql,tomcat简要教程
linux服务器是阿里云上买的,学生价9.9/月,拿来学习下. 需要准备软件工具: 1.editplus (编辑服务器上的文件) 2.PuTTY (Linux命令连接器) 3.FlashFXP(上传文 ...
- LeetCode---Sort && Segment Tree && Greedy
307. Range Sum Query - Mutable 思路:利用线段树,注意数据结构的设计以及建树过程利用线段树,注意数据结构的设计以及建树过程 public class NumArray { ...
- Leetcode题目20.有效的括号(简单)
题目描述: 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合.左括号必须以正确的顺序闭合.注意空字符 ...
- leetcode题目1.两数之和(简单)
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组中同样的元 ...
- IDEA问题java: -source 1.6 中不支持diamond、 lambda 表达式
文章目录 一.问题:连片的java: -source 1.6 中不支持 diamond 运算符.lambda 表达式 二.解决方法: 1.在微信群里问大佬,大佬在玩游戏,回复的比较慢 2.自己查Goo ...
- AutoItLibrary测试Windows GUI
AutoItLibrary库关键字 AutoItLibrary 的对象操作大体上有几大主要部分,Window 操作.Control 操作.Mouse 操作.Process操作.Run 操作.Reg 操 ...
- idea中git远程版本回退
idea中git远程版本回退 2017年10月15日 15:25:36 gomeplus 阅读数:19313 工作中遇到git远程仓库需要回退到历史版本的问题,根据网上的搜索结果结合自己的实践,整理了 ...
- 谷歌云服务器XShell登录
一,谷歌云服务器,默认用浏览器进行SSH链接,而且也不告知密码.以Centos为例,先使用浏览器连接 1,给root修改密码 sudo passwd root 2,编辑ssh配置文件 sudo nan ...
- 007. Reverse Integer
题目链接:https://leetcode.com/problems/reverse-integer/description/ Given a 32-bit signed integer, rever ...