string  ls_value -- 這能存一個值

string  ls_array[] -- array,列陣、數組,這能存多個單一類型的值

Structure 是一個能存放多種類型的變量(variable) ,主要用於需要同時「傳遞」多個值時使用。如果只是在同一段代碼裏面需要用到多個值的話,直接用 select... into... 就可以了,Structure 主要用於「傳遞」,或者作為 instant 或 global variable 使用。

 

文章標籤

過時程式員 發表在 痞客邦 留言(0) 人氣()

Functionoutput 只能選一個,沒什麼好說的,但 inputPass by valuePass by reference 兩種,我們就來說一下它們有什麼差異。

 

Pass by value 最簡單,你 'Hello' 傳給 Function ,Function 就會接收到 'Hello' ,並把它放進下圖的 as_string 中,是個「值」的傳遞,跟外部不關連。

Pass by reference 傳的是「指標」,是個指着某個變量的指標,與調用該 function() 的外部關連,外面必須有個相同類型的變量,用以保存它在 function() 內的變化。意思就是說,不管 as_array[] 在裏面變成怎麼樣,外面的 array 也會變成怎麼樣,因為它們根本是同一個東西,這就剛好解決了前面說只能有一個 output 的問題了

文章標籤

過時程式員 發表在 痞客邦 留言(0) 人氣()

PowerBuilder 裏面比較常接觸到的有兩種 Function ,讓你可以把代碼打包起來不斷重複調用,不必每次重寫差不多的代碼。Functions 又叫 User-defined function 就是通用的,在整個程式裏都可以調用,Window function 就是限於在當前 Window 裏可用

 

Function 就是整個系統都可以調用的通用代碼,由於是希望儘量通用,所以在寫的時候就要考慮到未來的各種可能性,比方說 input 什麼,output 又是什麼之類的,例子有:

  1. f_if (boolean ab_boolean, any aa_true, any aa_false) return any -- 若表述正確 (ab_boolean),反饋 aa_true,否則反饋 aa_false , e.g. f_if ( 1 + 1 = 2, 'True', 'False')
  2. f_isempty (any argu_value) return boolean -- argu_value 若為空則反饋 True
  3. f_get_server_time() return datetime -- 反饋伺服器當前時間

 

過時程式員 發表在 痞客邦 留言(0) 人氣()

PowerBuilder 提供了最基本的信息盒,但如果都在代碼裏面直接使用的話,那就難以支持多語言、沒彈性、用字也不易統一,因為不同程式員會有不同的習慣,可能 A 程式員用「請問需要儲存嗎?」,B 程式員卻問「是否要保存?」,這讓用戶體驗不好,後續也難以維護。

 

為了改良以上的問題,我們可以在調用 MessageBox() 前多加點功夫。過程中需要:

  • 一個 PB function
  • 信息設定表
  • 日誌表

 

文章標籤

過時程式員 發表在 痞客邦 留言(0) 人氣()

既然在前面提過「繼承」,我還是先說一下繼承好了。「繼承」就是所有子孫都能繼承祖先的所有代碼,不需另外再寫,可以擴展,也可以停用。

 

以下圖為例,一個 Window,內含三個 datawindow control 加一堆按鈕,每個控件裏面都寫好一堆相應的代碼,以後從它繼承出來的新 Window 就可以直接使用所有的控件和代碼了。不止 Window ,其他如 datawindow、按鈕之類的控件也可以有同樣的做法,在開發前期先寫好「祖先」,而同一套「袓先」也可以套用到往後開發的其他系統,這可以為未來的開發省下很多的時間。

 

文章標籤

過時程式員 發表在 痞客邦 留言(0) 人氣()

近來所開發的系統都需要面對來自五湖四海的用戶,所以系統都需要提供多語言的界面,讓用戶選擇他想要的。這裏我就簡單說個思路,讓大家考一下。

 

思路如下:

  1. 系統內所有文字都用英文,因為英文在各語言版本的 Windows、各種數據庫內的編碼都相對統一,不容易出現亂碼。
  2. 建一個作為字典數據表。
  3. 定義一個全局變量作為「目標語言」,讓用戶在登戶時選擇,或存到用戶設定表中。
  4. 以「目標語言」為主鍵,到字典表中找出對應的翻譯
  5. 替換控件上的文字

 

文章標籤

過時程式員 發表在 痞客邦 留言(0) 人氣()

大家都在開箱機身,那我就來開一下配件好了,矽膠護套+繫繩。

矽膠套如以前的一樣,按機子量身訂製,一切都剛剛好,無可挑剔。

繫繩有點小改,加入扣子設計,方便隨時拆下來,在冬天衣服厚厚,或戴着帽子的時候挺方便的。

 

過時程式員 發表在 痞客邦 留言(0) 人氣()

在 PowerBuilder 裏,所有控件都有個叫「Tag」的屬性,Tag 可以理解為這控件的標籤,是不是獨有的,就看你的用法了。

我會把它作為 id 去使用,例如在 menu 裏,每個 menu item 都為它定義一個 id ,每個 id 都在數據庫裏面定義它的屬性,比方在 menu 點中這個 id  會打開哪個窗體、這個窗體裏面有哪些新增、刪除等功能,這窗體內的datawindow object 有哪幾個之類,讓一切設定都存在數據庫中,在不需重新部署的情況下都隨時可改。

當然,在打開窗體之前,你也可以以此 id 去檢查對應的用戶權限,確定用戶對這功能有權之後才去打開窗體。

tag.JPG

文章標籤

過時程式員 發表在 痞客邦 留言(0) 人氣()

數據一萬行,highlight 第一跟最後一行,欲取 highlight 行號,最直接就是用 IsSelected() 去逐行檢查,但這就要檢查一萬遍了。

isselected.JPG

GetSelectRow() 的話,循環兩遍就能做好了。

getselected.JPG

文章標籤

過時程式員 發表在 痞客邦 留言(0) 人氣()

Rowcount()

方法一,rowcount() 只執行一遍,結果放在 ll_total 裏,往後重復使用。

方法二,rowcount() 按行數執行,如果 Datawindow 有十萬行的話,rowcount() 就要計算十萬遍了。

捕获.JPG

文章標籤

過時程式員 發表在 痞客邦 留言(2) 人氣()