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的应用,感觉非常有用,这样使用后,如果有新的银行信息加入时,只要对数据库中的银行种类表进行维护,客户端的下拉列表即可同时更新,非常方便。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
运行效果 http://hi.csdn.net/attachment/201012/9/0_1291865794j998.gif ************************************************************************* PowerBuilder Foundation Class Library Version 9.0 R E L E A S E N O T E S Copyright ?1996-2003 Sybase, Inc. and its subsidiaries. All rights reserved. ************************************************************************* Last Updated: January 17, 2003 ************************************************************************* Please take a few minutes to review this file for fixes that were made in PowerBuilder 8.0.2 and 9.0. ************************************************************************* BUG FIXES IN PFC 9.0 ************************************************************************* CR300376 Object: pfc_n_cst_fileSrv, pfc_n_cst_fileSrvwin32 Method: OfGetDiskSpace Fix: Method returned a negative number when the calculated amount of free disk space exceeded 2 gigabytes. Added new method of_GetDiskSpaceEx that takes decimals as arguments instead of longs. of_GetDiskSpace will be obsolete in a future release. ************************************************************************* BUG FIXES IN PFC 8.0.2 ************************************************************************* PFC.PBR CR256529 Fix: The PFC.PBR file can be used to copy bitmaps and dynamically referenced DataWindow objects into the executable file for deployment. The following bitmap files that were removed from PFC have now been removed from the PFC.PBR file: details.bmp, helptop.bmp, largeico.bmp, listv.bmp, and smallico.bmp. ======================================================== PFC DataStore CR261992 Object: pfc_u_ds Method: pfc_print/pfc_printdlg Fix: Changed the return code test to check for 1 on success, otherwise there is an error or the user cancelled. Fix: Set the
Compose DataStore 是一种用于存储和读取键值对数据的 Jetpack Compose 组件。下面是一个使用 Compose DataStore 的代码示例: ```kotlin import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.setValue import androidx.compose.runtime.remember import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.platform.LocalContext import androidx.lifecycle.lifecycleScope import androidx.lifecycle.viewmodel.compose.viewModel import androidx.datastore.core.DataStore import androidx.datastore.preferences.core.Preferences import androidx.datastore.preferences.createDataStore import kotlinx.coroutines.flow.collect import kotlinx.coroutines.launch data class UserSettings(val darkMode: Boolean) class UserSettingsViewModel(private val dataStore: DataStore<Preferences>) { private val userSettingsKey = preferencesKey<Boolean>("dark_mode") val userSettingsFlow = dataStore.data .map { preferences -> UserSettings( darkMode = preferences[userSettingsKey] ?: false ) } suspend fun updateUserSettings(userSettings: UserSettings) { dataStore.edit { preferences -> preferences[userSettingsKey] = userSettings.darkMode } } } @Composable fun UserSettingsScreen(userSettingsViewModel: UserSettingsViewModel = viewModel()) { val userSettings by userSettingsViewModel.userSettingsFlow.collectAsState(UserSettings(false)) val context = LocalContext.current val darkMode by rememberSaveable { mutableStateOf(userSettings.darkMode) } LaunchedEffect(Unit) { userSettingsViewModel.userSettingsFlow.collect { settings -> darkMode = settings.darkMode } } Column { Switch( checked = darkMode, onCheckedChange = { newDarkMode -> lifecycleScope.launch { userSettingsViewModel.updateUserSettings(UserSettings(newDarkMode)) } } ) } } @Composable fun App() { val dataStore = createDataStore(name = "user_settings") val userSettingsViewModel = remember { UserSettingsViewModel(dataStore) } UserSettingsScreen(userSettingsViewModel) } ``` 这个示例演示了如何使用 Compose DataStore 来存储和读取用户设置的暗黑模式。通过 `UserSettingsViewModel` 类,我们可以获取和更新用户设置,并通过 `UserSettingsScreen` 组件来展示和修改用户设置。在 `App` 组件,我们创建了一个名为 "user_settings" 的 DataStore,并将其传递给 `UserSettingsViewModel`。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值