當前位置:股票大全官網 - 財經新聞 - 動態數據窗口在PB中的技術應用

動態數據窗口在PB中的技術應用

在PowerBuilder應用程序開發過程中,操作數據庫中數據的對象是DataWindow對象。使用數據窗口對象,我們可以方便地檢索、查詢、插入、刪除和更新數據庫中現有表中的數據。但是在實際問題中,我們經常會遇到數據庫中的壹些表格是用戶在程序運行過程中動態生成的。要操作這種表中的數據,必須使用動態數據窗口對象。值得壹提的是,在生成動態數據窗口對象時,標題區中的文本不能直接顯示為漢字。這確實是壹個遺憾,但是這個問題可以通過貼圖來解決。

提出壹個問題

下面有兩個表。

表A中的記錄是用戶在程序運行過程中可以自由添加、修改、刪除和更新的表B中的屬性(即字段),由表A中的記錄確定並動態創建,可以方便地為表B中的數據提供中文操作界面,當然表B的創建如下表。

也有可能,但是在動態生成數據窗口對象時,其頭帶中的文字不會顯示為漢字,而是壹些亂碼,不利於問題的解決。

第二,問題的解決

動態創建b表的解決方案

如果我們想要動態創建表B,我們必須構建動態SQL語句。什麽是動態SQL語句?數據庫應用程序通常做確定性的工作,因此完整的SQL語句在編寫和編譯時就可以確定。但是,當需要PowerBuilder不支持的嵌入式SQL語句(如DDL語句)或者在編譯時不知道語句的具體格式或參數時,SQL語句在運行時形成。這種語句稱為動態SQL語句。

動態SQL語句的格式

執行即時SQL語句[使用事務對象];

參數描述

SQL語句包含帶有SQL語句的字符串。

事務對象

動態數據窗口對象的創建及標題區文本本地化的解決方案。

()程序運行時,我們可以調用Create函數動態生成數據窗口。對象格式如下

DataWindowControl Create(語法{ Errorbuffer})

參數描述

數據窗口控件將在其中創建數據窗口對象的DataWindowControl的名稱。

語法數據窗口對象源代碼

Errorbuffer是用於存儲錯誤信息的字符串。

()由於表頭區文本框的名稱是由明細區對應列的名稱加上_t組成的,而明細區對應列的名稱是對應表的屬性名稱,我們可以用光標取出表A中的ywm和zwm的值,然後替換表頭區(H)表頭區文本框的text屬性,使表頭區文本框的文本顯示為對應的漢字。

三、壹個簡單的例子

在PowerBuilder和MS SQL Server的環境下,用壹個簡單的例子來實現上述觀點,限於篇幅,只列出主要界面和關鍵程序。

動態創建表B的按鈕對應的代碼是

int li_i= li_count

字符串ywm[] zdlx[] ls_temp ls_sql

//使用遊標從數據庫表中獲取ywm和zdlx的值,並將它們存儲在數組ywm[]和zdlx[]中。

select count(*)into:Li _ count from a;

為SELECT ywm zdlx從order by ywm聲明_cur遊標;

打開a _ cur

取a_cur到:ywm[Li _ I]:zdlx[Li _ I];

當sqlca sqlcode=

ls_temp=trim(zdlx[li_i])

選擇事例ls_temp

情況

ls_temp= char()

情況

ls_temp= numeric()

結束選擇

zdlx[li_i]=ls_temp

ywm[li_i]=trim(ywm[li_i])

li_i++

取a_cur到:ywm[Li _ I]:zdlx[Li _ I];

關閉a _ cur

//創建表B和主鍵。

ls_sql=創建表b+(+ywm[]+++zdlx[]+not null & amp;

+約束pk_b主鍵(+ywm[ ]+))

立即執行:ls _ sql

//添加表b的列。

for li_i= to li_count

ls _ SQL = alter table b add+ywm[Li _ I]++ zdlx[Li _ I]

立即執行:ls _ sql

結束於

與用於動態創建數據窗口對象的按鈕相對應的代碼是

字符串語法SQL select errmsg ls _ col ls _ col ls _ name ls _ b;

//動態創建壹個數據窗口對象DataWindow

ls_b= b

SQL select = select * from+ls _ b;

syntax = sqlca syntaxfromsql(SQL select style(type = grid)errmsg)

dw_ create(語法)

//中文標題帶文本

從order by ywm中為SELECT ywm zwm聲明v_cur遊標;

打開v _ cur

將v_cur提取到:ls _ col:ls _ col;

當sqlca sqlcode=

ls _ name = ls _ col+_+t++ text+= +++ls _ col+

數據倉庫修改(最小二乘名)

將v_cur提取到:ls _ col:ls _ col;

關閉v _ cur

dw_ settransobject(sqlca)

dw_檢索()

四個結束語

Lishi Xinzhi/Article/program/PB/201311/24646