PowerBuilder用Create()函數創建動態數據窗口,其語法格式為:
dw.Create(Syntax[,ErrString])?
其中:dw為需創建的動態數據窗口名;Syntax為創建動態數據窗口的語法字符串;ErrString為可選參數,用來存放發生錯誤時的錯誤信息,若忽略,發生錯誤時系統自動顯示消息框,一般不符我們需要,所以需定義該參數。
顯然重點在Syntax, PowerBuilder提供LibraryExport()與SyntaxFromSQL()二個函數來達到這個目的:
一、 LibraryExport()函數
功能:從PowerBuilder庫中輸出一個對象,返回該對象的語法。
語法格式:LibraryExport(LibName,ObjName,ObjType)
其中:LibName 為帶路徑的PowerBuilder庫名,若未指定路徑,則按系統標準搜索路徑搜索;ObjName為導出對象名,現為LibName中的數據窗口對象名;ObjType為該對象的類型,現為數據窗口,值為ExportDataWindow!。示例如下:
String ls_DwSyntax,ls_Error
ls_DwSyntax=LibraryExport("C:\PBExam\dy_dw.pbl","d_tbl1", ExportDataWindow!)
//數據窗口dw_1的產生下面將詳細討論,現暫略
dw_1.Create(ls_DwSyntax,ls_Error)
//以下語句與下面示例中的相同,故此處略。
LibraryExport()函數是利用已有的數據窗口對象創建動態數據窗口,有一定的使用價值,但不多見。
二、 SyntaxFromSQL()函數
功能:基于SQL的SELECT 語句產生創建數據窗口的語法。
語法格式:Transaction.SyntaxFromSQL(SqlString,StyleString,ErrorString)
其中:Transaction.為已連接的事務對象,一般即為SQLCA;SqlString為SQL--SELECT 語句;Stylestring為數據窗口的顯示風格字符串,比較復雜,一般常用"Style(Type=Grid)";ErrorString用來存放發生錯誤時的錯誤信息。
一般來說,SyntaxFromSQL()函數靈活性高、功能強,因此創建動態數據窗口大都使用該函數,下面的示例也是使用該函數。
三、創建動態數據窗口的一般步驟
創建動態數據窗口的一般步驟如下:
1、在某窗口(如w_main)上用鼠標點建一個數據窗口控件(如dw_1),其DataObject為空。
2、構造SyntaxFromSQL()函數的語法字符串。這是PowerBuilder動態數據窗口的關鍵,稍為復雜一些,具體做法請見下面實例。
3、用Create()函數創建動態數據窗口dw_1,并用SetTransObject()函數為其分配事務對象,具體做法請見下面實例。
這種方法的主要缺點是必須在設計階段先建數據窗口控件,運行時無法增減,這對于一些較為特殊的應用(如設計階段尚不知需幾個數據窗口)就不太適合了。那如何解決這個問題呢?經過一番摸索并查閱了一些資料,終于找到了二種解決方法,現分別介紹如下:
1、創建一個標準可視數據窗口用戶對象u_d_sample
PowerBuilder6.0/6.5中步驟為:點擊工具欄上的UserObject圖標,在彈出的Select User Object窗口中點擊New按鈕,出現New User Object窗口,雙擊其中Visual下的Standard圖標, 在彈出的Select Standard Visual Type窗口中雙擊datawindow選項,即出現User Object(Untitled)窗口, 點擊工具欄上的Save圖標,彈出的Save User Object窗口,在User Objects: 中輸入u_d_sample回車即進入User Object---u_d_sample窗口,關閉該窗口,標準可視數據窗口用戶對象u_d_sample即告建成。
PowerBuilder7.0中步驟為:點擊工具欄上的New圖標,在彈出的New窗口中選擇Object頁面,雙擊其中的Standard Visual圖標, 在彈出的Select Standard Visual Type窗口中雙擊datawindow選項,出現User Object(Untitled)inherited from datawindow窗口,將其右邊的Title欄中的none刪除,再點擊左邊空白區,然后點擊工具欄上的Save圖標,以后的操作步驟與PowerBuilder6.0/6.5大致相同。至于PowerBuilder8.0則與PowerBuilder7.0大體相同,不再贅述。
2、直接定義DataWindow型變量dw_1如下:
DataWindow dw_1
dw_1=Create DataWindow
其實第1種方法還須定義dw_1,形式如下:
u_d_sample dw_1
dw_1=Create u_d_ sample //此句可省略
這二種方法的關鍵都是使用OpenUserObject()函數,其功能即為打開一個用戶對象,語法格式:w_name.OpenUserObject(ObjName[,x,y]) 其中ObjName為需打開的用戶對象名;x、y為用戶對象的打開位置,省略時值均為0。
下面請見具體實例, 該實例在Win98、PowerBuilder8.0/PowerBuilder7.0/PowerBuilder6.5下通過,ODBC數據源已配置,為FoxPro25(可根據需要使用其他數據庫),數據表為bb.dbf。請先建窗口w_main,在其Open事件中寫入以下代碼:(注意:PowerBuilder8.0中先須創建WorkSpace(*.pbw),其他操作基本同PowerBuilder7.0)
//動態數據窗口dw_1創建實例
string lserr,lsSQLstr,lsDWsyntax,lserrC
SQLCA.DBMS="ODBC"
SQLCA.DBParm="ConnectString='DSN=FoxPro25'" //本例使用FoxPro25數據庫,可根據需要用其他數據庫
Connect;
//下面3條語句即為關鍵,若dw_1為鼠標點建請刪除這3條語句,否則會出錯。
DataWindow dw_1 //若采用數據窗口用戶對象u_d_sample,則可改為:u_d_sample dw_1
dw_1=Create DataWindow //若采用數據窗口用戶對象u_d_sample,此句應去除。
OpenUserObject(dw_1)
//Select…As…的As可將列標題顯示為As之后的字符,較為靈活方便。
//可根據實際情況設計生成Select語句及Where子句的可視化界面
lsSQLstr="Select A12 As 主管部門,A01 As 法人代碼,mc As 企業名稱,A06 From bb Where A12<'1'"
lsDwsyntax=SQLCA.SyntaxFromSQL(lsSQLstr,"style(type=Grid)",lserr) //構造SyntaxFromSQL()函數
If Len(lserr)>0 Then
//如果構造SyntaxFromSQL()函數失敗,則顯示錯誤信息并退出
messagebox("錯誤信息!",lserr)
Return
end if
dw_1.Create(lsDwsyntax,lserrC) //創建動態數據窗口dw_1
If Len(lserrC)>0 Then
//如果創建動態數據窗口dw_1失敗,則顯示錯誤信息并退出
messagebox("錯誤信息!",lserrC)
Return
end if
//以下設置dw_1的一些屬性,可根據實際需要設置。
dw_1.X=5
dw_1.Y=5
dw_1.width=1500
dw_1.height=650
dw_1.Visible=True
dw_1.Enabled=True
dw_1.HScrollBar=True
dw_1.VScrollBar=True
//為dw_1分配事務對象SQLCA
dw_1.SetTransObject(SQLCA)
//提取數據
dw_1.Retrieve()
第2種方法的優點大家一看即知,不必費勁去創建一個標準可視數據窗口用戶對象,但存在不足之處:不能在窗口w_main的其他事件或控件中引用dw_1。解決方法很簡單:將dw_1定義為實例變量(Instance Variable)。PowerBuilder6.0/6.5中:在窗口畫筆(w_main)的菜單上點擊Declareà Instance Variables…,在彈出窗口Declare Instance Variables中輸入datawindow dw_1, 點擊Ok按鈕即告完成。PowerBuilder7.0/8.0中:打開窗口畫筆,在其下半部的窗口Declare Instance Variables中輸入datawindow dw_1, 點擊工具欄上的Save圖標即告完成。
三點補充說明:
(一)、ODBC數據源設置
打開Windows操作系統的"開始"菜單--à設置--à控制面板--àODBC數據源,出現"ODBC數據源管理器"窗口,在"系統DSN"頁簽中點擊"添加(D)…"按鈕,出現"創建新數據源"窗口,雙擊列表框中"Microsoft FoxPro Driver (*.dbf)"選項(或"Microsoft dBase Driver (*.dbf)"或"Microsoft FoxPro Driver (*.dbf)"或"Microsoft Visual FoxPro Driver"),現以"Microsoft dBase Driver (*.dbf)"為例(其他大同小異),即彈出"ODBC dBase安裝"窗口,在"數據源名稱"文本框中輸入FoxPro25,在"版本"下拉框中選擇dBaseⅢ,然后去掉"使用當前目錄"前的√,點擊"選定目錄(S)…"按鈕,在彈出的"選定目錄"窗口中選擇您數據庫文件所在目錄,然后點擊"確定"按鈕即可。其他數據源可參照設置。
(二)、PowerBuilder8.0有關問題
PowerBuilder8.0正式版是從 http://www.yeswit.com/pb80/index.htm 用NetAnts下載3.5小時得到的。PowerBuilder8.0中創建應用先須創建(或打開)WorkSpace(*.pbw),其他操作基本同PowerBuilder7.0。本示例在PowerBuilder8.0中運行需如下三個文件:dw_dynamic8.pbl, WkSpForPB8.pbw,test.pbt。如圖(-)為PowerBuilder8.0中編輯本示例的主窗口w_main的樣圖。
(三)、其他說明
本人傳送的dw_dynamic.zip中包括如下6個文件:bb.dbf(FoxPro數據表)、dw_dynamic6.pbl(PB6.0的程序庫文件)、dw_dynamic7.pbl(PB7.0的程序庫文件)及PB8.0的3個文件dw_dynamic8.pbl, WkSpForPB8.pbw和test.pbt。請分別在各自對應版本的PB中打開、運行。
轉自:
http://www.yesky.com/SoftChannel/72342371928571904/20011127/207107.shtml
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
