PB学习

在我们编写诸如像库存,销售等应用系统时,总希望程序能动态的自动刷新库存量或销售量,比如说每隔1秒刷新一次。要实现这样的功能只要我们利用数据窗口的时间间隔属性(Timer Interval),当该值为0时数据窗口不进行刷新,如果要使数据窗口以每一秒钟的频率刷新的话,只要将该值设为1000,即1000毫秒。
dw_1.Object.Datawindow.Timer_Interval = 1000


dw_1.Modify("Datawindow.Timer_Interval = 1000")

我们还可以为应用程序添加闪烁报警的功能。就拿库存量来说吧,最常用的是当某货物的库存量达到一个最低库存量时程序应能自动判别,并用警告色显示,通常是红色。此时,我们只要在运用了上述的方法后再在需要闪烁的字段上,比如,库存量,在它的颜色属性中写上相应的语句。下面这段代码实现“当某一物品的库存量小于20的时候,程序以红色闪烁显示警告”


if ( Store_Num < 20, &

  if (mod( Second(Now()), 2) <> 0, & // 每秒一次,偶数显示红色,奇数显示白色,即底色

  RGB(255, 255, 255), RGB(255, 0, 0) ) ,
 RGB(0, 0, 0))


-----------------------------------------------------------------------------------------------------------------------
2. 在pb中“~t”也就是tab键所产生的空格,其长度也是1
long  ll_day
string ls_day

ls_day = "~t"
ll_day = len(ls_day)

Messagebox("",ll_day)

弹出来的是"1".
----------------------------------------------------------------------------------------------------------------------
3.如何让PB自动计算从数据库中提取出来的公式的结果?

我在数据库一字段中存有各种计算公式,请问如何让PB提取出这些公式并计算?
数据表结构如下

公式代码    计算公式
001          PS*DS*KS
002          100*PS
003          PS*100 + KS/13.4

等等
PS*219*(KS*204+312.3)/DS

每行的计算公式都不一样
其中:PS,KS,DS是客户输入的数值!!


answer:
建一个外部数据源的DW,只用包含一个字符型的列

窗口的CB下写

string ls_expression,ls_rtnNum
ls_expression = "1+2"       //计算公式

dw_1.insertrow(0)
dw_1.setItem(1, "value", ls_expression)
ls_rtnNum=dw_1.describe("evaluate('" + ls+expression + "', 1)")  //字符型的数字结果

注意计算公式错误时返回的是空字符
-------------------------------------------------------------------------------------------------------------------------------

4、控制DATAWINDOW里每页显示的行数
在Datawindow中增加一个计算域,起名为:ceil_page,此计算域必须放在Detail段中,
  Expression中输入 ceiling(getrow()/25) 25表示每页打印25行,也可以是一个参数。
  2、分组,选择菜单Rows/Create Group,选择ceil_page
  按ceil_page分组,并选中New Page On Group Break(意思是新组开始时换页)。
  3、将此计算域设为隐藏(在属性页中的expression页中在visible属性中写0)。
  4、补空行:
  在窗口的open事件中写如下代码: 
  long li_count,li_i 
  li_count=dw_1.retrieve() 
  if mod(li_count,25)<>0 then
   for li_i=1 to 25 - mod(li_count,25) 
    dw_1.insertrow(0) 
   next 
  end if 
---------------------------------------------------------------------------------------------------------------------------------

5 PB中的Datawindow按页行滚动
用户在使用滚动条控件使数据滚动时,消息的传输由用户单击滚动条控件实现,使用函数和按钮使数据滚动时,消息的传输由用户单击按钮实现。常用的函数如下:
  ScrollNextPage()  滚动到下一页
  ScrollNextRow()  滚动到下一行
  ScrollPriorPage()  滚动到前一页
  ScrollPriorRow()  滚动到前一行
  ScrollToRow()   滚动到某一行
  语法:
  Datawindowname.ScrollNextPage()
  Datawindowname.ScrollNextRow()
  Datawindowname.ScrollPriorPage()
  Datawindowname.ScrollPriorRow()
  Datawindowname.ScrollToRow()

  其中:Datawindowname为Datawindow在Powerbuilder的window下的控制名。
--------------------------------------------------------------------------------------------------------------------------------------
6.数据窗口中各项指标的基本操作
第一条
dw_browse_basic.ScrollToRow(0)
前一条
integer row_current //定义参数当前行行数
//数据窗口向前滚动一条纪录
row_current=dw_browse_basic.ScrollPriorRow()
//如果已经到达第一条纪录,则弹出一个对话框警告
if row_current=1 then
  MessageBox("警告","已经是最前一条记录")
end if
下一条
integer row_count //定义参数 表的总行数
integer row_current //定义参数 当前行
//数据窗口向后滚动一条纪录
row_current=dw_browse_basic.ScrollNextRow()
//得到表的总行数
row_count=dw_browse_basic.RowCount()
//判断是否是最后一条记录
if row_current= row_count then
  MessageBox("警告","已经是最后一条记录")
end if
最后一条
//定义参数 表的总行数
integer row_count
//得到表的总行数
row_count=dw_browse_basic.RowCount()
//数据窗口滚动到表的最后一条记录
dw_browse_basic.ScrollToRow(row_count)
插入
long row_number
w_insert_job.dw_insert_job.reset()
row_number=insertrow(w_insert_job.dw_insert_job,0)
删除
long current_rownumber
integer emp_no
current_rownumber=w_insert_job.dw_insert_job.getrow()
getitemstring(w_insert_job.dw_insert_job,current_rownumber,1)
deleterow(w_insert_job.dw_insert_job,current_rownumber)

从其他表中删除该员工的记录
delete from emp_marriage where emp_no=:emp_no;

修改是否成功
if update(w_weihu_basic.dw_weihu_basic,true,false)=1 then
  w_weihu_basic.dw_weihu_basic.resetupdate()
  commit;
  //w_insert.dw_insert_basic.reset()
else
  rollback;
  messagebox("错误!!!","数据保存失败")
end if

从数据窗口中获取数据
单条:假设我们要读取dept_id字段的第一笔数据,可以用下列方式表示∶li_id = dw_1.object.dept_id[1]
假设我们要读取第一行中第二个字段的数据,可以用下列方式表示∶ls_name = dw_1.object.DATA[1,2]
假设我们要读取dept_id字段的所有数据,可以用下列方式表示∶li_array = dw_1.object.dept_id.CURRENT
假设我们要读取过滤缓冲区 (filter buffer) 内dept_id字段的第一笔数据,可以用下列方式表示∶li_id = dw_1.object.dept_id.Filter[1]
假设我们要读取从第二笔数据的第一个字段到第三笔数据的二个字段之间的数据,表示∶lstr_array = dw_1.object.DATA[2,1,3,2]
假设我们要读取整个第二笔的数据,可以用下列方式表示∶lstr_dept = dw_1.object.DATA[2]
使用GetItemX ( )函数 x为string number等 
lstr_name = dw_1.getitemstring (li_count , "emp_name") li_count为哪一条
多条:string ls_name[ ]
ls_name = dw_ 1.object.emp_name.current
数据的读取 一般格式∶数据窗口控件.Retrieve ( ) 返回个数 ,-1为错误
增加数据 数据窗口控件.InsertRow (行数) 参数为0加到最后
数据的删除 数据窗口控件.Deleterow (行数)
数据的过滤l 数据窗口控件.SetFilter (条件字符串). 
数据窗口控件.Filter ( ) 用法∶将主要缓冲区 (Primary Buffer) 内不符合过滤条件的数据移到过滤缓冲区 (Filter Buffer)内。
例子:string ls_exp ls_exp = "dept_id = 100" dw_1.SetFilter (ls_exp) dw_1.Filter ( )
排序 dw_1.SetSort ("dept_id") dw_1.Sort ( )
将数据从所有的缓冲区 (Buffer) 中清除 dw_1.ReSet ( )
计算数据数目。例如∶dw_1.Rowcount ( ) 类似: .DeletedCount ( ) .ModifiedCount ( ) .FilteredCount ( )
数据窗口的滚动 数据窗口控件.ScrollToRow (行数)

数据窗口属性改变:
描述数据窗口对象本身颜色,可以表示如下∶long ll_color ll_color = dw_emplist.Describe ("DataWindow.Color")
描述数据窗口对象内标题 dept_id_t 的颜色,可以表示如下∶long ll_color ll_color = dw_emplist.Describe ("dept_id_t.Color")
修改数据窗口对象本身颜色,可以表示如下:dw_emplist.Modify ("DataWindow.Color = 255")
修改数据窗口对象内标题 dept_id 的颜色,可以表示如下∶dw_emplist.Modify ("dept_id_t.Color = 255")
假设当我们希望在程序运行阶段才给予下行条件∶薪水超过 50000 时显示红色,低于 50000 时显示黑色。程序的写法如下∶
ls_modstring = "Salary.Color = '0~tIf (Salary > 50000,255,0) '"
dw_1.modify (ls_modstring) 
--------------------------------------------------------------------------------------------------------------------------------------------

7.怎样得到计算域的值

对于一般类型的数据窗口,我们可以用这种办法:先为计算域取名,如“count_id”,取值过程如下(除了分组的数据窗口,一般计算域都用1):
  long ll_count_id 
  如果在detail区:ll_count_id = dw_1.getitemnumber(1,″count_id″)
  如果在summary区:ll_count_id = dw_1.object.compute_1[1]

 

而对于复合报表,须先用GetChild()函数得到其中的report,再取此report中计算域的值。假设此 report name 为“report_department”(注意不要混淆report name 与子数据窗口本身的名字),计算域名为count_id,则取值过程如下:
  DataWindowChild dwc_child
  long ll_count_id 
  dw_1.GetChild(″report_department″
  dwc_child)
  ll_count_id = dwc_child.getitemnumber(1,″count_id″)

-----------------------------------------------------------------------------------------------------------------------------------------------
8.SQL SERVER2000数据库 如何连入PB7.0 
用专用接囗吧:
DBMS = "MSS Microsoft SQL Server"  //
Database = "DB" //数据库名
LogPass = '' //
ServerName = "172.21.0.1" //服务器名 可以用字符表示
LogId = "sa" //
AutoCommit = False
DBParm = ""

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值