摘 要: 根據(jù)Microsoft ODBC接口,、Authorware提供的ODBC.U32系統(tǒng)函數(shù),、Authorware中關(guān)于file的相關(guān)函數(shù)以及SQL Server理論,探討并研究了Authorware中靜態(tài)和動態(tài)方式訪問SQL Server數(shù)據(jù)庫的方法,,給出了Authorware 7中靜態(tài)和動態(tài)訪問SQL數(shù)據(jù)庫的實現(xiàn)方法,,并分別給出了較為詳細(xì)的實例操作過程。
關(guān)鍵詞: Authorware,;SQL Server,;數(shù)據(jù)庫
課件和知識測驗等。在這些Authorware的多媒體作品中,,經(jīng)常需要引用SQL Server數(shù)據(jù)庫中的數(shù)據(jù),。有時對引用數(shù)據(jù)只是一種單一靜態(tài)展示,有時需要引用實時SQL數(shù)據(jù)并且對引用SQL數(shù)據(jù)庫進(jìn)行編輯修改,,即以動態(tài)方式訪問SQL數(shù)據(jù)。這兩種引用SQL數(shù)據(jù)庫的方法在各種Authorware教材中或是不涉及或是涉及很少,。本文就Authorware中靜態(tài)方式和動態(tài)方式引用SQL數(shù)據(jù)庫數(shù)據(jù)的實現(xiàn)方法進(jìn)行探討并給出詳細(xì)的操作實例。
1 以靜態(tài)方式引用SQL數(shù)據(jù)庫中的數(shù)據(jù)
在Authorware的多媒體作品中有時候僅僅想引用并展示SQL的數(shù)據(jù)庫的查詢結(jié)果,,并不需要對數(shù)據(jù)庫數(shù)據(jù)進(jìn)行其他操作,,因此可以用靜態(tài)方式引用SQL數(shù)據(jù)庫中的數(shù)據(jù)。實現(xiàn)方法是將SQL數(shù)據(jù)庫查詢結(jié)果轉(zhuǎn)換成文本文件,,再利用Authorware提供的內(nèi)部函數(shù)訪問文本文件內(nèi)容,,從而獲得查詢結(jié)果集中的記錄及各字段的值。
1.1 在SQL Server中生成查詢結(jié)果的文本文件
方法1:在SQL中用命令方式實現(xiàn)
?。?)在SQL Server Management Studio 中執(zhí)行如下命令,,啟動 show advanced options 項并設(shè)置為 1后,, 再開啟xp_cmdshell(注:xp_cmdshell 擴(kuò)展存儲過程將命令字符串作為操作系統(tǒng)命令 shell 執(zhí)行,,并以文本行的形式返回所有輸出),。
EXEC sp_configure 'show advanced options', 1
GO
RECONFIGURE
GO
EXEC sp_configure 'xp_cmdshell', 1
GO
RECONFIGURE
GO
?。?)通過bcp將SQL查詢的結(jié)果保存在指定的文本文件中。
EXECmaster.dbo.xp_cmdshell 'bcp "select sno,sname,sex from studb.dbo.student" queryout "F:\authorware\student.txt" -c -T'
這時保存查詢結(jié)果的文本文件student.txt已經(jīng)存在了,,該文件中各字段之間的分隔符為Tab。
方法2:在SQL Server中用操作方式實現(xiàn)[3]
?。?)在SQL Server Management Studio工具菜單欄的選項中,,將查詢結(jié)果的顯示方式改為以文本格式顯示結(jié)果,并將輸出格式的分隔符設(shè)置為置表符分隔,。
?。?)重新啟動服務(wù)器后,執(zhí)行相應(yīng)的查詢命令:
Use studb
Go
selectsno,sname,sex from student
go
在顯示結(jié)果的窗格內(nèi)將最后一個非記錄行刪除,。
?。?)擊鼠標(biāo)右鍵,選擇“將結(jié)果另存為”命令,,保存查詢結(jié)果為txt文件,。
(4)打開該文本文件后,,選擇“另存為”命令,,在彈出的另存為對話框中,選擇編碼為ANSI,,如圖1所示,,單擊保存按鈕。
1.2 對文本文件進(jìn)行讀寫操作[3-4]
?。?)用ReadExtFile(“文本文件名”)函數(shù)讀取文本文件的內(nèi)容,,函數(shù)結(jié)果為文本文件的內(nèi)容字符串,。
Filestring:=ReadExtFile(“文件路徑及文件名”)
?。?)用LineCount()函數(shù)獲取整個結(jié)果集的記錄行數(shù),默認(rèn)分隔符為回車,。
Number:=LineCounr(“Filestring”)
?。?)用GetLine() 函數(shù)獲取字符串的第n行記錄,,結(jié)果仍為一個字符串。
recordstring:=GetLine(“Filestring”,n)
?。?)用replace()函數(shù)將記錄行中各字段間的分隔符Tab替換為回車符,,結(jié)果仍為字符串。
Rec:=Replace(Tab,”\r”,recordstring)
?。?)根據(jù)實際需要用GetLine()函數(shù)分別獲取該記錄中第m個字段值,,返回字段值的字符串。
fields1:=GetLine(rec,m)
?。?)在Authorware的顯示圖標(biāo)中及文字工具顯示所需的字段值,。
2 靜態(tài)訪問SQL數(shù)據(jù)實例
文中的示例數(shù)據(jù)庫是一個學(xué)生成績管理數(shù)據(jù)庫studb,其中有一個存放著學(xué)生基本信息的二維關(guān)系表stduent,,如圖2所示,。
設(shè)計流程線如圖3所示。
?。?)在設(shè)置窗口大小的計算圖標(biāo)中輸入代碼:ResizeWindow(240,150),。
(2)再讀取文本文件的計算圖標(biāo)中輸入代碼:
txtstring:=ReadExtFile("F:\\student.txt")
linecount:=LineCount(txtstring)
rec_n:=1
?。?)在顯示記錄的交互圖標(biāo)的附加計算圖標(biāo)中輸入代碼:
rec:=GetLine(txtstring, rec_n)
rec:=Replace(Tab,"\r",rec)
fields1:=GetLine(rec,1)
fields2:=GetLine(rec,2)
fields3:=getline(rec,3)
?。?)在交互圖標(biāo)中添加文字顯示:
學(xué)號:{fields1}
姓名:{fields2}
性別:{fields3}
(5)在交互圖標(biāo)右側(cè)的3個響應(yīng)方式為按鈕的計算圖標(biāo)中分別輸入代碼:
前一記錄:
if rec_n>1 then
rec_n:=rec_n-1
end if
后一記錄:
if linecount>rec_n then
rec_n:=rec_n+1
end if
退出:quit()
?。?)運(yùn)行結(jié)果如圖4所示,,通過單擊按鈕前一記錄和后一記錄,可進(jìn)行所有記錄的瀏覽,。單擊退出按鈕結(jié)束程序,。
3 以動態(tài)方式訪問SQL數(shù)據(jù)庫中的數(shù)據(jù)
Authorware7提供了一個支持標(biāo)準(zhǔn)ODBC 的數(shù)據(jù)庫接口—ODBC.U32,從而利用MicroSoft ODBC接口和標(biāo)準(zhǔn)的SQL語言實現(xiàn)對關(guān)系數(shù)據(jù)庫的添加,、刪除和查詢等基本操作[3],。
Authorware 執(zhí)行數(shù)據(jù)庫操作時,首先調(diào)用外部的U32函數(shù)(ODBC.U32),通過數(shù)據(jù)源或數(shù)據(jù)庫連接字符串與ODBC驅(qū)動程序建立聯(lián)系,,由ODBC驅(qū)動程序連接并打開數(shù)據(jù)庫,;然后用標(biāo)準(zhǔn) SQL命令通過U32函數(shù)的操作訪問數(shù)據(jù)庫,再對返回的記錄集通過調(diào)用某些系統(tǒng)函數(shù)可以獲取某條記錄的某個字段的值,;最后調(diào)用U32函數(shù)關(guān)閉數(shù)據(jù)庫連接,,結(jié)束對數(shù)據(jù)庫的訪問[2]。
3.1 控制面板中ODBC(32位)數(shù)據(jù)源管理的配置
進(jìn)行SQL數(shù)據(jù)源的配置有手動方式和調(diào)用“tMsdsn.u32”函數(shù)實現(xiàn) ODBC 數(shù)據(jù)源的自動配置自動方式,,自動方式見參考文獻(xiàn)[2],。本文介紹了手動配置過程。在控制面板中,,單擊圖5中的ODBC(32位)項,。在彈出的ODBC數(shù)據(jù)源管理器中,如圖6所示,,單擊添加按鈕,,在創(chuàng)建數(shù)據(jù)源的對話框中選擇數(shù)據(jù)源驅(qū)動程序為SQL Native Client,單擊完成,進(jìn)入到如圖7所示的創(chuàng)建SQL Server新數(shù)據(jù)源窗口,,給數(shù)據(jù)源命名,、選擇服務(wù)器、SQL登錄方式以及默認(rèn)數(shù)據(jù)庫(如本文中數(shù)據(jù)庫studb),如圖8所示,,并進(jìn)行數(shù)據(jù)源連接測試,,確定連接測試成功。
3.2 在Authorware7中操作數(shù)據(jù)庫
利用ODBC.U32的3個函數(shù)對SQL數(shù)據(jù)庫打開,、執(zhí)行SQL命令,、關(guān)閉SQL數(shù)據(jù)庫操作。
ODBCHandle:=ODBCOPEN(WindowHandl,ErrorVar,Database,User,password)
ODBCdata:=ODBCExecute(ODBCHandle,SQLstring)
ODBCClose(ODBCHandle)
其中,,SQLstring為需要執(zhí)行的SQL命令,,ODBCExecute()的執(zhí)行結(jié)果為結(jié)果字符串,對其內(nèi)容的處理方式同文本方式,。
4 動態(tài)訪問SQL數(shù)據(jù)實例
設(shè)計流程線如圖9所示,。
(1)在名為“窗口大小”的計算圖標(biāo)輸入代碼:
ResizeWindow(240,150)
?。?)在名為“odbc代碼”的計算圖標(biāo)內(nèi)輸入代碼:
database:="sql_studb"
sqlstring:="select sno,sname,sex from student"
odbcchandle:=ODBCOpen(WindowHandle,"odbccerror",database,"","")
odbcdata:=ODBCExecute(odbcchandle,sqlstring)
ODBCClose(odbcchandle)
?。?)在名為“統(tǒng)計記錄數(shù)”的計算圖標(biāo)內(nèi)輸入:
recordcount:=LineCount(odbcdata)
n:=1
(4)在交互圖標(biāo)的附加計算圖標(biāo)內(nèi)輸入:
rec:=GetLine(odbcdata,n)
rec:=Replace(Tab,"\r",rec)
fieldcount:=LineCount(rec)
field1:=GetLine(rec,1)
field2:=GetLine(rec,2)
field3:=GetLine(rec,3)
?。?)在交互圖標(biāo)右則的各計算圖標(biāo)內(nèi)容同靜態(tài)案例一樣,。
(6)運(yùn)行結(jié)果如圖10所示,。
本文根據(jù)microsoft ODBC接口,、Authorware提供的ODBC.U32系統(tǒng)函數(shù)、Authorware中關(guān)于file的相關(guān)函數(shù)以及SQL Server理論,,探討并研究了Authorware中靜態(tài)和動態(tài)方式訪問SQL Server數(shù)據(jù)庫的方法,,給出Authorware 7中靜態(tài)和動態(tài)訪問SQL數(shù)據(jù)庫的實現(xiàn)方法。以學(xué)生成績數(shù)據(jù)庫studb為SQL數(shù)據(jù)源,,提供了在Authorware7中分別以靜態(tài)和動態(tài)方式訪問SQL數(shù)據(jù)庫的詳細(xì)操作過程,,為需要在Authorware中訪問SQL數(shù)據(jù)庫數(shù)據(jù)的多媒體制作者提供參考。
參考文獻(xiàn)
[1] 王冬.Authorware程序訪問和操作數(shù)據(jù)庫初探[J].瓊州大學(xué) 學(xué)報,,2006,,13(2):113.
[2] 王彥麗.Authorware 基于 ODBC 技術(shù)的數(shù)據(jù)庫編程[J].電腦知識與技術(shù),2008, 4(3) :623-625.
[3]朱詩兵,李迎春.Authorware 數(shù)據(jù)庫編程[M].北京:清華大學(xué)出版社,2000.
[4] 梁培文,,葉小平,,周奇.基于Authorware實現(xiàn)的多媒體數(shù)據(jù)庫管理系統(tǒng)的研究[J].中山大學(xué)(自然科學(xué)版),2008(47):7.