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主要有两大重要动能: 表单 ...
随机推荐
- TypeScript----接口和泛型
接口 TypeScript的核心原则之一是对值所具有的结构进行类型检查.它有时被称做“鸭式辨型法”或“结构性子类型化”.在TypeScript里,接口的作用就是为这些类型命名和为你的代码或第三方代码定 ...
- [题解] [CF518D] Ilya and Escalator
题面 题解 期望dp入门题 设\(f[i][j]\)为到\(i\)时间有\(j\)个人上了电梯的概率, 我们可以得到转移方程 \[ f[i][j]=\begin{cases}f[i-1][j]\cdo ...
- LeetCode 134. 加油站(Gas Station)
题目描述 在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升. 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升.你从其 ...
- [Java]算术表达式求值之三(中序表达式转二叉树方案 支持小数)
Entry类 这个类对表达式的合法性进行了粗筛: package com.hy; import java.io.BufferedReader; import java.io.IOException; ...
- centos7编译安装Python 3.6.8 后用pip3出现SSL未配置问题(import ssl失败)解决方法
下载源码编译安装openssl https://www.openssl.org/source/openssl-1.0.2j.tar.gz ./config --prefix=/usr/local/op ...
- H5 页面适配几种展现形式
1.contain 模式:以内容中心为基点按照视觉稿的宽高比缩放以适配窗口显示全页面内容,窗口与内容的宽度比或高度比之间较小者缩放填满窗口,当窗口宽高比和视觉稿不同时,另一方向的两侧出现留空部分. 2 ...
- vue 引入jQuery
http://blog.csdn.net/cly153239/article/details/53067433 vue-cli webpack全局引入jquery 首先在package.json里加入 ...
- 2019-8-12未命名文件 sdfsf
2019-8-12未命名文件 sdfsf 新建模板小书匠 欢迎使用 小书匠(xiaoshujiang)编辑器,您可以通过 小书匠主按钮>模板 里的模板管理来改变新建文章的内容.sdfsdfsdf
- 代码实现:键盘录入一个int类型的整数,对其求二进制表现形式
package com.loaderman.test; import java.math.BigDecimal; import java.math.BigInteger; import java.ut ...
- linux系统安装zint
背景: 今天代码拉下了发现启动时报错,一看原来是同事用了zint的gem,我又没安,然后花了点时间解决,但其中踩了几次坑,所以打算记录下: 一.zint开源库的介绍 zint 是一个开源的条码编码库, ...