2009年11月26日 星期四

設計DataWindow的好習慣:SQL Plan

PowerBuiler中的DataWindow就是SQL Result的視覺化物件。在.net中的物件中類似是DataGrid。

當你設計一個 DataWindow 時,很大的機會都會用到 SQL 查詢。
但是很方便的設計工具,不代表你可以有效的使用它。

雖然我這裡的範例使用的是 ASE SQL Server,
而且 SQL 語句都是在 SQL server 上執行的,
但是本質上 SQL 查詢的指令和模式都有很大的雷同,
所以這裡沒有指定是哪一種 SQL Server ,我要提供的只是觀念。

2009年11月19日 星期四

在PowerBuilder下轉換簡繁體中文字

聲明:這是在Windows XP SP3繁體中文版環境底下的方式,不一定適用於英文版外掛繁體中文套件及Windows XP簡體版。

這是PB10的版本,如果你是PB10以下的版本,請注意external function宣告的方式不需要使用";ansi"。

首先宣告 instant 變數 :

// 區域語系
Constant    long   LCMAP_TRADITIONAL_CHINESE=67108864
Constant    long   LCMAP_SIMPLIFIED_CHINESE=33554432
// 編碼方式
constant Uint CP_ANSI          = 0         // default to ANSI code page
constant Uint CP_OEM           = 1         // default to OEM code page
constant Uint CP_MAC           = 2         // MAC code page
constant Uint CP_TANSI         = 3         // THREAD ANSI code page 
constant Uint CP_SYMB          = 42        // SYMBOL
constant Uint CP_WIN874        = 874       // "windows-874" "泰文 (Windows)"
constant Uint CP_2022_JP_SJ    = 932       // "iso-2022-jp" "日文 (Shift-JIS)"
constant Uint CP_GB2312        = 936       // 簡體中文   (GB2312)
constant Uint CP_KR            = 949       // "euc-kr" "韓文"
constant Uint CP_BIG5          = 950       // 950 為 "big5" "繁體中文 (Big5)"
constant Uint CP_UNICODE_BE    = 1201      // "unicodeFFFE" "Unicode (Big-Endian)"
constant Uint CP_WIN1258       = 1258      // "windows-1258" "越南文 (Windows)"
constant Uint CP_USERD         = 50000     // "x-user-defined" "使用者定義"
constant Uint CP_AUTO          = 50001     // "_autodetect_all" "自動選取"
constant Uint CP_2022_JP_J     = 50220     // "iso-2022-jp" "日文 (JIS)"
constant Uint CP_2022_KR       = 50225     //  "iso-2022-kr" "韓文 (ISO)" 
constant Uint CP_JP_AUTO       = 50932     // "_autodetect" "日文 (自動選取)" 
constant Uint CP_KR_AUTO       = 50949     // "_autodetect_kr" "韓文 (自動選取)"
constant Uint CP_JP_EUC        = 51932     // "euc-jp" "日文 (EUC)" 
constant Uint CP_KR_EUC        = 51949     // "euc-kr" "韓文 (EUC)" 
constant Uint CP_GB2312_HZ     = 52936     // "hz-gb-2312" "簡體中文 (HZ)"  
constant Uint CP_UTF7          = 65000     // "utf-7" "Unicode (UTF-7)"
constant Uint CP_UTF8          = 65001     // Unicode   (UTF-8)

然後是 external Function :

2009年11月18日 星期三

網路漫畫下載程式

這是我自己寫的小程式
謝謝各位關心,本頁由於對象網站抓取異常已經停止更新,原程式已經重新修改並導向新網站抓取漫畫,歡迎各位到 這裡來看看

原本,在阿榮的網頁裡面看到的 抓線上漫畫的小軟體 後,愛看漫畫的我終於可以免除用網頁看漫畫的痛苦,但是常常遇到 kukudm 網站的問題(改程式碼、主機位置、網頁塞車)的困擾,導致常常下載不了,加上原本作者在當兵無法即時維護,沒辦法之餘,只好把以前拿來分析網頁的程式改寫,做出了這支程式,當然也感謝榮哥幫我刊載。

不過,由於它是PowerBuilder 10開發的,所以Runtime的部份頗大,主程式約400K,但是Runtimer就大到 13MB了!關於Runtime的檔案我還不知道要如何簡化,盡量把不要的DB connect檔案拿掉了。
提醒您,漫畫雖然好看,但是也要讓眼睛適當休息,畢竟螢幕會比書本對您的眼睛殺傷力更大喔。
廢話不多了,簡單介紹用法吧,有興趣玩的就自行下載去玩。
網頁文章內容圖片來不及更新,所以會與程式畫面有一點點出入
下載位置請點這裡,版本:2.0.4.5,RAR壓縮檔,約5MB,解壓後約15MB。沒有密碼。

※來源網站的漫畫列表暫時關閉不對外開放,因此無法取得列表了。
請找到檔案 kukudm.exe,點擊並執行,主畫面如下:




2009年11月13日 星期五

2009年11月10日 星期二

Powerbulder 呼叫 Windows API 要注意的地方-字串的傳遞

Windows API 函式(以下簡稱API)

PowerBuilder(以下簡稱PB,以下範例使用PB6,PB10因為有UNICODE編碼關係會比較麻煩在此不方便做DEMO)的特性大部分用的人都知道,其缺點就是UI介面太單調、低階操作完全不行(我是指位元組變數運算操作還有I/O控制),但是還好它支援API的呼叫使用。

但是另一個問題又來了,API的呼叫很多參數都牽涉到位元組處理還有定址等太多問題,所以本篇僅針對字串傳遞的問題發響。

關於API傳遞字串,其實會使用的人應該都會注意到一件事情,就是API要求字串傳遞時,通常都是以傳址方式處理,而且通常接下來一個參數就是字串長度的值。

2009年11月9日 星期一

EVENT呼叫的注意事項-Yield的使用

在PowerBuilder中事件的呼叫方式分為2種,『Post』與『Trigger』。

利用Trigger呼叫事件其實就像你在呼叫Function一樣,原本的程序會暫停(推入堆疊),然後執行Trigger的EVENT對象,執行完畢後,再回到(推出堆疊)原程序繼續執行,若是有回傳值,則會隨之回傳。

利用Post呼叫事件,則是將要呼叫的EVENT對象放到該物件的Message Queue(佇列)中等待被執行,原本程序不中斷繼續執行,因此如果你的事件有回傳值,會根本都收不到(因為還沒執行)

以上是PB對事件呼叫的方式(對Function 也可使用Post)。

原本,這樣的描述執行方式是沒有問題的,但卻有的很大的盲點,那就就是 yield() 指令。