|
隨sui著zhe控kong製zhi係xi統tong功gong能neng的de增zeng強qiang與yu多duo係xi統tong之zhi間jian數shu據ju共gong享xiang需xu求qiu的de增zeng大da,組zu態tai軟ruan件jian與yu關guan係xi數shu據ju庫ku之zhi間jian的de通tong訊xun也ye愈yu加jia頻pin繁fan,二er者zhe之zhi間jian的de數shu據ju共gong享xiang也ye變bian得de越yue來lai越yue重zhong要yao。隨sui著zhe業ye務wu需xu求qiu的de逐zhu漸jian增zeng大da,怎zen樣yang將jiang複fu雜za的de通tong訊xun與yu功gong能neng實shi現xian簡jian單dan化hua也ye成cheng為wei了le眾zhong多duo商shang家jia的de一yi個ge重zhong要yao競jing爭zheng點dian。為wei方fang便bian廣guang大da用yong戶hu,紫zi金jin橋qiao組zu態tai軟ruan件jian特te推tui出chu一yi新xin的de功gong能neng組zu件jian——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。
|