suizhekongzhixitonggongnengdezengqiangyuduoxitongzhijianshujugongxiangxuqiudezengda,zutairuanjianyuguanxishujukuzhijiandetongxunyeyujiapinfan,erzhezhijiandeshujugongxiangyebiandeyuelaiyuezhongyao。suizheyewuxuqiudezhujianzengda,zenyangjiangfuzadetongxunyugongnengshixianjiandanhuayechengweilezhongduoshangjiadeyigezhongyaojingzhengdian。weifangbianguangdayonghu,zijinqiaozutairuanjiantetuichuyixindegongnengzujian—— ObDataTable ,通過該組件,用戶可以很簡單的實現紫金橋組態軟件與關係數據庫的數據共享。組件 ObDataTable 作為中間媒介,將紫金橋組態軟件中的自由報表與關係數據庫按照一定的關係連接起來。
圖1 數據流向關係
對於一些複雜的綜合報表,報表中的數據來源或者去向並不統一。比如我們把數據劃分為好幾個區域,區域 A 中的數據要存儲到表 A 中,區域 B 中的數據要存儲到表 B 中等等。按照通常的方法,會通過紫金橋內的 SQL 函數寫一些腳本將數據存到關係庫中,但是這樣的方法比較複雜,且代碼量通常都比較大,編寫起來比較麻煩,而現在通過組件 ObDataTable 將會把工作簡單化,下麵講解具體實現方法。
在講解實現方法時,先介紹一下四個函數:
1、 GetFromTable() ,此為自由報表函數,函數功能為從 ObDataTable 中獲得數據。
2、 SetToTable() ,此為自由報表函數,函數功能為將數據放置到 ObDataTable 中。
3、 SQLGetToTable() ,此為紫金橋內部SQL函數,函數功能為將數據集中全部數據複製到 ObDataTable 中。
4、 SQLInsertFromTable() ,此為紫金橋內部SQL函數,函數功能為將 ObDataTable 中數據插入到數據庫中。
圖2 報表區域劃分說明
如上圖所示,該報表劃分為三個區域。首先,要在關係庫中建立三個表,分別為表A,表B,表C。按照報表中三個區域的規格建立相應的字段,注:關係庫表中的字段數,類型要與報表中的完全對應。
其次,編寫數據存入與讀取腳本。在向關係庫插入數據時分為兩個步驟:
一、 將報表中的數據存入到 ObDataTable 中。期間調用函數報表函數 SetToTable() ,該函數能夠指定報表中的區域,如選擇的為區域A,函數執行過後,區域A中的數據則會全部存入到 ObDataTable 中。如: #FreeReport1.SetToTable(1,1,7,10,#ObDataTable,0) 。函數意為將自由報表 FreeReport1 的區域 1 至 7 列, 1 至 10 行的數據全部存入到 ObDataTable 中。
二、 將存入到 ObDataTable 中的數據寫入到關係庫的表中。期間調用函數 SQLInsertFromTable() ,該函數執行過後將會將 ObDataTable 中的數據寫入到關係庫中相應的表中。該函數執行之前要調用 SQLConnect() 函數。如:
int ConnectID;
SQLConnect((ConnectID,”數據源描述 ”);
SQLInsertFromTable(ConnectID," 表 A",#ObDataTable1);
其中 ConnectID 為執行 SQLConnect() 之後的數據源表示返回值。數據源描述需要人為的填寫。
這兩步操作之後,區域 A 中的數據則會全部寫入到關係庫表 A 中。
從關係庫中讀取數據時同樣也分為兩個步驟:
一、 將關係庫表中的數據讀取到 ObDataTable 中。期間要調用函數 SQLGetToTable() ,該函數要與 SQLSelect() 函數配合使用。首先要將關係庫表中符合條件的數據通過 SQLSelect() 函數查出來,在通過 SQLGetToTable() 函數寫入到 ObDataTable 中。如:
int ConnectID;
SQLConnect((ConnectID,”數據源描述 ”);
SQLSelect(ConnectID," 表 A"," 查詢條件表達式 ");
SQLGetToTable(#ObDataTable1);
二、 將 ObDataTable 中的數據寫入到自由報表中。期間要調用自由報表函數 GetFromTable() ,該函數可以將 ObDataTable 中的數據寫入到自由報表中指定的區域。
如: #FreeReport1.GetFromTable(1,1,#ObDataTable1,0); 函數意為將 ObDataTable 中的數據寫入到自由報表從第一行,第一列開始的區域中。
這兩步操作過後,關係庫表 A 中符合查詢條件的數據則會寫入到自由報表區域 A 中。區域 B ,區域 C 的同理。
ObDataTable 的(de)出(chu)現(xian),使(shi)紫(zi)金(jin)橋(qiao)組(zu)態(tai)軟(ruan)件(jian)與(yu)關(guan)係(xi)庫(ku)的(de)通(tong)訊(xun)不(bu)在(zai)像(xiang)以(yi)往(wang)那(na)樣(yang)繁(fan)瑣(suo),且(qie)功(gong)能(neng)實(shi)現(xian)簡(jian)單(dan),用(yong)戶(hu)通(tong)過(guo)少(shao)量(liang)的(de)腳(jiao)本(ben)即(ji)可(ke)實(shi)現(xian)預(yu)想(xiang)的(de)功(gong)能(neng),避(bi)免(mian)了(le)大(da)量(liang)的(de)編(bian)寫(xie)腳(jiao)本(ben)時(shi)存(cun)在(zai)的(de)潛(qian)在(zai)錯(cuo)誤(wu),方(fang)便(bian)廣(guang)大(da)用(yong)戶(hu)操(cao)作(zuo)使(shi)用(yong)。