辦公之星控件與數據庫的交互

 

辦公之星控件(http://www.standsoft.com),作爲一個優秀的圖文混排控件,在B/S架構系統中應用得非常廣泛。作爲表示層,它可以很好的呈現圖文混排的文檔、各種複雜的報表、也可以作爲數據採集錄入的界面,有效的解決了B/S架構系統中客戶端的文檔顯示和打印問題。在實際工作中,我們經常碰到這種場合:文檔樣式不變,其中的數據(包括圖片)允許發生變化,點擊“上一個”、“下一個”按鈕可進行數據瀏覽。數據用數據庫組織顯然是最棒的,那麼辦公之星控件如何在文檔中顯示來源於數據庫的數據?如何上下瀏覽數據?

我們分析一下,數據庫存儲在服務器端,辦公之星控件在客戶端,要求客戶端一定能夠完成數據綁定是不現實的,尤其是對於複雜而不規則的報表來說更是如此。這樣開發者在數據組織、分析、挖掘上就有了更多的可控空間。而XML由於其優秀的擴展性和靈活性使它允許描述不同種類應用軟件中的數據,是數據傳輸媒體的最佳人選。

在這裏我們介紹一種數據島技術。XML的數據源對象又稱數據島(英文縮寫DSO)。數據島的實現機制是將一個XML文檔或一段XML代碼當作一個類似於數據庫的對象,使用傳統操作數據庫的方法來操作XML文檔中的數據,例如數據的添加、刪除、更新和查詢。有人也將其稱爲一個在網絡上流動的數據庫。另一方面數據島提供了一種將XML格式數據和表格、文本框等進行綁定的技術。

以下是整個方案框架圖:

CSDN_Dev_Image_2003-12-21544061.jpg

一、建立數據島

首先,建立一個一XML文件,將數據庫的數據從服務器端取出來。以下是一段ASP示例代碼:

<%
response.buffer=true 
dim conn
dim connstr
dim db
dim sql,rs
'數據庫路徑
db="db/db.mdb"
Set conn = Server.CreateObject("ADODB.Connection")
connstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(""&db&"")
conn.Open connstr
Set rs= Server.CreateObject("ADODB.Recordset") 
'取得cell數據表中所有字段
sql="select * from cell"
rs.open sql,conn,1,1
%>
<?xml version="1.0" encoding="gb2312"?>
'通過循環生成XML文檔正文
<cells>
<% while not rs.eof
%>
<cell>
<id><%=trim(rs("id"))%></id>
<name><%=trim(rs("name"))%></name>
<***><%=trim(rs("***"))%></***>
</cell>
<%
rs.movenext
wend
rs.close
%>
</cells>

將以上代碼存爲xml.asp文件。

二、通過記錄集管理數據島

記錄是數據庫中的一條數據,在關係型數據庫中對應了一行數據,所有行數的集合稱爲記錄集。一個記錄集包含一條或多條記錄(行),每個記錄包括一個或多個潁ㄗ侄危1舊鞷ecordset是一套管理數據庫的方法,這裏完全可以用來管理XML文檔。

使用記錄集管理XML文檔中數據的第一步是創建一個記錄集對象;然後再通過該記錄集對象的相關屬性和方法來管理其中的數據。通過數據島技術引入外部的XML文檔時,一個記錄集對象就會被自動創建。

1. 聲明記錄集

首先定義一個數據島,然後再調用該數據島的一個屬性從而生成一個記錄集,具體語法類似下面程序所示:

<xml id="xmlid" src="xml.asp"></xml>
<script language="vbscript">
set rs=xmlid.recordset
……
</script>

上面語句第一行中id屬性是標識數據源的惟一名字,第二個參數src指定了所調用外部XML數據文件的路徑。

2. 顯示記錄集

記錄集中的每一條記錄都對應數據表中的一行數據。要顯示記錄集中的所有記錄,只要簡單地做一個循環,具體的語法類似下面程序:

whild not rs.eof
document.write "<tr><td bgcolor='#99ff99'>"
document.write(rs("id"))
document.write "</td><td bgcolor='#99ff99'>"
document.write(rs("name"))
document.write "</td><td bgcolor='#99ff99'>"
document.write(rs("***"))
document.write "</td></tr>"
rs.movenext
wend

剛打開一個記錄集時默認的當前記錄是第一條記錄,上面方法通過調用記錄集對象的MoveNext方法,使當前記錄移動到下一條記錄。更多方法請參見:

3. 操作記錄集的方法

addnew 向記錄集中添加一條新記錄
delete 從記錄集中刪除一條記錄

MoveFirst 移動到記錄集的第一條記錄
MoveNext 移動到記錄集的下一條記錄
MovePrevious 移動到記錄集的上一條記錄
MoveLast 移動到記錄集的最後一條記錄

BOF 標明當前位置在記錄集中的第一條記錄之前。
EOF 標明當前位置在記錄集中的最後一條記錄之後。

三、辦公之星控件中數據顯示

數據島通過辦公之星控件顯示數據的技術核心是建立XML數據與辦公之星控件文檔中表格之間的對應關係。辦公之星控件提供別名對文檔中表格的表元進行操作。

1. 設置別名

在辦公之星控件文檔編輯器(即辦公之星軟件)中,對着表格中表元單擊鼠標右鍵,從彈出的右鍵快捷菜單中選擇“設置別名”命令,這時候會彈出一個對話框,在該對話框中輸入表元別名。

CSDN_Dev_Image_2003-12-21544063.jpg

2. 爲別名賦值

辦公之星控件中對別名進行賦值的接口方法爲:SetFieldvalue "",""

該方法第一個參數爲別名名稱,第二個參數爲具體值。例如將數據島中name域的內容賦予別名爲name的表元,其代碼可爲:

OStar.SetFieldvalue "name",rs("name")

上面代碼中“OStar”是程序中標識辦公之星控件的惟一名字,在插入控件時通過id進行設置。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章