PB編寫登錄程序

 我們的要求是,首先打開主窗口,然後顯示登錄界面,用戶最多可以嘗試登錄3次,如果登錄成功,則根據用戶權限初始化主窗口界面,否則關閉整個應用。
   登錄程序看似簡單,實際上涉及到的知識不少。知識點有:SQL語句的使用、窗口類型的理解、SingleLineEdit控件、CommandButton的屬性的應用、自定義用戶事件、如何觸發自定義用戶事件、使用窗口實例變量、不同窗口之間如何傳遞信息等。下面我們開始實現該程序。
   設計登錄窗口w_login,放置兩個SingleEdit、兩個CommandButton,分別命名爲sle_userid、sle_password、cb_cancel、cb_ok;選中sle_password的password屬性。爲了計算用戶嘗試登錄的次數,首先定義一個窗口實例變量:
   integer ii_count = 3
用戶在sle_userid中輸入用戶登錄標誌,回車時應該自動切換到sle_password中。所以,在sle_userid的Modified事件中編寫如下腳本:
 sle_password.SetFocus()
同樣,用戶在sle_password中輸入完口令,然後回車,這時應該對用戶輸入的登錄信息進行校驗,所以需要觸發cb_ok按鈕的Clicked事件。所以,在sle_password的Modified事件中編寫如下腳本:
 cb_ok.Default = True
上面爲什麼不能使用cb_ok.TriggerEvent(Clicked!)呢?細心的讀者請先自己琢磨。接下來是我們的主要編程了,在cb_ok命令按鈕的Clicked事件上編寫如下腳本:
   String ls_userid
String ls_password
integer li_count

ls_userid = sle_userid.Text
ls_password = sle_password.Text

select count(*) into :li_count
from users
where userid = :ls_userid and password = :ls_password;

if li_count > 0 then
gs_userid = ls_userid
select username into :gs_username
from users
where userid = :ls_userid;

CloseWithReturn(parent,'ok')
else
ii_count --
if ii_count = 0 then halt close;
sle_userid.text = ''
sle_password.text = ''
this.Default = False
sle_userid.SetFocus()
end if
在cb_cancel命令按鈕的Clicked事件中編寫如下腳本:
 CloseWithReturn(parent,'cancel')
在窗口的Open事件中編寫如下腳本:
 sle_userid.SetFocus()
然後將窗口的類型設置爲response類型。至此,用戶登錄窗口全部完成。接下來我們在主窗口調用它了。比如,我們程序的主窗口名稱是w_main,在Application對象的Open事件打開該窗口。接下來,我們需要在w_main中調用w_login。
 通過上面的程序我們可以看出,用戶登錄是否成功是通過w_login的返回信息來確定的。用戶登錄成功,則w_main繼續進行界面初始化,否則關閉整個應用。因爲w_login是response類型的,所以w_main在打開w_login之後就一直處於等待狀態,知道w_login關閉返回信息w_main才繼續執行。爲了保證w_main首先顯示出來,然後再顯示w_login,我們需要爲w_main定義自定義事件,比如我們定義ue_open事件。在w_main的Open事件中編寫如下程序:
   this.PostEvent('ue_open')
然後,在ue_open事件中編寫如下程序:
   String ls_temp

     Open(w_login)//打開登錄窗口
   ls_temp = Message.StringParm//接受登錄窗口的返回信息。

   if ls_temp <> 'ok' then//如果沒有登錄成功。
halt close;//關閉系統
   else//登錄成功,根據用戶權限初始化用戶界面。語句省略
   end if
發佈了29 篇原創文章 · 獲贊 7 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章