提出壹個問題
下面有兩個表。
表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