数据窗口对象非常强大的原因之一就是能够很容易地修改数据库。当用户修改了数据窗口中的数据,插入了新的数据行或者删除了数据行以后,只要调用update()函数就可以将修改了的数据保存到数据库中。但是,这需要一个前提,就是必须设置数据窗口的修改属性。

数据窗口要修改数据表,首先清楚数据窗口只能修改一个数据表。当数据窗口的数据来源于不止一个数据表时,可以用脚本控制数据窗口的修改属性来对数据表逐个进行修改,这种技术在后面有关章节介绍。下面介绍一次修改一个数据表的设定方法。

当数据窗口是用来接受用户的手工录入数据时,应该设置两方面的属性才能确保数据窗口能够用来修改数据表。一个是修改数据窗口的修改属性,另一个是用户可以修改的字段的相关属性值。

首先介绍数据窗口的修改属性的设置。在数据窗口画板中,使用菜单项Rows->Update Properties,弹出如图6-41所示的窗口。


   数据窗口的所有修改属性都集中在该窗口中。如果数据窗口对应的数据表中定义了主键或者惟一性索引,则数据窗口创建时缺省的就是允许修改,并且正确设置了所有的修改属性。否则就需要手工进行设置。前面介绍过,当增加、删除或者重新选择了字段时,PowerBuilder将数据窗口的修改属性置为不允许,这时也应该进行手工设置。

首先应该选中Allow Updates选项,只有选中该选项,才允许继续进行其他属性的设定。在Allow Updates右面的下拉列表框叫做Table to Update,只能在该下拉列表框中选择一个,并且必须选择一个数据表名,选中的表就是要被更新的表。

选中了Allow Updates属性后,接下来就要指定在数据窗口中哪些列被更新。在Updateable Columns列表框中用鼠标单击被更新的字段。当数据窗口中的字段来自不止一个数据表时,这时一定要选择同一个表中的字段,因为一个数据窗口一次只能更新一个数据表。当数据窗口中增添了字段时,新增添的字段往往是不允许修改的,一定要在该列表框中选择该字段。

选择了可以修改的字段后,就应该在Unique Key Columns(s)列表框中选择惟一标识一行的列。如果在定义数据表时定义了主键,单击右面的Primary Key按钮可以在该列表框中选中主键。

Where Clause for Update/Delete组框中包含了三个选项,用来配置如何在Update和Delete SQL语句中构造where字句的。这三个选项为数据库加锁提供了三种不同的选择。当某行被选中时,用户可以通过DataWindow对象来提供完整性保护,可以防止其他用户检索该行。这三个选项是:Key Columns、Key and Updateable Columns和Key and Modified Columns。下面分别详细介绍。

1.Key Columns

当开发单用户应用程序或者用户都以加锁方式访问数据库时可以选中该选项。该选项表示数据窗口只使用在Unique Key Column(s)列表框中指定的惟一列进行数据更新。使用这种方式来修改数据库,并发性很高,不同的用户都可以并发地访问数据库,但是数据的完整性却非常差。因此要保证数据完整性,只有在单用户应用程序或者加锁访问方式下才使用这种修改方式。

例如,在add_book(通讯录)数据表中定义了5个字段,id为主键,name、address、telephone、ICQ四个字段为可修改字段,某数据窗口包含这5个字段并且使用Key Columns更新数据库。有如下一条数据:

id:230602710327574

name:朱义

address:胜利油田

telephone:945-8557021

ICQ:39661314

假设甲用户修改了这条数据,将name改为“郭宝利”,数据窗口产生如下的UPDATE语句:

update add_book

set name = "郭宝利"

where id = "230602710327574";

其中的where字句中只包含在Unique Key Columns中指定的字段id,用该字段来确定要修改数据库中哪行数据。该update语句将成功执行。如果乙用户要将address字段修改为“冀东油田”,甲、乙用户同时并发修改id为230602710327574的数据,都会修改成功,但会产生如下的数据:

id:230602710327574

name:郭宝利

address:冀东油田

telephone:945-8557021

ICQ:39661314

两个人同时修改了一条记录,本来地址是胜利油田的郭宝利却成了冀东油田的了。

2.Key and Updateable Columns

这种修改方式是缺省的修改方式,它用主键列和可以修改的列来创建where子句,具有很高的数据完整性,但是并发性却不是太好。推荐使用这种修改方式。

像上面例子一样,如果甲用户做修改操作,保存数据时将产生如下的SQL语句:

update add_book

set name = "郭宝利"

where id = "230602710327574"

and name = "朱义"

and address = "胜利油田"

and telephone = "945-8557021"

and ICQ = "39661314";

该SQL语句中的where子句包含了主键id和所有的可修改字段。如果乙用户是在甲保存修改了的数据之前检索的数据,当乙用户要将address修改为“冀东油田”时,产生如下的SQL语句:

update add_book

set address = "冀东油田"

where id = "230602710327574"

and name = "朱义"

and address = "胜利油田"

and telephone = "945-8557021"

and ICQ = "39661314";

此时,由于甲用户已经修改了数据,将name改成了“郭宝利”,所以乙用户的where子句中指定的数据在数据库中已经不存在了,乙的修改不成功,从而保证了数据的完整性。

3.Key and Modified Columns

该方法是上面两种方法的折衷,当不同的用户并发修改同一行数据的不同字段时,都能成功修改,所以它的并发性有了一定的限制,数据的完整性比第一种修改方式有所提高。这种修改方式使用主键和数据发生了变化的列来产生where子句。同样,在上面的例子中,甲用户要将“朱义”修改为“郭宝利”会产生如下的SQL语句:

update add_book

set name = "郭宝利"

where id = "230602710327574"

and name = "朱义";

这时的where子句中只包含主键id和要修改的字段name。如果此时乙用户并发修改数据,要将id为“230602710327574”的用户的address修改为“冀东油田”,乙用户也会成功修改。

4.时间标记

如果数据库管理系统支持时间标记,则可以在DataWindow对象的结果集中包含时间标记来获得最大的数据完整性。PowerBuilder将自动为更新和删除操作的where子句加上时间标记,而不显示在可更新列的列表中。Oracle、SQL Server完全在服务器上处理时间标记,在DataWindow中不要求有额外的工作。

5.Key Modification

该组框用来指定当用户修改了主键时,数据窗口如何来更新数据表中的主键字段。有两种选择,Use Delete then Insert和Use Update。

第一个选项是先删除原有主键值,然后再使用新的主键值插入一个完整的行。使用这种更新主键的方式可以减少组织数据的工作量,但在数据库中各个数据表之间存在父子制约关系,并且依赖该主键的外部键被指定为级联删除时,操作就不会成功的。因为级联删除方式要求当依赖主键的外部键有数据时就不能删除主键。

当DBMS允许更新主键列时,可以使用该选项,该选项直接修改主键值,所以防止了级联删除带来的操作不成功的问题。

6.Identify Column

该下拉列表框用于为下拉列表框中所指定的列(通常是主键列)生成序号,当且仅当DBMS支持序号生成时该作用才有效。

当正确进行了上述所有操作后,单击OK按钮即完成了修改属性的设置。如果数据窗口允许手工录入数据,接下来就应该设置可修改字段的相关属性了。主要包括如下属性:

l      字段的Tab Order值。

l      字段的Protect属性。

l      字段的DisplayOnly属性。

l      字段的Visible属性。

上述属性前3个中任意一个都可以让用户无法修改字段中的数据;最后一个属性决定字段是否可见,不可见的字段不管其他属性如何设置,用户都无法修改字段中的数据。

首先介绍如何设置字段的Tab Order值。使用菜单项Format->Tab Order可以在Design窗口显示各字段的当前Tab Order值,用鼠标单击要修改Tab Order值的字段,然后手工将Tab Order值改为非0即可。在设置Tab Order时要注意三点:

(1)用户可以手工修改的字段,其Tab Order值不能为0。

(2)在数据窗口修改属性中,不允许修改的字段其Tab Order值应该为0,或者其Display Only属性应该选中。

(3)Tab Order取值决定字段获得焦点的顺序。在数据窗口中使用Tab按钮在字段间切换时,Tab Order取值小的首先获得焦点,最大的最后获得焦点。

字段的Protect属性设置字段是否被保护。如果该属性设置为1,则不允许用户修改字段中的数据,即使Tab Order设置为非零。字段的DisplayOnly属性决定字段中的内容是否只用来显示,当属性设置为1或者True时,字段中的数据不允许用户修改,不管其他几个属性是如何设置的。Protect属性只能使用表达式,选中字段后在属性视窗General属性中单击右侧的红色小按钮(如果已经有表达式,则按钮为绿色),进入到表达式输入对话框,输入该属性的表达式即可。比如,设置用户不能修改字段id原来的数据,可以输入如下的表达式:

if(isRowNew(),0,1)

字段的Display属性在属性视窗Edit中,选中该选项表示该字段中的数据只用来显示,不允许用户修改。该属性不能使用表达式。在PB中,编辑类型的控件都有该属性,并且属性的作用也是相同的。

当字段的Tab Order值为0时,肯定不能获得焦点,但是非0时也不一定能获得焦点,还得看字段的Protect属性是否设置为1;当字段的Tab Order值不为0,Protect属性不为1并且字段的Visible属性为True时,肯定可以获得焦点。DisplayOnly属性和焦点是否能够获得无关。

【PB】数据窗口的修改属性相关推荐

  1. pb 修改数据窗口种指定字段位置_如何在PB数据窗口中修改数据---设置数据窗口的更新属性...

    如何在 PB 数据窗口中修改数据 --- 设置数据窗口的更新属性 数据窗口对象非常强大的原因之一就是能够很容易地修改数据库.当用户修 改了数据窗口中的数据,插入了新的数据行或者删除了数据行以后,只要调 ...

  2. pb 数据窗口更新mysql_如何在PB数据窗口中修改数据---设置数据窗口的更新属性...

    如何在PB数据窗口中修改数据 如何在PB数据窗口中修改数据---设置数据窗口的更新属性 数据窗口对象非常强大的原因之一就是能够很容易地修改数据库.当用户修改了数据窗口中的数据,插入了新的数据行或者删除 ...

  3. pb 修改数据窗口种指定字段位置_在PB中控制 数据窗口 列修改属性.doc

    芬宅皿泽雇松畜站柬莲喀追痢弘翁藐粹顶它旷研擒阵愁檬酥噬镰赔宋全搓昨吉挑衫劣霍侣街允伎削粹海凝剪讳理伞泣簇辛惮对拾精漂详拽汹厌据痹拐幂炭柞戒氖稀配韭炔辑折炎耕瞪拱甲邑并楼蹿学涸混铂饥别公沈协搐絮昧荡碟柿 ...

  4. pb数据窗口一些技取

    标识当前行 〓标识当前行也就是给当前行加上醒目的标记,以便用户更清楚当前要对哪一行数据进行操作,尤其当用户的操作中间有停顿时,继续进行操作就特别需要知道哪个是当前行.这里的当前行不要狭隘地理解成仅仅是 ...

  5. PB 数据窗口数据导入Excel, 如果存在则追加,不存在则创建。

    PB 数据窗口数据导入Excel, 如果存在则追加,不存在则创建. [转] OLEOBJECT ExcelServer,Excelbooks long ll_count ,ll_loop,ll_i,l ...

  6. PB数据窗口9种风格

    Grid: 表格风格 字段横向排列在detail band中,标签横向排列在header band中,和字段相对应,字段和字段之间有网格线分隔,类似于电子表格.在数据窗口的预览状态下可以调整字段的顺序 ...

  7. pb数据窗口控件OLE

    OLE自动化是不同应用程序之间进行通讯的一个标准. OLE自动化的工作方式是:通讯被动方(OLE服务器)应用程序向通讯主动方(OLE客户机)应用程序提供一个以上可供其调用的OLE自动化对象类型,OLE ...

  8. PB数据窗口每页打印固定行

    数据窗口每页打印固定行     第一步:增加一个计算列,此计算列必须放在Detail段,Expression中输入:   ceiling(getrow()/10)  每页打印10行 第二步:定义分组, ...

  9. pb数据窗口显示图片_HTAP数据库系列 | 企业级数据仓库如何应对个性化营销?

    传统数据仓库是基于业务主导,面向分散数据源,提供数据采集.加工.处理.存储.应用等功能.采用统计汇总等方式实现KPI.报表.仪表盘等功能满足业领导宏观决策需要. 然而随着大数据时代的到来,银行业业务发 ...

  10. pb数据窗口怎么调用视图_大数据架构如何做到流批一体?

    阿里妹导读:大数据与现有的科技手段结合,对大多数产业而言都能产生巨大的经济及社会价值.这也是当下许多企业,在大数据上深耕的原因.大数据分析场景需要解决哪些技术挑战?目前,有哪些主流大数据架构模式及其发 ...

最新文章

  1. 集合框架之三种迭代的能否删除
  2. 混沌与分叉python 实现
  3. 【干货·课程】言有三的深度学习从入门到上线课程
  4. 登陆失败bdstoken_解决PanDownload登录提示账号登录失败,获取bdstoken失败问题
  5. 提高电脑开机速度的一些基本操作
  6. mysql 中某个字段相同的数据拼接起来
  7. springboot使用redis做session会话管理
  8. [Translation]Silverlight 4-MVVM with Commanding and WCF RIA Services
  9. Atitit sumdoc index 2019 v6 t56 .docx Atitit sumdoc index s99 目录 1. Zip ver 1 1.1. C:\Users\Adminis
  10. Nginx部署ssl安全证书(腾讯云DV证书)
  11. 计算机二进制转十进制怎么yun,二进制 十进制 十六进制
  12. 2010-7-31 看电影
  13. html 给文字加图片背景,如何给文字添加背景图?给文字填充图片背景色的操作方法...
  14. 第一行代码中过时的通知写法更正;
  15. matlab中的函数简化,怎么简化solve函数的求解结果
  16. 精华文章置顶--使用VSCode 进行IRIS 开发
  17. MATLAB的符号运算基础
  18. 做自媒体18个月,倒欠38万,一个自媒体创作者的自述
  19. torch.randn()函数
  20. 大战AV终结者(一)……AV简介

热门文章

  1. 捋一捋Unified Language Model Pre-training for Natural Language Understanding and Generation
  2. 代码重构(一)原理和规范
  3. 创建OpenGL Context(WGL)
  4. no javac in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
  5. 熵权法stata程序
  6. python去除图片水印api_python opencv去图片水印
  7. 强世功:中美“关键十年” ——“新罗马帝国”与“新的伟大斗争”
  8. 2、孟子·公孙丑上 孟子·公孙丑下
  9. Android中BottomSheetDialog如何设置透明背景
  10. VMware SDS之九: VMware软件定义存储鲜为人知的另一部分