PB改变数据窗口更新特性的方法

合集下载

PB动态数据窗口

PB动态数据窗口

[PB]-动态数据窗口〓创建动态数据窗口若要动态创建数据窗口,需要使用函数Create,该函数的语法如下:dw_1.Create(syntax{,errorbuffer})其中,dw_1是数据窗口控件的名称,该数据窗口控件要和新创建的数据窗口对象相关联。

syntax是用来描述创建数据窗口对象的确切语法的字符串。

errorburrer是可选项,用来保存创建数据窗口对象过程中发生的错误信息。

如果不指定该参数,就会在发生错误时显示一个错误信息的提示窗口。

如果创建成功该函数返回1,否则返回-1,如果参数为null则函数返回null。

由于Create函数成功创建数据窗口对象后,要改变dw_1数据窗口控件所关联的数据窗口对象,因此,需要重新为数据窗口设置事务对象(使用函数SetTransObject或者SetTrans)。

获取创建数据窗口的语法有多种方法,可以对相关的SQL语句使用SyntaxFromSQL函数,也可以使用对已经创建好的数据窗口对象使用LibraryExport函数。

因为创建数据窗口的语法比较复杂,即使使用了LibraryExport输出已有数据窗口对象的语法,操作起来也相当费劲。

所以,更为通用的是前面一种方法。

这种方法配合一定的编程技巧,让用户指定要创建的数据窗口对象的SQL语句,使用户有更多的自由和选择。

使用这种方法,肯定用到函数SyntaxFromSQL,它的语法是:transaction.SyntaxFromSQL(SQLselect,presetation,err)其中,transaction是事务对象的名称,该事务对象必须正确地设置了相关参数,并且和数据库建立了联结。

SQLselect是用来创建数据窗口的SQL语句,为String 类型。

presentation是要创建的数据窗口对象的显示风格,为String类型。

简单的格式是:Style(Type=presentationstyle)其中Style和Type都是保留字,presentationstyle的取值有Tabular,Grid,Form,Graph,Group,Label和Nup,其中Tabular是缺省类型。

PB数据窗口技巧问答

PB数据窗口技巧问答

PB数据窗口技巧问答数据窗口是PowerBuilder中用于显示、获取和更新数据库表格的对象之一、在使用数据窗口进行数据操作的过程中,有一些技巧和常见问题需要注意和解决。

以下是对数据窗口技巧和问答的详细介绍。

1.如何在数据窗口中添加一个新的数据库表格?可以通过以下步骤在数据窗口中添加一个新的数据库表格:(2) 选择“Insert”菜单,然后选择“Tables”子菜单。

(3)在弹出的对话框中选择要添加的数据库表格,然后点击“OK”按钮。

2.如何在数据窗口中显示特定的数据列?可以通过以下步骤在数据窗口中显示特定的数据列:(2) 在画布区域中右键点击并选择“Insert”菜单,然后选择“Columns”子菜单。

(3)在弹出的对话框中选择要显示的数据列,然后点击“OK”按钮。

3.如何在数据窗口中设置筛选条件?可以通过以下步骤在数据窗口中设置筛选条件:(2) 在画布区域中右键点击并选择“Filter”菜单。

(3)在弹出的对话框中输入要设置的筛选条件,然后点击“OK”按钮。

4.如何在数据窗口中设置排序条件?可以通过以下步骤在数据窗口中设置排序条件:(2) 在画布区域中右键点击并选择“Sort”菜单。

(3)在弹出的对话框中选择要设置的排序条件,然后点击“OK”按钮。

5.如何在数据窗口中添加计算列?可以通过以下步骤在数据窗口中添加计算列:(3)在弹出的对话框中输入计算列的表达式和名称,然后点击“OK”按钮。

6.如何在数据窗口中设置格式化?可以通过以下步骤在数据窗口中设置格式化:(2)在画布区域中选择要设置格式化的数据列。

(3) 在属性窗口中选择“Format”选项卡,然后选择要应用的格式化类型和样式。

7.如何在数据窗口中执行增、删、改操作?可以通过以下步骤在数据窗口中执行增、删、改操作:(1) 在数据窗口画布区域中右键点击并选择“Insert”菜单,然后选择“Rows”子菜单来添加新的行。

(2) 在数据窗口画布区域中右键点击并选择“Delete”菜单来删除选定的行。

PB数据窗口教程

PB数据窗口教程

PB数据窗口教程数据窗口是PowerBuilder中最常用的控件之一、它用于显示数据库查询结果,并提供了对此结果进行浏览、修改和删除等操作的功能。

本教程将为您介绍如何在PowerBuilder中使用数据窗口控件。

第一步是创建一个数据窗口。

在PowerBuilder的“对象”菜单下,选择“新建”>“数据窗口”。

在弹出的对话框中,选择所需的数据源和表格,并点击“确定”按钮。

此时,将会出现一个空白的数据窗口设计器。

接下来,将需要显示在数据窗口中的列添加到数据窗口中。

您可以通过拖拽数据库字段或手动添加列的方式进行操作。

在设计器的左侧,您将看到一个“对象树”面板,在这里选择数据窗口对象,并右键单击以添加列。

完成列的设置后,您可以在设计器的页面中放置其他控件,以增强用户界面。

一些常用的控件包括文本框、复选框、下拉列表框等。

您可以通过拖拽控件到数据窗口设计器的页面中进行操作,并根据需要设置其属性。

下一步是设置数据窗口的数据源。

在数据窗口设计器的菜单栏中,选择“数据”>“设置数据源”选项。

在弹出的对话框中,选择所需的数据源和表格,并点击“确定”按钮。

此时,数据窗口将会显示数据源中的数据。

现在,您可以运行应用程序,并查看输出窗口中的结果。

您可以通过点击数据窗口中的列标题对数据进行排序,通过点击数据行进行选择,并通过单击“查阅”按钮在查询结果中进行导航。

如果需要,您还可以在数据窗口中进行增加、修改和删除操作。

通过本教程,您应该已经了解了如何在PowerBuilder中创建和使用数据窗口控件。

数据窗口是PowerBuilder开发中非常重要的一部分,掌握了数据窗口的使用方法,可以提升开发效率,并为用户提供更好的用户界面和交互体验。

希望本教程能对您有所帮助!。

PB的数据窗口操作

PB的数据窗口操作

PB的数据窗口操作
1. 数据绑定:数据绑定是将数据源与数据窗口进行关联的过程。


过数据绑定,可以将数据库表或查询结果集中的数据与数据窗口中的控件
进行关联。

数据绑定可以在PB的设计时完成,也可以在运行时通过代码
实现。

PB提供了丰富的数据源选择,包括数据库、Web服务、XML文件等。

2.数据显示:数据显示是指将数据从数据源中显示到数据窗口中的控
件上的过程。

数据窗口支持多种类型的数据控件,包括文本框、下拉列表框、复选框等。

用户可以通过数据源中的字段与数据窗口中的控件进行映射,从而实现数据的显示。

4.数据操作:数据操作是指用户可以通过数据窗口对数据源进行增删
改查等操作。

数据窗口提供了一系列的方法和事件,可以方便地对数据源
进行操作。

用户可以通过代码来调用这些方法,实现对数据源的各种操作。

PB获取或操作数据窗口语句的方法

PB获取或操作数据窗口语句的方法

PB获取或操作数据窗口语句的方法
PB(PowerBuilder)是一种用于构建企业级应用程序的集成开发环境(IDE),其中包含了用于操作数据窗口的语句和方法。

以下是获取或操
作数据窗口的一些常用语句和方法:
1.获取数据窗口控件对象:
dw_control = dw_ancestor.Object.dw_controlname
这种方法可以通过数据窗口对象的祖先对象获取数据窗口控件的引用,从而进行后续的操作。

2.设置数据源:
dw_control.SetTransObject(SQLCA)
这个方法会将数据窗口的数据源设置为指定的事务对象(通常是SQLCA对象)。

3.检索数据:
dw_control.Retrieve
这个方法会执行数据窗口的检索功能,从数据源中获取数据并显示在
数据窗口中。

4.更新数据:
dw_control.Update
这个方法会将数据窗口中修改的数据更新到数据库中。

5.取消修改:
dw_control.Reset
这个方法会取消对数据窗口的所有修改,恢复到最后一次检索或更新的状态。

6.设置过滤条件:
dw_control.SetFilter(filter_expression)
这个方法可以设置数据窗口的过滤条件,只显示满足条件的记录。

7.查找记录:
dw_control.Find(filter_expression)
这个方法可以在数据窗口中查找满足条件的记录,并将其选中。

以上是一些常用的获取或操作数据窗口语句和方法,使用这些语句和方法可以方便地对数据窗口进行管理和控制。

PowerBuilder数据窗口编程技巧十则

PowerBuilder数据窗口编程技巧十则

PowerBuilder取得巨大成就的原因就是有Datawindow对象,DataWindow是具有功能强大和灵活多变的特点,本人用PowerBuilder开发过一段时间后,总结出一些技巧,以供广大的PB开发者借鉴使用。

一.如何创建一个报表,如下形式Quantity Running Total5,000 5,0002,500 7,5003,000 10,50012,000 22,500对于Running Total列,我们可使用计算列:CumulativeSum(Quantity for all),即可达到逐渐递增求和的功能。

二.数据窗口的数据送缓冲区之前确认的四个步骤判断数据类型是否正确。

如不正确则触发ItemError事件。

判断数据是否符合有效性规则。

如不符合有效性规则,同样触发It emError事件。

判断是否有数据被改动。

判断数据是否通过ItemChanged事件,如果数据和ItemChanged相斥,将触发ItemError事件。

三.如何在DataWindow中用数据类型为Datetime的列为条件进行查找1.当要查找的日期条件是一常数时使用如下表达式:2.当要查找的日期条件是一个变量时使用如下的表达式:3.当要查找的日期条件是一个DateTime数据类型时使用如下表达式:四.设置数据窗口Boolean型属性的三种方法PowerBuilder提供了三种方法设置数据窗口的布尔型属性,分别是True/False, 1/0, ' Yes'/'No'。

例如:PowerBuilder在处理上以字符串的形式保存属性,而不考虑属性值是布尔型、长整型或是字符型。

为了进一步理解,可以导出一个数据窗口并查看它的原码,可以发现即使是列的颜色属性它也是使用带双引号的数字来表达。

五.如何在DataWindow中快速删除多行在开发过程中可能经常有要进行多行删除的操作,一般都使用循环语句进行操作:一个快速的删除方法是把要删除的行从主缓冲区中移到删除缓冲区中。

12-PB4


记录排序
Rows菜单的Sort…菜单项,用于在客户端实现排序。
用户可以先用鼠标在Source Data列表 框中拖动要排序的列到Clolun列表框中, 然后在Columns列表框中双击要排序的列, 对它进行编辑。
记录过滤
在定义数据窗口的数据源时,通过WHERE、 HAVING子句以及检索参数可以限定了从数据库中 提取的数据。如果上述设置还不能满足条件,那么 可以通过单击Rows菜单的Filter…菜单项来设置。
16.2 数据窗口的行、列显示
数据窗口对象主要用于操作数据库中的 数据。除了不能完成数据库中的数据定义外, 对数据的其他操作都能完成。总体上数据窗 口对象主要由数据源和显示风格两部分组成, 数据源数据窗口对象数据的来源;显示风格 是用于显示和表现数据的方式。创建数据窗 口对象的基本步骤如下:
16.2.1 列对象的显示和编辑
Step 1
新建数据窗口
Step 2
指定数据源
Step 3
Quick Select 对话框
Step 4
选择表和列以后的 Quick Select 对话框
Step 5
设置属性和边框的对话框
Step 6
属性总结
Step 7
结果
数据源用于确定数据窗口对象获取数据的方 式。PowerBuilder支持五种数据源:Quick Select、 SQL Select、Query、External、Stored Procedure。 Quick Select 数据源能够创建简单的SQL Select语句,主要用于从一个表或由外部键连接 的多个表中选择数据列,但不能生成计算列; 以SQL Select方式选取数据源是通过SQL语 句来完成的,它的选取方法一般比Quick Select跟 灵活,一般用于多表操作。

pb数据窗口及事件

Pb数据窗口1.Pb数据窗口介绍(结合实例进行讲解):数据窗口控件数据窗口对象数据窗口对象分为:常用的数据窗口类型:Composite 复合报表数据窗口Crosstab 交叉报表数据窗口Freeform 自由模式数据窗口Graph 图形报表数据窗口Grid 网格数据窗口Group 分组数据窗口n-up 多列显示数据窗口分别举例说明各个数据窗口:杏林妙手中的体检报告中保护上述数据窗口类型。

2.数据窗口数据源类型介绍:Quick select、sql select 、query、external、stored procedure 分别为:通过单表查询,通过多表查询,通过查询对象,通过自定义的字段,通过存储过程。

3.数据窗口控件常用函数介绍:Setredraw(boolean) :设置是否自动刷新报表,true 自动刷新,false不自动刷新。

Describe(string):获取数据窗口指定对象的属性,string为数据窗口表达式例如:“t_1.text“等Modify(string):设置数据窗口指定对象的属性,和describe配合使用,string为数据窗口表达式例如“t_1.text=’123’“描述查找相关设置的方法。

Getitemstring(int,string)、Getitemstring(int,int)Setitem (int,string,string)、Setitemstring(int,int,string)获取数据窗口指定行的字符串列的值,参数:行号,列名(或列值)设置数据窗口指定行的字符串列的值,参数:行号,列名(或列值),设置值(还有获取其他数据类型的类似函数不做赘述!,还可以通过object.列名[行号] 来获取和设置指定行列的值)Deleterow(int)删除行指定行的操作,和循环配合使用的注意事项。

Insertrow(0)插入行,参数0表示在最后一行插入Rowcount()当前数据窗口的行数。

PB的数据窗口操作

ls1= dwo.Primary[row]★SetTransObject语法:dwcontrol.SetTransObject ( transaction )功能:给数据窗口或者datastore控件dwcontrol设置事务对象transaction,缺省事务对象是SQLCA。

返回值:成功设置事务对象则返回1,执行过程中发生了错误则返回-1,有任意参数为Null时返回Null。

★Retrieve语法:dwcontrol.Retrieve ( {, argument, argument . . . } )功能:使用数据窗口控件的当前事务对象检索数据库中的数据。

如果数据窗口控件对应的数据窗口对象定义了检索参数,则应该在该函数中指定检索参数,参数的个数和数据窗口对象的检索变量个数相等,对应的数据类型相兼容。

返回值:返回数据窗口控件主缓存区(PrimaryBuffer)中的记录数,如果检索数据时发生错误则返回-1,如果任意参数为Null则返回Null*该函数的参数和数据窗口对象定义的参数的顺序要相同,类型要兼容。

个数不能少于数据窗口对象定义的参数,即可以等于和多于数据窗口对象定义的参数,多的参数忽略。

★DeleteRow语法:dwcontrol.DeleteRow ( row )功能:删除数据窗口dwcontrol中的第row行数据,如果row为0则表示删除当前行的数据。

返回值:执行成功则返回1,执行错误则返回-1,如果任意参数为Null则返回Null。

*该函数执行后只是将被删除的数据从数据窗口的主缓存区移放到Deleted缓冲区,在数据库中并没有真正删除数据,当正确执行了Update函数并且使用commit语句提交了事务后,才真正从数据库中删除该数据★InsertRow语法:dwcontrol.InsertRow ( row )功能:在数据窗口dwcontrol的第row行前插入一行空白数据。

当指定row为0时,表示在当前行之前插入一行空白数据。

PB数据窗口技巧问答

PB数据窗口技巧问答一、控制数据窗口的显示方式1.使用数据窗口的打开方式:数据窗口可以在工具栏上选择打开方式,如:只读、可更新、可插入等。

3.使用数据窗口对象属性:在对象属性中设置数据窗口的显示方式,如设置为只读或可更新。

二、使用过滤器1. 使用过滤器自动过滤:在PowerBuilder中,可以通过在数据窗口对象的过滤器属性中设置过滤条件,自动过滤查询结果。

2.使用过滤器窗口:在运行时,可以使用过滤器窗口手动设置过滤条件,实时过滤查询结果。

三、使用计算列1.创建计算列:计算列用于在数据窗口中显示计算结果。

可以通过在数据窗口对象的计算列属性中设置计算表达式来创建计算列。

2. 使用计算列函数:PowerBuilder提供了一系列的计算列函数,可以通过在计算列属性中设置函数来实现复杂的计算操作。

四、使用排序功能1.使用数据窗口控制台进行排序:在数据窗口控制台中,可以使用排序按钮对查询结果进行排序。

2.使用数据窗口对象属性进行排序:在数据窗口对象的排序属性中设置排序条件,可以在运行时自动对查询结果进行排序。

五、使用数据窗口查询功能1.使用查询按钮:在数据窗口中添加查询按钮,可以方便用户执行查询操作。

2.使用自定义查询功能:可以在数据窗口对象的SQL属性中设置自定义查询语句,从而实现更高级的查询操作。

七、使用导航功能1.使用导航按钮:在数据窗口中添加导航按钮,可以方便用户浏览查询结果。

2. 使用导航函数:PowerBuilder提供了一系列的导航函数,可以通过调用这些函数实现数据的导航操作。

八、使用图形功能1.添加图形控件:可以在数据窗口中添加图形控件,用于显示图形数据。

2. 使用图形函数:PowerBuilder提供了一系列的图形函数,可以通过调用这些函数实现图形数据的处理和显示。

九、使用数据窗口布局功能1.使用数据窗口布局:可以在数据窗口对象的布局属性中设置布局方式,实现不同的显示效果。

2.使用数据窗口常规属性:在常规属性中,可以设置数据窗口的大小、位置、标题等。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

改变数据窗口更新特性的方法打开一数据窗口,从Rows菜单中选择的"Update Properties…"系统显示"Specify Update Prorerties"对话框:A、如果不允许数据窗口更新数据库,那么就不要选中复选框"Allow Updates",单击"OK"按钮关闭对话框。

如果要禁止用户修改数据窗口的某列,那么在数据窗口画笔中将此列的TabOrder值设为0。

B、如果允许数据窗口更新数据库,选中复选框"Allow Updates"。

C、在"Table To Update"下拉列表框中选择要更新的表D、在"Where Clause For Update/Delete"中选则更新方式。

E、在"Updatesble Cloumns"通过单击选择可更新的列,被选中的列将加亮显示。

F、选择了要更新的列后,在"Unique Key Column(s)"列表框中定义唯一键,这个唯一键必须能够在表中唯一的标识一条记录。

G、在"Key Modification"组框中选择当唯一键列更新时数据行的更新方式。

H、如果当前表中包括了自动增长序号的列(称做标识列,并非所有的数据库都具备此特性),那么在"Indentity Column"下拉列表框中指定该列。

I、单击"OK"关闭对话框。

注意事项:如果在"Indentity Column"下拉列表框中指定某列为标识列,那么就不要把该列选择为可更新列。

否则,如果把该列选择为可更新列,那么数据窗口产生的任何更新数据库的Update语句都将失败。

关于"Specify Update Prorerties"对话框中的"Key Modification"组框的详细意义。

"Key Modification"组框中两个选项指定当唯一键列被更新时的数据行的更新方式。

A、选中"Use Delete Then Insert"单选钮,在唯一键列被更新的情况下,PoweBuild将首先删除原来的行,然后使用新的键值插入新行。

(这种方法减少了数据库重新组织数据的次数,但也存在一些潜在的问题,当某个表的主键是另一个表的外键并在定义外部键时将删除方式定义同时删除(级联删除)时,应用程序可能并不想使用"Use Delete Then Insert"选项。

)B、选中"Use Update"单选钮,在唯一键列被更新的情况下,PoweBuild修改行的键值(并非所有的数据库都支持主键更新,也就是说,如果您使用的数据库管理系统不支持主键更新,在这里您就不能选择"Use Update"选项)。

这种方法避免了与外部键相关的级联删除问题。

关于"Specify Update Prorerties"对话框中的"Where Clause For Update/Delete"的三个选项的具体含义:A、Key Columns当选中"Key Columns"单选钮时,数据窗口只使用"Unique Key Columns"列表框中选择主键来构造Where 子句,该选项经常在单用户应用程序环境中使用,当PowerBuild生成Update或Delete语句时,它比较某行键值列的原始值与数据库相应行键值列的值,如果两者相等,则更新操作或删除操作被成功的执行。

B、Key and Updateable Columns当选中"Key and Updateable Columns"单选钮时,PowerBuild在创建的Update或Delete语句中将键值列的原始值与可更改列的原始值与数据库的相应值进行比较。

当这些值相等时,修改或删除相应的行(即Update或Delete语句成功执行)。

C、Key and Modified Columns当选中"Key and Modified Columns"单选钮时,PowerBuild在创建的Update或Delete语句中将键值列的原始值和已修改可更改列的原始值与数据库的相应值进行比较。

当这些值相等时,修改或删除相应的行,该选项是对数据完整性的保护和操作并发性的折中。

查看文章PowerBuilder程序中的并发控制2008-11-23 20:32并发能力是指多用户在同一时间对相同数据同时访问的能力。

一般的关系型数据库都具有并发控制的能力,但是这种并发功能也会对数据的一致性带来危险。

试想若有两个用户都试图访问某个银行用户的记录并同时要求修改该用户的存款余额时,情况将会怎样呢?我们可以对PowerBuilder中的DataWindow进行设置来进行并发控制。

所谓并发控制就是指在用户数据修改的过程中保证该数据不被覆盖或改变的方式,在下面的例子中我们将看到如何设置DataWindow来控制开发访问。

公司的某员工在银行前台取款2,000元,银行出纳查询用户的存款信息显示银行存款余额20,000元;正在这时,另一银行帐户转帐支票支付该帐户5,000元,机器查询也得到当前用户存款20,000元,这时银行的出纳员看到用户存款超过了取款额,就支付了客户2,000元并将用户存款改为18,000元,然后银行的另一名操作员根据支票,将汇入的5,000元加上,把用户的余额改为25,000元,那么数据库管理系统是否可以接受这些修改呢?在DataWindows的设计中,我们选择菜单RowsUpdate…,会出现Specify Update Characteristics的设置窗口,在这个窗口中我们设置Update语句中Where子句的生成,以此来进行开发控制。

在这里有三个选项,我们分别看一看在本例中这三个选项的结果:(1)Key Columns:生成的Where子句中只比较表中的主键列的值与最初查询时是否相同来确定要修改的记录。

在上述的例子中,转帐支票的操作将覆盖出纳员做出的修改,这样银行损失两千元。

(2)Key and Updateable Columns:生成的Where子句比较表中主键列和可修改列的值与最初查询时是否相同。

在上例中两次查询出的结果都是有两万余额,当第一个人修改余额时,余额仍是二万元,所以修改成立,而支票转帐操作时余额已不是二万,所以该列不匹配,修改失败。

(3)Key and Modified Columns:Where子句比较主键和将要修改的列,在本例中,结果与Key and Updateable Columns的选择相同,因为余额已改变,不再与最初的查询相同,因此仍然不能修改。

让我们作另外一个假设,我们把银行后台作支票转帐操作改为冻结用户存款,即把状态字段的值改为冻结,而且事件发生的次序如下面例子所述,前台出纳的修改能不能成立呢:(1).Key Columns:Where子句只比较主键值,显然出纳员的修改是允许的。

(2).Key and Updateable Columns:生成的Where子句包括比较所有可修改的列,因此出纳修改时Statue字段为冻结与出纳查询时的tive不符,修改失败,同时显示错误信息。

(3).Key and Modified Columns:Where子句的比较包括主键和要修改的列,由于本列中修改列仍为20,000元没有变化,所以出纳的修改可以成立。

在本例中,我们可以看到Key and Updateable Columns的选项最严格,可以避免出现状态列发生改变时余额作修改的错误,但是这也会禁止我们作一些本当允许的并发修改,如出纳修改存款余额,而业务员修改用户的联系地址等。

因此我们应当根据实际情况,选择适当的Update设置。

根据我们使用数据库的不同,我们还有一些其他的控制并发访问和修改的选择方案,如对数据加锁。

锁是一个用户避免其他用户对指定行作修改的操作。

在结束一个事务如执行commit,rollback,disconnect等语句时自动将锁释放。

如果您使用的DBMS支持锁的操作,在Power-Builder的DataWindow设计时,Select 语句可在from子句中加上with holdlock:即在data Window的SQL Window中,在表窗口的标题处点击右鼠标,弹出菜单的最后一个选项即为Holdlock。

选择该项,生成的SQL语句将在retrievel()函数执行后将所查询的数据加锁,以避免其他用户的修改访问,直至commit,rollback等事件发生后解锁。

这种方式带来的问题是,当用户查询完数据后可能离开计算机长时间不用,这段时间内其他用户均无法修改数据。

此外有些DBMS如Sybase等不支持行级锁,也就是说当你对某一行查询时更多的行都被上了锁,这就更增加了并发处理的局限性。

另一个值得注意的问题是在多窗口应用中某一个窗口的事务提交将会导致使用一事务中其他数据窗口的查询行解锁,这时修改将可能发生错误。

某些DBMS系统支持一个称作"时间戳(timestamp)"的数据项来控制并发性。

每张表中都有一个时间戳的数据列,当Insert语句或Update语句对数据行作修改时该列自动被修改为当前时间。

当你要作修改时,where子句可检查时间戳列在查询时和修改时两个值是否相符,以此来确保您做出的修改不会覆盖别人的修改,因此这种确认方式与key and Updateable Columns选项相同。

即使两个用户对同一行的不同列作修改,笠桓鲂薷恼咭步О堋T诔S玫墓叵敌褪菘庵蠸ybase和Microsoft的SQL Server支持时间戳的使用。

而在PowerBuilder中,不管用户后台连接何种数据库,只要表中带有timestamp的列名且数据类型为datetime,PB将自动忽略Update characteristics的选项,而在where子句中生成主键和时间戳列的比较。

如果您所用的数据库不支持时间戳但支持触发器,您也可以在表中增加一列整数型的列。

当有对表中某种记录作修改时,该列自动加1。

下列使用的是Watcom 数据库,对Shipper表增加Updcnt字段并作两个触发器,这样任何用户或进程试图修改某行记录时,该字段均可发生变化。

对INSERT触发器的编写如下:DROP TRIGGER INS—SHIPPER’CREATE TRIGGER SHIPPER BEFORE INSERT ON SHIPPERREFERENCING NEW AS NewvalueFOR EACH ROWBEGINSET newvalue.UpdCnt=newvalue.UpdCnt+1;END'同理可编写UPDATE触发器。

相关文档
最新文档