張亞芬
(江蘇省常州技師學(xué)院 江蘇 257091)
Authorware軟件是一套多媒體開(kāi)發(fā)工具,采用基于設(shè)計(jì)圖標(biāo)和流程圖的程序設(shè)計(jì)方法,具有可以不寫(xiě)程序代碼的特色,即使是非專(zhuān)業(yè)人員也能夠使用它創(chuàng)作交互式多媒體程序。Authorware提供與開(kāi)放式數(shù)據(jù)庫(kù)連接(ODBC)連接,也可以實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)。在 Authorware安裝目錄下的HelpShowMeODBC.A7P,這是一個(gè) ODBC的范例,介紹了ODBC的概念、使用方法和一個(gè)實(shí)例。本文詳細(xì)分析這個(gè)小例子,借此介紹ODBC函數(shù)的使用方法。
ODBC開(kāi)放式數(shù)據(jù)庫(kù)連接(Open Database Connectivity),是一種編程接口,能使應(yīng)用程序訪問(wèn)以結(jié)構(gòu)化查詢(xún)語(yǔ)言SQL作為數(shù)據(jù)訪問(wèn)標(biāo)準(zhǔn)的數(shù)據(jù)庫(kù)管理系統(tǒng)。Authorware在使用ODBC訪問(wèn)數(shù)據(jù)庫(kù)之前,需保證正確安裝了相應(yīng)數(shù)據(jù)庫(kù)的驅(qū)動(dòng)程序,而且建立了數(shù)據(jù)源(DSN)。
Authorware通過(guò)ODBC.U32提供了5個(gè)用于ODBC應(yīng)用的函數(shù)。ODBCOpen函數(shù)打開(kāi)指定的數(shù)據(jù)源,并返回?cái)?shù)據(jù)源句柄;ODBCExecute函數(shù)對(duì)數(shù)據(jù)庫(kù)進(jìn)行查詢(xún)并返回查詢(xún)結(jié)果;ODBCClose函數(shù)關(guān)閉指定的ODBC數(shù)據(jù)源;ODBCHandleCount函數(shù)計(jì)當(dāng)前使用的數(shù)據(jù)源句柄總數(shù);ODBCOpenDynamic與ODBCOpen函數(shù)類(lèi)似,但允許在程序運(yùn)行過(guò)程中動(dòng)態(tài)創(chuàng)建數(shù)據(jù)源。
介紹完 ODBC.U32中提供的外部函數(shù)之后,我們來(lái)分析一下Authorware 7.0中的范例ODBC.a7p,圖1是該文件的流程圖及交互圖標(biāo)“Retrive Data”的響應(yīng)圖標(biāo)中的內(nèi)容。群組圖標(biāo)“Run to View Documentation”中以菜單的形式介紹了ODBC的概念、相關(guān)知識(shí)及使用方法。主菜單的最后一項(xiàng)就是實(shí)例演示,即交互圖標(biāo)“Retrive Data”完成的功能,我們僅僅對(duì)此進(jìn)行討論。該交互圖標(biāo)提供了四個(gè)按鈕響應(yīng),分別完成“Sorted Student List”(順序顯示學(xué)生記錄)、“Top Score ”(顯示最高分的記錄)、“Find Student By ID# ”(通過(guò)ID號(hào)查找學(xué)生記錄)、“Enter Student Data”(輸入學(xué)生記錄)四個(gè)功能。在ODBC.a7p中,最重要的部分其實(shí)是框架圖標(biāo)“Subroutines”,它完成Authorware與數(shù)據(jù)庫(kù)的連接并獲取數(shù)據(jù)。下面我們先分析交互圖標(biāo)四個(gè)響應(yīng)圖標(biāo)中的內(nèi)容:
圖1 圖標(biāo)
如圖2所示,在計(jì)算圖標(biāo)中設(shè)置 SQL字符串DB_SQLString,從General表中按字段LastName升序顯示字段LastName、FisrtName、M iddleName的內(nèi)容。導(dǎo)航圖標(biāo)將程序跳轉(zhuǎn)至框架結(jié)構(gòu)中“Execute SQL Command”,在那里程序?qū)⑦B接數(shù)據(jù)庫(kù)并獲取數(shù)據(jù)庫(kù)數(shù)據(jù),執(zhí)行結(jié)果通過(guò)DB_ODBCData變量返回到“Sorted Student List”,借助顯示圖標(biāo)“Display Data”顯示結(jié)果。
其余三個(gè)功能與該功能執(zhí)行過(guò)程相似,均是響應(yīng)圖標(biāo)中設(shè)置變量 DB_SQLString的內(nèi)容,然后程序轉(zhuǎn)到框架結(jié)構(gòu)中完成數(shù)據(jù)庫(kù)的訪問(wèn),并返回?cái)?shù)據(jù)回到響應(yīng)圖標(biāo)顯示結(jié)果。
圖2 顯示結(jié)果
結(jié)構(gòu)與“Sort Student List”類(lèi)似,計(jì)算圖標(biāo)中設(shè)置SQL字符串,從General表中按字段Score降序顯示字段LastName、Score的內(nèi)容。
本功能要略復(fù)雜一些,首先顯示所有記錄的 ID號(hào),并將ID號(hào)設(shè)置為熱對(duì)象響應(yīng),用戶(hù)單擊其中某個(gè)ID號(hào),顯示該ID號(hào)對(duì)應(yīng)記錄的所有信息,實(shí)現(xiàn)數(shù)據(jù)庫(kù)根據(jù)ID號(hào)查詢(xún)的功能。該功能的結(jié)構(gòu)如圖3所示。
圖3 功能結(jié)構(gòu)
程序首先完成顯示所有記錄的ID號(hào)的功能,計(jì)算圖標(biāo)中設(shè)置SQL字符串,從General表中按字段StudentID升序顯示字段StudentID的內(nèi)容。
然后將顯示圖標(biāo)“Display List”設(shè)置為熱對(duì)象響應(yīng),使得用戶(hù)可以通過(guò)單擊某個(gè)ID號(hào)執(zhí)行群組圖標(biāo)“Get Student ID#'s”的內(nèi)容,第3層中的計(jì)算圖標(biāo) “Get Student ID#'s”從General表中查找按字段StudentID等于用戶(hù)本次單擊的ID號(hào)的記錄并顯示該記錄字段LastName、FisrtName、M iddleName的內(nèi)容。
當(dāng)用戶(hù)單擊了某個(gè)ID號(hào)后,首先完成變量DB_SQLString的設(shè)置,再次連接ODBC,得到查詢(xún)結(jié)果(即某ID的記錄結(jié)果)后返回,擦除“Display List”(即ID號(hào)列表),最后顯示新結(jié)果(即某ID的記錄結(jié)果)。
本功能實(shí)現(xiàn)更新記錄和追加新記錄,結(jié)構(gòu)如圖4所示。程序首先執(zhí)行計(jì)算圖標(biāo)“Get Existing ID's”和導(dǎo)航圖標(biāo)“導(dǎo)航到Execute SQL Command”,顯示表 General中所有記錄中字段StudentID的內(nèi)容,其結(jié)果存放在變量DB_ODBCData中,群組圖標(biāo)“Update and Navigate”中將會(huì)使用該結(jié)果。
圖4 記錄
顯示圖標(biāo)“Prompts”顯示輸入時(shí)相關(guān)的提示信息,然后利用三個(gè)群組圖標(biāo)“Enter an ID number”、“ Enter a name”、“ Enter a score”完成一條記錄中字段 StudentID、FisrtName、M iddleName、LastName、Score內(nèi)容的輸入,主要通過(guò)文本輸入響應(yīng)來(lái)實(shí)現(xiàn),條件響應(yīng)可確保輸入內(nèi)容不為空,附屬計(jì)算圖標(biāo)對(duì)輸入的數(shù)據(jù)進(jìn)行處理(如將輸入的英文字母去除空格、轉(zhuǎn)化為大寫(xiě)等等)。
圖5 處理結(jié)果
輸入數(shù)據(jù)后,程序執(zhí)行群組圖標(biāo)“Update and Navigate”,結(jié)構(gòu)如圖5所示。在用戶(hù)輸入數(shù)據(jù)之前,數(shù)據(jù)庫(kù)中所有記錄的StudnetID字段的內(nèi)容存放在變量DB_ODBCData中,用戶(hù)輸入的ID number存放在變量DB_StudnetID中,利用函數(shù)Find判斷DB_ODBCData中是否包含了DB_StudnetID,即判斷輸入的ID號(hào)是否已經(jīng)存在。若輸入的ID號(hào)存在,則用于更新記錄,若輸入的ID號(hào)不存在,則插入一個(gè)新記錄。接下來(lái)程序執(zhí)行導(dǎo)航圖標(biāo),訪問(wèn)數(shù)據(jù)庫(kù),執(zhí)行相應(yīng)的操作,即完成記錄的更新或插入新記錄。
最后,在計(jì)算圖標(biāo)“Get Student List”中設(shè)置字符串DB_SQLString,執(zhí)行導(dǎo)航圖標(biāo)訪問(wèn)數(shù)據(jù)庫(kù),返回最新的數(shù)據(jù)結(jié)果,利用擦除圖標(biāo)擦除舊的顯示結(jié)果,利用顯示圖標(biāo)顯示最新的結(jié)果。
分析完ODBC.a7p提供的四個(gè)功能后,我們討論框架結(jié)構(gòu)“Subroutines”,它是這個(gè)文件中最核心的部分,也是實(shí)現(xiàn)數(shù)據(jù)庫(kù)訪問(wèn)的部分,如圖6所示,頁(yè)圖標(biāo)“Execute SQL Command”的結(jié)構(gòu)非常簡(jiǎn)單,由四個(gè)計(jì)算圖標(biāo)和一個(gè)導(dǎo)航圖標(biāo)組成。
圖6 最終結(jié)果
計(jì)算圖標(biāo)“open Database” 完成數(shù)據(jù)庫(kù)的連接,若用戶(hù)已經(jīng)手工設(shè)置了ODBC數(shù)據(jù)源,第三行語(yǔ)句中的ODBCOpen函數(shù)實(shí)現(xiàn)連接數(shù)據(jù)庫(kù);若用戶(hù)事先沒(méi)有進(jìn)行ODBC數(shù)據(jù)源的設(shè)置,此時(shí) ODBCOpen函數(shù)返回值為0(即數(shù)據(jù)源連接失敗),系統(tǒng)生成連接字符串 DB_ODBCConnet,利用倒數(shù)第二行語(yǔ)句中的ODBCOpenDynam ic函數(shù)實(shí)現(xiàn)動(dòng)態(tài)連接數(shù)據(jù)源。所以本程序具有很好的移植性,拷貝至其他機(jī)器也可正常運(yùn)行。
計(jì)算圖標(biāo)“Send SQL Command” 進(jìn)行查詢(xún)操作,并將查詢(xún)結(jié)果存于變量DB_ODBCData中。
計(jì)算圖標(biāo)“Check for ODBC Error”判斷是否連接出錯(cuò),借助DB_ODBCError變量保存ODBC操作過(guò)程中可能出現(xiàn)的錯(cuò)誤信息,初值為空串。若其值不為空串時(shí),則表示ODBC操作失敗。
計(jì)算圖標(biāo)“Close Database” 關(guān)閉數(shù)據(jù)源。
結(jié)束語(yǔ):
Authorware 自帶的ODBC實(shí)例就介紹到這里,希望能對(duì)大家有所幫助。在實(shí)際使用中,我們可以把ODBC.a7p程序圖中除去群組圖標(biāo)“Run to View Documentation”部分外的所有圖標(biāo)復(fù)制到我們自己的程序中,然后將數(shù)據(jù)庫(kù)文件名、字段名作相應(yīng)的修改,就可以輕松完成ODBC的使用了。