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 = ""

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章