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