好文档 - 专业文书写作范文服务资料分享网站

DataWindow Object 的几个有用的属性

天下 分享 时间: 加入收藏 我要投稿 点赞

DataWindow Object 的几个有用的属性

一、dw_1.Object.DataWindow.Column.Count 属性记录的是 DataWindow 中的列数。 DataWindow 中的所有对象都有 Type 属性,通过访问他们的 Type 属性可以得知他们是 Column、Compute、Text 等等对象。 动态改变 DataWindow 某一列的 Edit Style : 将某一列的原来的 Edit 风格变成 DropDownListBox dw_1.modify(\。 在 DataWindow 控件中有许多事件的参数都是 DWO。DWO 全称 DataWindowObject 。它指的是 DataWindow 中的一个对象。例如一个计算列、Text 框、Picture Box 等等 对象,或者是 DataWindow 本身。通过访问 DWO 我们就可以知道当前用户触 发的是哪个对象。例如: Dwo.Name = \//说明此时 DWO 代表 Datawindow Object 本身。 Dwo.band = \说明该 dwo 位于 header 区。 二、DataWindow 内部函数

DataWindow 有许多内部函数(只能在 DataWindow 画笔中使用),它们都不能从 PowerScript中直接调用。不过我们可以利用 DataWindow Control 的函数 Describe 与 DataWindow 的 Evalute 结合起来运行。例如 DataWindow 的内部函数 LookupDisplay ( Column ) 则是获取某一列上的显示值的函数。它与 Powerscript 中的 GetItem 函数不一样,GetItem 函数获取的是数据值。 例:dw_1.Describe ( \1)\) 获取 productid 列的第一行记录当前的显示值。 DataWindow 中都有那些内部函数,以及各个内部函数的使用与用意的资料我们目前都没有找到。我们也只是一点一点的积累,如果有那位朋友知道的话,可千万要拿出来与大家分享哦!!! 三、Browse 的使用

Browse 是 PB 开发环境中的一个画笔,与 Library、Database、DataWindow 一样。但是却很少有人提到过它。Browse 其实是一个非常有用的工具。有人抱怨知道如何更改 DataWindow Object 属性,但是又不知道究竟有哪些可以修改。使用 Browse 就简单了。Browse 中的 Tab 控件上的 DataWindow 页列出了当前应用程序所有的的 DataWindow Object 。同时窗口的右边列出了 DataWindow Object 具备的所有属性。右击一个属性,选择Copy 。此时 PB 就将访问该属性的脚本格式 Copy 到粘贴板上去了。你只需在你的源代码中 Paste 即可。Browse还有许多其他用途。 Browse 可以以树状的形式将你应用程序中的所有的 UserObject 或着 Window 之间的继承关系全部显示出来。对于 PFC 的初学者将是受益非浅,它可以帮你把 PFC 所有对象之间的继承关系清清楚楚的现实出来。Browse 中的 OLE页中也非常有用,它将你机器中的所有 OLE对象、ActiveX对象、COM对象都清清楚楚的列出来。如果你想知道你的机器中有哪些组件可以使用用它可以轻松找到。关于 Browse的具体使用说明本人也从没见过,我想可能是大家都觉得没什么可讲的吧。其实想想也是,所有操作只需点右健,当然没什么可以多说了!顺便问一句 PB 是不是很强大?

四、PB 的怪现象

有许多 PB 开发人员都抱怨 PB 总是无缘无故的出现一些怪毛病。那么我告诉大家一套规则: “如果你一大早来到 PB 面前,发现程序无缘无故出了 Bug 。但是又死活想不出毛病在哪(昨晚还是好的,今早就坏了)。立即将你的应用程序的所有对象都重新生成一边(在 Library 画笔中使用 Regenerate),最好是按继承顺序 Regenerate 一边。说不定 Bug 就消失了”。 不要觉得这条规则好简单,说不定这条归则就可以帮你节省大量的时间。你们有没有想过 Powersoft 公司为什么要在 PB 中提供一个 Regenerate 功能。我觉得它就是为了应付这种毛病。因为,除了这种情况下,我再也想不出使用 Regenerate 的理由。 PB 开发 COM 存在的问题 安装了 PB gernerate 的朋友可以使用

五、PB 开发 COM 组件,但是目前还只能开发进程中 COM 。PB 开发 COM 有几个问题需要注意一下。

1. 使用 PB 的 Project 画笔编译好了 COM 组件后还不能使用,还要将对应的 PBL 编译成 PBD 或则 DLL,具体是 PBD 还是 DLL 要看在编译 COM 时如何设定的。一般默认情况是 PBD 。编译好了 PBD 或 DLL后,才能正常使用 COM 组件。当然使用前 COM组件还应注册。如果你要发行你的 COM

组件,还必须要 PB 的 DDDK 中的 DLL,就发行应用程序一样,还需要 PB 的 DLL 支持。

2. 不支持函数覆盖(OverWrite) PB 制作 COM 时是将不可视用户自定义对象(不妨命名为 n_cst_object)编译成 COM 组件的接口。它将 n_cst_object 所有共有属性、函数、事件都编译成 COM 组件的一个结构。但是如果这个n_cst_object 还有一个父类,并且 n_cst_object还覆盖了父类中的函数,那么此时编译 COM 操作将无法通过。原因是 PB 在制作 COM 组件时会将 n_cst_object 的父类中的所有属性、函数、事件也编译进去。所以,此时 PB 发现两个一模一样的函数,编译也自然通不过了。解决办法很简单,将原来需要覆盖的函数申明成保护类型。这样函数就可以最随意覆盖了。但是申明成保护类型后外界也就无法访问该函数了。那么我们再在 n_cst_object的父类中申明一个共有类型的函数,该函数只是简简单单的调用原来南各函数。至此一切问题都解决,函数可以覆盖了。下面是关于这个问题的伪代码。 问题代码: Class n_cst_parent { public : int a() { //do something } int b() {//hello! } }; class n_cst_object : n_cst_parent { Public : int a() {//OverWrite Parent script } } 此时将 n_cst_object 编译成 COM 组件的接口,那么这个接口具备的函数将会是 int a() // 来自n_cst_parent int b() // 来自n_cst_parent int a() // 来自 n_cst_object 显然这种 COM 接口不可能出现,因此编译失败了。将上面的问题代码改为如下形式: Class n_cst_parent { protected: visual int a1() {//完成原来 n_cst_parent.a() 要完成的工作 } public: int a() { return a1(); } int b (){ //hello } } Class n_cst_object : n_cst_parent { protected: int a1() {//完成原来 n_cst_object.a() 要完成的工作 } } 此时再将 n_cst_object 编译成 COM 的接口,那么这个接口具备的函数将会是 int a() // 来自n_cst_parent int b() // 来自n_cst_parent 而且 int a() 函数调用的将是 n_cst_object 中的 a1() 。因为 a1() 被申明成虚函数。 所有问题全部解决!!! 以上代码只是伪代码,PB 中的对象继承根本不是这样。还有在 PB 中函数已经申明就已经是虚函数。直接具备多态特性。 六、PB 某些控件的中文显示问题

假如 PB 的 ListView 不能正常显示中文,则应该将 ListView 的 FontCh arSet 属性设置成其他类型。将 ListView 所在的对象 Export 成源码。在源码 中找到 ListView 定义部分,将 FontCharSet 属性该成 DefaultCharSet! 如果 PB 的其他控件也发生相应的现象时,同样调整一下它的 FontCharSe t 属性。 一般来说对于简体中文字体,在中文 WINDOWS 环境中应该设置成 Default CharSet!。对显示中文有问题的控件将它的 FontChatSet 属性强制设置成 Defa ultCharSet! 应该没有问题。 或者改变字体!!! 七、PB 中关于数据的并发控制

背景知识: DataWindow 在更新数据时,会根据用户对 DataWindow 中的数据进行的各种 操作自动地转换成 SQL 语句,然后再执行。例如:用户删除了一条记录(也就是 脚本执行了 DeleteRow() 函数),然后保存数据(调用 Update() 函数)。此时 Update 函数会将刚才使用 DeleteRow() 删除的行自动转换成 SQL 语句。 正文: 几乎所有的数据库软件需要考虑并发控制问题。那么 PB 的 DataWindow 如 何实现并发控制。答案就在 DataWindow 的更新属性(Update Properties)中。 打开 DataWindow 画笔中的 Rows->Update Proerties 窗口。“Where Clause f or Update/Delete”组合框中的三个选项就是三种处理数据并发问题的策略。 首先做一个假设: 有两个用户,用户A与用户B。他们分别在两台计算机面前。他们两人都通过 PB 的 DataWindow 访问一个表。用户A在用户B读数据之前已经读取了表中的数 据。 表中各子段名假设如下: Column PR_C 主码 Column C1 Column C2 Column C3 Column C4 然后开始讨论他们的数据并发控制问题。 选项“Key Columns”: 该选项的意思是 DataWindow 生成的 SQL 语句的 Where 子句部分只包含主 码。也就是说 DataWindow 自动生成的SQL 语句大概样式是: Update Set C2 = XXXX, Set C1 = XXXX ... Where PR_C=OLD_PK 那么这意味着什么呢?试想一下如果用户A要更改PR_C=XXXX的记录时,如果 用户刚好将此条记录的PR_C字段内容改变了。那么,很明显上述的 Update 语句也就无法执行。从而起到了控制并发操作。然而这种并发操作发生的可能性 非常小。因该说这样的并发控制完全没有意义。所以,通常只有在开发单机版软 件时才选择它。这么做的唯一好处就是减少了 DataWindow 的运算量。 选项“Key and Updateable Column”: 改选项的意思是 DataWindow 生成的 SQL 语句的 Where 子句部分包含主码 与所有可以更新的字段。注意可更新字段与已更新字段的区别。可更新字段指的 是 DataWindow 允许更新的列(可以在 Rows->Update Proerties 中设置),那些不允许更新的列,即使数据被

用户更改了,DataWindow 也不会为 这些更改生成 SQL 语句。因此,用户的更改不会保存到数据库中。已更新字段指 的是被用户更改了的字段(在此文中同时也被认为是可更新的列)。不妨假设列 C1、C2、C3为可更新列。所以此时 DataWindow 生成的 SQL 语句大概样式是: Update Set C1=xxx, Set C2=xxx ,,, Where PR_C = Old_PK C1 = Old_value1 and C2 = Old_value2 and C3 = Old_Value3 其中 old_pk 指的是这条记录的原来 PK_C 字段上的值,old_value1 表示 c1 字段上原来的值。由此可见如果此时用户B修改了该记录的任何一个可更新字 段,那么这条 Where 语句必定返回 false,因此也无法更新?nbsp; 处理自动增类型字段 MS Sql Server 有一种 Identity 类型的字段。这种类型的字段 MS Sql Se rver 会自动对它进行增一操作。通常都用来做主码。而这种类型的字段是完全由 MS Sql Server 负责,其他人都不得干预。这样便引发了一个问题。我们知道在 PB 中如果你的 DataWindow 的数据源没有选中主码,那么 DataWindow 将是无法进行任何操作的。但是如果 我们将 Identity 类型的主码字段选进 DataWindow 中,那么 DataWindow 在进 行插入操作是就会向 Identity 字段插入数据。根据刚才的介绍,DataWindow 仍 然不能进行插入操作,因为 Ms Sql Server 不允许任何外界对 Identity 类型字段进行操作。其实除了 Sql Server 以外, 还有许多 DBMS 都具备这种类似的字段。因此,针对这一问题 PB 早有解决方案 。 在 DataWindow 画笔中选择菜单 Rows->Update Properties 在窗体的最下方有一个标题为 “Identity Column”的下拉列表框。 在下拉列表框中选中 Identity 类型的字段 点确定按钮关闭窗口 所有问题全部解决。 顺便提一下,Rows->Update Properties 中的内容是非常有用的!!! 两个窗口的 Always On Top 属性 现在有许多程序运行时可以放置在所有窗口的前面。在 PB 中实现起来非常 简单。只需调用窗体的 SetPosition ( TopMost! ) 即可。 w_main.SetPosition ( TopMost! ) 但是如果两个窗口都被设为在最前端,结果会怎样? 结果很简单,这两个窗口都在所有窗口的前面。但是这两个窗口之间是谁被 激活谁就在前面。 八、处理 ToolBar 的移动问题

在 PB 中只有 MDI FRAME 类型的窗口才能具备工具条。有的窗口没必要设成 MDI FRAME 类型,但是为了显示 TOOLBAR ,也不得不设成 MDI FRAME 。由于 TOOLBAR 是可以被拖动的。因此当 TOOLBAT 被拖到另一个地方时就有可能挡住窗口中原有的控件。解决这种问题的一种办法 就是禁止 TOOLBAR 的移动(具体方法请到本站点找)。但是这样做又显得软件不 够专业化。下面就告诉大家如何编程解决这个问题。 假设窗口中只有一个控件 dw_1 ,其中 dw_1.x = 0, dw_y = 0, dw_width = th is.width, dw_height = this.height。 代码如下: 在窗口的 resize 事件中 1 dw_1.x = This.WorkspaceX () 2 dw_1.y = This.WorkspaceY () 3 dw_1.width = This.WorkspaceWidth () 4 dw_1.height = This.WorkSpaceHeight () - MDI_1.MicroHelpHeight 所有问题解决。 代码分析: 首先介绍一下 WorkSpace 。窗口分两大部分,1 工作区域--WokSpace 、2 非工作区--NonWorkSpace 。 WorkSpace 指的是不包括边框、标题栏、菜单、水 平滚动条、垂直滚动条、工具条 的窗体内部区域。但是对于 MDI 父窗口他包括 MICROHELP 域。显然 NonWorkSpace 就是除了 WorkSpace 之外的空间。我们的控件很自然的应该放在 WorkSpace 内。当用户移 动了 TOOLBAR 时窗口的 WorkSpace 也发生了相应的变化。因此,事件的前三行 大家应该很好理解。至于第四行,由于刚才已经说明了对于 MDI 窗口,WorkSpa ce 还包括了 MicroHelp 。MDI_1 这个对象是 PB 内置的对象,只要你的窗口是 MDI 窗口,那么 这个窗口中便有一个 Instance 的 MDI_1 对象。这个对象 的类是 MDIClient,表示的 MDI 的客户区域。关于 MDICLIENT 的详细说明请参 考 PB 的联机帮助。

九、多个 Tab 页共享一个 DW 的技巧

我们在开发程序时经常会用到 Tab 控件。往往在几个 Tab 页上都要用到 D ataWindow 控件。常规的做法就是每个 Tab 页放上一个 DataWindow 控件。但是 ,这样做的话我们总是要非不少精力来对齐各个TAB 页上的 DATAWINDOW 控件,而且占用的资源也很多。其实我们完全可以只用一个 DataWindow 现实所 有的 Tab 页上需要的数据。首先只在窗体上(不是 Tab 控件上)放置一个 Dat aWindow 控件。建立若干个 DataStore 。这样当你点技某一 Tab 页时,你只需 调用 ds.sharedata(dw)即可达到原来的效果。而且,再不需要为控件的位置、大小而 烦恼。 十、妙用 Library 画笔中的 Export 功能

使用函数 Modify、Describe 或者直接访问 dw_1.object.DwObject.Attrib = ... 等方法都可以访问 DataObject 中的对象,修改 DataObject 中的属性。 虽然大家都知道如何去访问与修改 DataObject 。但是,往往因为不知道 DataO bject 中到底有哪些属性、哪些可以修改、它们是什么类型数据等。使得我们仍然不知 道如何修改 DataObject。其实最好的资料就是 PB 的源代码。在 PB 的 Librar y 中可以将 PB 对象 Export 成一个文件。而实际上这个文件就是 PB 的源代码 。如果我们熟悉 PB 的这种源代码的语法规则,完全可以脱离 PB 的开发环境直接写代码,当然这是 没必要的。我就是利用 PB 的 Export 功能将 DataWindow Object Export 成源 代码的形式,再查看其中的内容。一目了然, DataObject 究竟有哪些属性全部 在源代码中列了出来。 大家不妨将其他的对象都 Export 一下,说不定就有意外收获! 普通窗口也能拥有工具条! 在 PB 中有一点非常不好,只有 MDI Frame 类型的窗口才可以具备工具条。 有时我们窗口又不是 MDI 。但是又需要工具条,怎么办?没办法只能硬把 这个窗口设为 MDI Frame 类型。工具条也就出来。问题好象解决了。但是 PB 的工具条还可以随意拖动。本来设计时工具条在窗口上方,结果用户把它 拖到下面,一下把我的窗口中的控件就给挡住了。怎么办? 很简单,不让用户拖动工具条。 将 Application 对象的 ToolbarUserControl 属性设置为 False 。从此, 用户就不能拖动工具条了。 这种程序看上去仍有一点美中不足。人家的工具条都可以拖来拖去,显得我 们的有点不专业!!! 其实还有方法使得用户将工具条拖来拖去还不会挡住任何控件。 想知道答案?到本站点找!!! 提示:绝对不是要大家自己做工具条,完全是使用了一点 PB 技巧。 利用 PB 建库 许多数据库开发人员都喜欢直接使用 DBMS 提供的管理工具建库。其实如果 要用 PB 作为软件的前台开发工具,那么建库最好也是使用 PB (除非是 PB 无 法完成的建库操作)。因为使用 PB 建库可以节省许多的前台开发工作。 例如:我们在 Database 画笔中建表时可以直接为各个字段设定好样式。 可以设定 Header、Label。这样基于这个表的所有 DataWindow Object 关于 该字段的 Header、Label都已经设定好了。这样无须一个一个设置,也不用担心 会出现不一致的现象。 你还可以在 Database 画笔中为各个字段设定有效性原则,设定好出错时的 错误信息等。这样就为后面建立 DataWindow 省了不少功夫,而且所有的 DataW indow 都一致。 关于 Database 画笔的使用还有很多,许多书上都有详细的介绍 。一句话在 Database 画笔中建库只要用得好就可以大大的减少后期工作量。需要提醒一点的就是,当 DataWindow 建好之后,再去 Database 画笔中更改 Header、Label等各属性后 ,DataWindow 也不会发生任何变化! 随意改变父类 pb程序员可以随意改变一个对象的父类。具体方法如下: 将对象EXPORT成源代码形式。找到形式 global type Objectname from Ano therObjectName 两行,一般都在源代码的前面。将AnObjectName该成你的父类。如果你的子类重 载父类中的函数,则必须将子类的函数定义成父类函数的形式。同样这也可以在 源代码里更改,只需更改函数头以及函数体的第一句申明和函数体的最后一句结 束语。并却子类中重载父类的函数的函数必须排在 子类自身的函数前面,否则在INPORT时会非法操作。源代码该完后即可INPORT生 成对象。 十一、拖动无标题窗口

现在有许多应用程序都具备那些无标题可拖动的窗口。有关这种窗口在 VB、 DELPHI中的制作的文章也有不少。本篇文章将讲述如何在 PB 中实现。 在 PB 中实现这种窗口的拖动与在 VB、Delphi 中一样,采用移花接木的技 巧。当鼠标拖动时Windows 首先会向鼠标下的窗口发送一个 wm_nchittest 消息,窗口收到这个消息后再由窗口的消息处理函数进行处理,消息处理函数将 会返回一个整数表示鼠标正处于窗口的什么部位。大家只需要知道的是处理函数 返回2,表示鼠标正处于窗口的标题栏上。根据这一点,我们只要截获这条消息, 然后直接返回2。这样不管鼠标真正位于窗口的什 么部位,WINDOWS 一律认为鼠标位于标题栏上。因此,用户自然可以拖动窗口。 下面是具体的步骤: 1 为窗口定义用户自定义事件 Event Name: ue_nchittest Event ID: pbm_nchittest 2 在事件 ue_nchittest 中编写代码 Return 2 3 大功告成 大家不妨采用这种方法为 Button 、Text 等可视控件也加上上述的事件与代 码。看看有什么情况?说不定你就可以开发一套自己的可视化开发工具!!! 疑问: 当然这种方法很好的解决了无标题窗口仍然可以拖动的问题。但是如果我这 个窗口还需要一个背景图片。如果放置一个 PictureBox 这种方法就无效了。因 为窗口无法接受 wm_nchittest 消息,被 PictureBox 挡住了。怎么办?答案就 在本站点!!!

拖动无标题窗口还有一种方法,在窗口的 MouseDown 事件中编写如下脚本 Send ( Handle ( this ),

274, 61458, 0 ) 至于这种方法的原理是什么,暂时还没弄明白。用这种方法制作的窗口在运 行时与第一种方法制作的窗口还有点不一样。只能是留给大家一起去探讨了。

拖动无标题窗口 现在有许多应用程序都具备那些无标题可拖动的窗口。有关这种窗口在 VB、 DELPHI中的制作的文章也有不少。本篇文章将讲述如何在 PB 中实现。 在 PB 中实现这种窗口的拖动与在 VB、Delphi 中一样,采用移花接木的技 巧。当鼠标拖动时Windows 首先会向鼠标下的窗口发送一个 wm_nchittest 消息,窗口收到这个消息后再由窗口的消息处理函数进行处理,消息处理函数将 会返回一个整数表示鼠标正处于窗口的什么部位。大家只需要知道的是处理函数 返回2,表示鼠标正处于窗口的标题栏上。根据这一点,我们只要截获这条消息, 然后直接返回2。这样不管鼠标真正位于窗口的什 么部位,WINDOWS 一律认为鼠标位于标题栏上。因此,用户自然可以拖动窗口。 下面是具体的步骤: 1 为窗口定义用户自定义事件 Event Name: ue_nchittest Event ID: pbm_nchittest 2 在事件 ue_nchittest 中编写代码 Return 2 3 大功告成 大家不妨采用这种方法为 Button 拖动具有背景图片的无标题窗口 背景知识: 截获 wm_nchittest 消息,并返回 2。从而实现无标题窗口可拖动。 我们知道通过截获 wm_nchittest 消息并返回 2,可以实现实现无标题窗口 可拖动的功能。但是这个 wm_nchittest 必须由窗体截获。如果我们要在窗口上 显示一幅背景图,那么问题就出现了。放置一个 PictureBox ?调用 WIN API 直 接对窗体绘画?如果是放置一个 PictureBox 那么消息 wm_nchittest 将会被 PictureBox 挡住无法传到窗体中。调用 API 直 接对窗体绘画当然可以成功,但是这要求你对 API 绘画熟悉。本文将采用一种非 常简单的方法解决这个问题。 我们首先分析一下放置了 PictureBox 后,窗体为什么会接收不到 wm_nchi ttest 消息。熟悉 MFC 的朋友可能会知道 PictureBox 的父类实际上是 Window 。也就是说 PictureBox 是一个特殊的窗体。所以很自然 wm_nchittest 消息传 递给 PictureBox 了,窗体也就接收不到了。那么有没有可能 PictureBox 仍然在窗口上,但是消 息却传给窗口。可以,将 PictureBox 隐藏而且图片仍然显示在窗口上! PictureBox.Setredraw ( False ) PictureBox.Hide () 问题解决, PictureBox 隐藏了,而且图片仍然在窗口上。这样 wm_nchitt est 消息就直接传到窗体了(也许有读者会想,PictureBox 截获 wm_nchittest 消息后再将该消息发送给窗口!很遗憾这样做不行)。 下面是该方法的源代码: 1. 假设窗体名为 w_main,PictureBox 控件名为 p_1 。 2. 为 p_1 截获 wm_mousemove 消息 为 p_1 定义用户自定义事件 Event Name: ue_mousemove Event ID: pbm_mousemove 在 ue_mousemove 事件中编写代码 This.Setredraw ( False ) This.Hide () 3. 为 w_main 截获 wm_nchittest 消息 为 w_main 定义用户自定义消息 Event Name: ue_nchittest Event ID: pbm_nchittest 在 ue_nchittest 事件中编写代码 Return 2 4. 为 w_main 截获 wm_paint 消息 为 w_main 定义用户自定义消息 Event Name: ue_paint Event ID: pbm_paint 在 ue_paint 事件中编写代码 This.Setredraw ( True ) This.Show () 说明: 步骤 2 用意:当鼠标移动到窗口时 p_1 便隐藏了,这样用户随时都可以 拖动窗口。 步骤 4 用意:窗口上仍然显示图片只是因为 p_1 不再重画,所以虽然 p _1 隐藏了,但是图片仍然保留在窗口上。也正是这个原因,如果有任何其他窗体 或控件挡住了 图片那么图片便无法恢复。因此我们要截获 wm_paint 消息,重新 显示一次 p_1 。 至此,所有问题圆满解决!!!

十二、有效性原则

用户可以在程序运行是动态更改DATAWINDOW的有效性原则 使用 GetValidate 和 SetValidate 函数。 在数据库画笔中建立的有效性原则将保存到PB的系统表中, 也就是说原则一旦建立,可以适用于该数据库中任何相同类型的字段。 此时设置的有效性原则将是DATAWINDOW OBJECT 中默认的有效性原则。 注意:若数据库中有效性原则发生了变化,DATAWINDOW OBJECT 中有效性原 则不会发生变化! 有效性原则中的表达式: 程序员可以使用任何POWERSCRIPT 函数,甚至是用户自定义函数!@col代表 当前行列col的数据。如果被检验的列属于字符串类型,则程序员可以使用MATCH 函数。在DATABASE 画笔中定义有效性原则时点击MATCH按扭,即可自动生成MATC H函数。 MATCH函数规则:match(@col,Textpattern),Textpattern 有点类似于正规 表达式 Textpattern 的构造方式如下: Textpattern 分两部分:1、特殊符,2、非特殊符 特殊符: 符号 ^:与字符串的第一个字符进行比较。 例 ^C 比较字符串的第一个字母是否为 C 。 符号 $:与字符串的最后一个字符进行比较。 例 s$ 比较字符串最后一个字

DataWindow Object 的几个有用的属性

DataWindowObject的几个有用的属性一、dw_1.Object.DataWindow.Column.Count属性记录的是DataWindow中的列数。DataWindow中的所有对象都有Type属性,通过访问他们的Type属性可以得知他们是Column、Compute、Text等等对象。动态改变DataWindow某一列的Edi
推荐度:
点击下载文档文档为doc格式
1r2li9pivs862m71dlcp
领取福利

微信扫码领取福利

微信扫码分享