打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
PB中判断该字段是否更改及原始值与当前值

当在单据中变更供应商时,需要在数据库中记录一下日志。这就需要用到GetItemString或GetItemNumber函数或GetItemStatus函数。

    先解释一下这几个函数的意思:

     dwcontrol.GetItemStatus ( row, column, Primary! )可以获取该缓冲区内指定单元的状态,当参数column为0时,表示读取整个列的修改状态。有以下状态。
NotModified! :指定单元的数据和原始数据相同,没有修改过。

DataModified!:指定单元的数据和原始数据不同,修改过。

New!:该数据行是新增加的,但还没有在该行上输入数据。

NewModified!:该数据行是新增加的,并且已经在该行上录入了数据。


这些修改标识都是由数据窗口自动维护的,一般情况下没有必要编写脚本修改这些标记,但并不是说就不能修改。PowerBuilder提供了函数SetItemStatus,它的语法是:
dwcontrol.SetItemStatus ( row, column, dwbuffer, status )

下面是使用GetItemStatus判断值是否被修改过的代码

[c-sharp] 
  1. int   li_i,li_colcount     
  2. string   ls_colname,ls_coltype  
  3. dwItemStatus l_status     
  4. li_colcount = long(dw_1.describe("DataWindow.Column.Count"))     
  5. for li_i = 1 to li_colcount     
  6.   ls_colname = dw_1.describe('#' + string(li_i) + '.name')   
  7.   if lower(trim(ls_colname)) = 'p_sup_no' then exit  
  8. next  
  9. l_status = dw_1.GetItemStatus(dw_1.getrow(), li_i, Primary!)   
  10. if l_status = DataModified! then  
  11.   messagebox('提示','供应商已经变更!')  
  12. end if  

   接着介绍getitemstring,因为我这里供应商的字段是varchar类型的,所以只介绍这个,其它类型找相应的函数,如数值类型的用getitemnumber。在这个例子关键是第四个参数的指定,当为True时,取得原始值,False是取得当前值。语法如下:

   dwcontrol.GetItemString(   row,   column   {,   dwbuffer,   originalvalue   }   )  
  参数  
  dwcontrol:数据窗口控件名    
  row:long型,要得到数据值的单元所在的行    
  column:要得到数据值的单元所在的列,该列的数据类型必须是String类型。column参数可以是列号(integer类型),也可以是列名(string类型)。  
  dwbuffer:dwBuffer枚举类型,指示想得到数据窗口哪个缓冲区的值。有效取值为:  
        Primary!   -   缺省值,得到主缓冲区中的数据(未被删除或过滤掉的数据)  
        Delete!   -   得到删除缓冲区中的数据(从数据窗口中已经删除的数据)  
        Filter!   -   得到过滤缓冲区中的数据(从数据窗口中已经过滤掉的数据)    
  originalvalue:boolean类型,指示要得到指定单元(由行/列值决定)的原始值还是当前值。有效取值为:  
      True:得到原始值(从数据库中检索出的初始值,该值不受当前修改的影响)  
      False:该参数的缺省值,表示函数将得到指定单元的当前值。      
    返回值String。函数执行成功时,返回指定单元的String型数据值;如果指定单元的数据值为NULL,则函数返回NULL;如果发生错误,函数返回空字符串("");如果任何参数的值为NULL,则GetItemString()函数返回NULL。

    用该函数实现的代码为:

[c-sharp] 
  1. long ll_row  
  2. boolean lb_change_sup_no_flag  
  3. ll_row = dw_1.getrow()  
  4. if dw_1.getitemstring(ll_row,'p_sup_no',Primary!,true)  <>  &  
  5.    dw_1.getitemstring(ll_row,'p_sup_no',Primary!,false) then //原始值<>当前值    
  6.     lb_change_sup_no_flag = true   //更改过供应商   
  7. else     
  8.    lb_change_sup_no_flag = false  //未更改过供应商      
  9. end if   

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
PB数据窗口GetItemString函数详解
一个万金油函数(Index Small If Row)
PB中取得数据窗口所有列名以及列标题名称
PFC详解(四)
自制程序打印往来账目
从数据窗口中获得数据的方法总结
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服