⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 datawin.txt

📁 DataWindow Object 的几个有用的属性
💻 TXT
📖 第 1 页 / 共 3 页
字号:
意的关闭或开启控件的重画功能。如果一个控件或窗口被别的 A 挡住了,然后  
A 此时有移开了或关闭了。那么 Window 将会通知这个控件或者窗口要求他们重 
画一遍自己,这就是重画的意思。  
    当 DataWindow 检索大量数据时 SetRedraw 函数就大有用途了。DataWindo 
w 每检索出一条数据便会重画一边 DataWindow 。因此如果有大量的数据需要检 
索的话,那么 DataWindow 将会频繁闪烁。同时也消耗了大量的 CPU 资源。因此 
,我们可以在检索数据之前调用 SetRedraw (   
False ) 关闭重画功能,在数据检索完后在开启重画功能,即 SetRedraw ( Tru 
e )。这样便消去了闪烁现象,最关键是大大地提高了检索速度。  
SetTrans vs SetTransObject  

    函数 SetTrans 与 SetTransObject 都是为 DataWindow 指定事务对象。但 
是这两个函数又有很大的区别。使用 SetTrans 函数 DataWindow 每次访问数据 
是都单独建立一次连接。也就是说 DataWindow 每次访问数据库都要经过连接数 
据库、断开连接的过程。使用 SetTransObject   
函数 DataWindow 的每次对数据库的访问都使用该函数设置的事务对象。一般情 
况下,都使用 SetTransObject 。  
使用 ID 字段的好处  

    有人会觉得并不是所有场合都需要使用 ID 字段。的确如此,但是使用 ID  
字段却有许多好处。  
记录你的应用程序所发生的所有错误  

    记录应用程序发生的错误是非常重要也是非常有意义的事情。本篇文章将为 
大家介绍一种在 PB 中记录应用程序错误的方法。  
    应用程序错误分为两大类。一种是与实际情况不符的错误,例如软件中出现 
了年龄大于两百岁的人。一种是物理错误,例如非法操作等。这两种错误对于用 
 PB 开发出的软件经常都会发生。不管是那种错误我们都需要记录一些相同的信 
息。错误发生的描述,错误发生所在的   
Window、menu 或 Object ,错误发生所在的事件函数,PB 返回的错误号等。  


具体做法:  

  为应用程序对象定义事件 ue_logerror  
    Event Name: ue_logerror  
    Event   ID: 空  
    Arguments : Error aerr_error  
    脚本如下:  

string  ls_message  
Integer li_fhandle  
ls_message = &  
   +     'Error Number ' + string(aerr_error.number) &   
        +'.~r~nError text = ' + aerr_error.text &  
        +'.~r~nWindow/Menu/Object = ' + aerr_error.windowmenu &  
        +'.~r~nError Object/Control = ' + aerr_error.object &  
        +'.~r~nScript = ' + aerr_error.objectevent &  
        +'.~r~nLine in Script = ' + string(aerr_error.line) + "."  

li_fhandle = FileOpen ( "Error.log", LineMode! , write! , LockReadWrit 
e! , Append! )  

ls_message = String ( CrtDate ) + " " + String ( CrtTime ) + " " + ls_ 
message   

FileWrite ( FileHandle, ls_message )  

FileClose ( FileHandle )  


对于应用程序的物理错误处理采用方法:  

  在应用程序的 SystemError 事件中编写代码  
      
    This.Event ue_logerror ( Error )  
    Halt  

    
对于应用程序出现与实际不符的错误则在脚本中:  
    
 If ll_rc <= 0 Then  

   // 将错误记录到日志文件中  
   error lerr_error  
   lerr_error = Create error  

   lerr_error.text = "无法初始化安全服务"  
   lerr_error.is_pblname = ""  
   lerr_error.windowmenu = ""  
   lerr_error.object = "rs_n_cst_appmanager"  
   lerr_error.objectevent = "constructor"  
   lerr_error.line = 84  
   lerr_error.number = ll_rc  
   myapp.Event ue_logError ( lerr_error )  

   Destroy lerr_error  

   return  

End If  

How to determine if you are connected  

    如果在使用 DataWindow 之前,SQLCA 并未连接到数据库。那么程序将会出 
现错误。所以有时有必要判断一下 SQLCA 是否已经连接到数据库。  

    使用函数 dbhandle 。函数 dbhandle 将返回数据库服务器分配的 handle  
。如果 handle 为 0 表示 sqlca 未连接到数据库。  
PB 6.5 的 Timing Object  

    PB 5 中只有 Window 才有 Timer 事件。利用 Timer 事件可以实现一些定时 
执行的功能。 pb 6 现在还提供 Timing 标准不可视对象。利用该对象不仅可以 
在窗体中实现定时功能,还可以在用户自定义对象中实现定时功能。  

    制作一个用户自定义对象 ue_timer 继承 Timing 对象  

      在 ue_timer 中定义属性  
       
         PowerObject ipo_object  

         String      is_event  


      在 Timer 事件中  

         ipo_object.TriggerEvent ( is_event )  

    至此通用 ue_timer 事件已经完成,下面是使用该对象的方法  


          在 n_cst_object 对象中定义实例变量  

             ue_timer i_timer  


          在 n_cst_object 的构造事件中  

             i_timer = create ue_timer  
   
             i_timer.Interval = 1000 // 一秒钟执行一次  

             i_timer.ipo_object = this  

             i_timer.is_event_or_function = "ue_myevent"  


          在 n_cst_object 的析构事件中  
           
             destroy i_timer  


          在 ue_myevent 中编写相应的代码  
向窗口传递参数的几种方法  

    向窗口传递参数有好几种方法。最简单的方法当然是利用全局变量。其实这 
更本不算是一种方法。传递参数的方法主要有两种。  
      
    1. 利用 Message 全局变量,也是比较常用的方法。  

    OpenWithParm ( w_main, 1 )  

    OpenWithParm 函数将会自动的将 1 放入 Message 对象的 Number 属性中。 
然后再 w_main 窗口的 Open 事件中访问 Message 的 Number 属性就可以获得由 
 OpenWithParm 函数传来的参数。OpenWithParm  函数可以传递的参数不仅仅是 
整型,还可以是 String、Double 甚至是   
PowerObject 类型。如果传递的是 String 类型,那么参数就会被放入 StringP 
arm 属性中。如果是 Double 类型,那么参数就会被放入  DoubleParm 中。同样 
,如果参数是 PowerObject 类型,参数就会被放到 PowerObjectParm   
中。这种方法是最常用的方法,也是最简洁的方法。但是这种方法只能传递一个 
参数。对于需要传递多个参数的话那就的采用方法 2 。  


    2. 利用结构向窗口传递参数  
    由于 Message 对象的 PowerObjectParm 参数可以储存任何的 PB 对象。利 
用这个特点,我们将所有需要传递个窗口的参数都封装到一个结构中(类也可以 
)。在使用 OpenWithParm 函数将结构作为参数传给窗口。具体的源代码如下: 
  

    定义结构:  
        global type s_a from structure  
                string          a  
                string          b  
        end type  

    传递参数:  
        s_a ls_parm  

        ls_parm.a = 'ha'  
        ls_parm.b = 'hb'  
    
        OpenWithParm ( w_main, ls_parm )  

     w_main 的 open 事件:  
        s_a ls_rec  

        ls_rec = Message.PowerObjectParm  

      至此,ls_rec 中就收到了有 OpenWithParm 函数传递来的多个参数。  


处理表单打开时位置自动向右下方移动问题  

    PB 的 MDI 父窗口有一个非常令人讨厌的问题。每次你打开一个表单,  
表单的位置总是向右下方移动一点距离,而不管 MDI 中是否只有一个表单。  
下面的代码将为您解决这个问题。首先必须定义一个父类窗口 w_sheet ,  
所有的表单都必须继承该 w_sheet 。  

    在 w_sheet 中定义共享变量:   

        /* 用于记录已打开表单的数目 */   
        integer si_count  

        /* 用于记录表单所在的位置 */  
        integer si_win[]  


    定义如下的实例变量:   

        int ii_count /* 当前表单号 */  


    窗体的 Open 事件:  

        integer li_i   

        /* 增加已打开的表单数 */   
        si_count++  

        /* 确定当前该 sheet 所在的位置 */   
        FOR li_i = 1 TO UpperBound(si_win)  
                IF si_win[li_i] = 0 THEN  
                     ii_count = li_i  
                     EXIT  
                END IF   
        NEXT   


        IF ii_Count = 0 THEN ii_Count = si_Count   

        /* 将新位置保存到数组中 */   
        si_win[ii_count] = 1   

        /* 将窗口移动到新位置 */  
        This.Move((ii_count - 1) * 75,(ii_count - 1) * 75)  



    窗体的 Close 事件中:   

        /* 释放该窗口在 si_win 中的位置 */   
        si_win[ii_count] = 0   

        /* 减少已打开的窗口数 */   
        si_count --  
Post 与 Trigger 的使用  

    PB 的函数与事件有两个种调用方式。一种同步方式、一种异步方式。  
同步方式的调用就是等待函数或事件执行完后再执行下一步的代码。异步  
方式就是不等待函数执行完毕就执行下一步的代码。一般情况的调用都是  
同步方式的。使用关键字 Post 表示采用异步调用。关键字 Trigger  
表示同步调用,一般同步调用不用使用任何关键字。  

    Post 方法是一种非常有用的方法。最典型的用法是用在数据库连接的  
时候。PB 初学者一般都在 Application 对象或者窗体的 Open   
事件中连接数据。这种做法是最常规的做法。一般大家在开发程序的时候很  
少出现连接不上数据库的问题或者找不到服务器的时候。因此,这种做法并  
没有带来什么不变。而往往软件发放的用户手中后,用户的环境总是不确定  
的。出现找不到服务器、网络线路问题等等都是很平常的事  
如数据库的连接仍然在 Application 的 Open 事件或者 Window 窗口的  
 Open 事件中,当数据库连接不上时会出现“死机”的假象。使用 Post   
方法可以很好的解决这种问题。方法如下:  
    1 为窗口定义自定义事件  
      Event Name:PostOpen  
      EVent   ID:空  

    2 在窗体的 Open 事件中  
      Post Event PostOpen ()  

    3 在 PostOpen 事件中编写关于数据库的连接代码。
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -