摘 要: 根據(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)方法,并分別給出了較為詳細的實例操作過程。
關(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ù)庫進行編輯修改,即以動態(tài)方式訪問SQL數(shù)據(jù)。這兩種引用SQL數(shù)據(jù)庫的方法在各種Authorware教材中或是不涉及或是涉及很少。本文就Authorware中靜態(tài)方式和動態(tài)方式引用SQL數(shù)據(jù)庫數(shù)據(jù)的實現(xiàn)方法進行探討并給出詳細的操作實例。
1 以靜態(tài)方式引用SQL數(shù)據(jù)庫中的數(shù)據(jù)
在Authorware的多媒體作品中有時候僅僅想引用并展示SQL的數(shù)據(jù)庫的查詢結(jié)果,并不需要對數(shù)據(jù)庫數(shù)據(jù)進行其他操作,因此可以用靜態(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)
(1)在SQL Server Management Studio 中執(zhí)行如下命令,啟動 show advanced options 項并設(shè)置為 1后, 再開啟xp_cmdshell(注:xp_cmdshell 擴展存儲過程將命令字符串作為操作系統(tǒng)命令 shell 執(zhí)行,并以文本行的形式返回所有輸出)。
EXEC sp_configure 'show advanced options', 1
GO
RECONFIGURE
GO
EXEC sp_configure 'xp_cmdshell', 1
GO
RECONFIGURE
GO
(2)通過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)將最后一個非記錄行刪除。
(3)擊鼠標右鍵,選擇“將結(jié)果另存為”命令,保存查詢結(jié)果為txt文件。
?。?)打開該文本文件后,選擇“另存為”命令,在彈出的另存為對話框中,選擇編碼為ANSI,如圖1所示,單擊保存按鈕。
1.2 對文本文件進行讀寫操作[3-4]
?。?)用ReadExtFile(“文本文件名”)函數(shù)讀取文本文件的內(nèi)容,函數(shù)結(jié)果為文本文件的內(nèi)容字符串。
Filestring:=ReadExtFile(“文件路徑及文件名”)
(2)用LineCount()函數(shù)獲取整個結(jié)果集的記錄行數(shù),默認分隔符為回車。
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)
(6)在Authorware的顯示圖標中及文字工具顯示所需的字段值。
2 靜態(tài)訪問SQL數(shù)據(jù)實例
文中的示例數(shù)據(jù)庫是一個學(xué)生成績管理數(shù)據(jù)庫studb,其中有一個存放著學(xué)生基本信息的二維關(guān)系表stduent,如圖2所示。
設(shè)計流程線如圖3所示。
?。?)在設(shè)置窗口大小的計算圖標中輸入代碼:ResizeWindow(240,150)。
?。?)再讀取文本文件的計算圖標中輸入代碼:
txtstring:=ReadExtFile("F:\\student.txt")
linecount:=LineCount(txtstring)
rec_n:=1
?。?)在顯示記錄的交互圖標的附加計算圖標中輸入代碼:
rec:=GetLine(txtstring, rec_n)
rec:=Replace(Tab,"\r",rec)
fields1:=GetLine(rec,1)
fields2:=GetLine(rec,2)
fields3:=getline(rec,3)
?。?)在交互圖標中添加文字顯示:
學(xué)號:{fields1}
姓名:{fields2}
性別:{fields3}
?。?)在交互圖標右側(cè)的3個響應(yīng)方式為按鈕的計算圖標中分別輸入代碼:
前一記錄:
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()
(6)運行結(jié)果如圖4所示,通過單擊按鈕前一記錄和后一記錄,可進行所有記錄的瀏覽。單擊退出按鈕結(jié)束程序。
3 以動態(tài)方式訪問SQL數(shù)據(jù)庫中的數(shù)據(jù)
Authorware7提供了一個支持標準ODBC 的數(shù)據(jù)庫接口—ODBC.U32,從而利用MicroSoft ODBC接口和標準的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ù)庫;然后用標準 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ù)源管理的配置
進行SQL數(shù)據(jù)源的配置有手動方式和調(diào)用“tMsdsn.u32”函數(shù)實現(xiàn) ODBC 數(shù)據(jù)源的自動配置自動方式,自動方式見參考文獻[2]。本文介紹了手動配置過程。在控制面板中,單擊圖5中的ODBC(32位)項。在彈出的ODBC數(shù)據(jù)源管理器中,如圖6所示,單擊添加按鈕,在創(chuàng)建數(shù)據(jù)源的對話框中選擇數(shù)據(jù)源驅(qū)動程序為SQL Native Client,單擊完成,進入到如圖7所示的創(chuàng)建SQL Server新數(shù)據(jù)源窗口,給數(shù)據(jù)源命名、選擇服務(wù)器、SQL登錄方式以及默認數(shù)據(jù)庫(如本文中數(shù)據(jù)庫studb),如圖8所示,并進行數(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所示。
?。?)在名為“窗口大小”的計算圖標輸入代碼:
ResizeWindow(240,150)
?。?)在名為“odbc代碼”的計算圖標內(nèi)輸入代碼:
database:="sql_studb"
sqlstring:="select sno,sname,sex from student"
odbcchandle:=ODBCOpen(WindowHandle,"odbccerror",database,"","")
odbcdata:=ODBCExecute(odbcchandle,sqlstring)
ODBCClose(odbcchandle)
(3)在名為“統(tǒng)計記錄數(shù)”的計算圖標內(nèi)輸入:
recordcount:=LineCount(odbcdata)
n:=1
?。?)在交互圖標的附加計算圖標內(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)
?。?)在交互圖標右則的各計算圖標內(nèi)容同靜態(tài)案例一樣。
(6)運行結(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ù)庫的詳細操作過程,為需要在Authorware中訪問SQL數(shù)據(jù)庫數(shù)據(jù)的多媒體制作者提供參考。
參考文獻
[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.