用PB開發多媒體數據庫管理系統
發表時間:2024-05-17 來源:明輝站整理相關軟件相關文章人氣:
[摘要]圖像、聲音、數字視頻是多媒體的基本要素,目前多媒體數據庫正得到是益廣泛的應用。例如:桂林市開通的交互式有線電視實時點歌系統,即人們可以用電話機的按鍵點歌,并且同時在電視上看到自己正在操縱的菜單,選中歌曲后電視立即自動播放MTV,不需旁人幫助,這是網絡多媒體數據庫的具體應用。 用PowerBuild...
圖像、聲音、數字視頻是多媒體的基本要素,目前多媒體數據庫正得到是益廣泛的應用。例如:桂林市開通的交互式有線電視實時點歌系統,即人們可以用電話機的按鍵點歌,并且同時在電視上看到自己正在操縱的菜單,選中歌曲后電視立即自動播放MTV,不需旁人幫助,這是網絡多媒體數據庫的具體應用。 用PowerBuilder開發應用程序時,您完全可以把多媒體數據集成到應用程序中,使您的應用程序具備多媒體錄制,查詢播放等眾多功能。顯然,多媒體將進一步提高應用程序的層次,并且給用戶一種身臨其境的感覺。
怎樣用PowerBuilder創建并展示多媒體數據庫呢?它可分為兩部分:
1. 怎樣將圖象、聲音、動畫存入數據庫
2. 查詢系統的制作.
下面以PowerBuilder6.5和SQL Anywhere為例。讓我們快速制作一個簡單的查詢系統。制作婚姻介紹系統,查詢到符合條件的人后,顯示該人的人事檔案卡上有個人的照片,要求雙擊個人照片,能調用Acdsee展示該照片(顧客能任意放大、縮小欣賞照片);或者雙擊該個人檔案某處放映一段該個人檔案的個人生活錄相,個人喜歡的音樂等.
一.怎樣將圖象、聲音、動畫存入數據庫
首先要有一個包含Blob數據類型的表,,然后利用Bb數據窗口的"OLE database Blob"(OLE數據庫二進制大對象),可以輕易地把圖片等多媒體數據存入數據庫或展示在屏幕上。
步驟如下:
1.建立一個表aaa,內含兩個字段,記錄號和相片,一個字段取名為ID,另一個字段名為Pic,類型分別為char和Long binary,ID為主鍵。具體操作步驟為:進入Database畫筆來建立此表,ID字段取type 為char,不許為空,即Null為No,Pic字段type為Long binary,可為空,即Null為Yes(重要)。將英文標題頭改成中文,即將id字段的Header內的"id"改為"記錄號",Label的內容改為"記錄號:",同理將pic字段的改為"相片"和"相片:"按Close圖標,保存的文件名填aaa,按Table Properties圖標,按Primary key,并點選ID為主鍵,按Close圖標關閉Database畫筆。
注意:在這一步驟里不要輸入數據,而要在后面的數據窗口里,按預覽圖標輸入數據。
Pic字段的數據類型即所謂Blob類型,其數據類型在不同的DBMS中有一定的差別:在SQL Anywhere 中是Long binary;在SQL Server中是Image。
2.建立一個新的應用程序。具體操作步驟為:按Application圖標,再按New圖標,文件名填test,按保存,Application填test,按OK,出現一"Would you like……"的對話框,問是否要應用程序模板,按"是",為簡化制作步驟,要模板。
3.建立數據窗口并準備輸入數據。步驟為:按DataWindow圖標,在"Select datawindow"對話框中選New,在New Datawindow對話框中選SQL Slect和Freeform,即SQL 選擇的數據源,自由格式的風格。按OK,在Select talbe對話框中選中aaa表,按Open。點選ID列,使ID出現在Select list的右邊,在窗口下方按Where按鈕,按Colume,并在Cloume的下拉條中選中"aaa"."id",在Valua的一欄中填入 :temp,注意,這里的temp前面有一冒號 按窗口上方的Desion菜單,選Retriveal Arguments,在Name一欄填temp,注意,這里的temp前面沒有冒號,type一欄選String(注意),按OK。
規定:SQL語句可以嵌入到PowerScript語言當中,只不過每一個SQL語句必須以分號結尾,而且在SQL語句中如果要引用PowerScript變量,則必須對這些變量賦予一個前綴--冒號:而PowerScript語句的變量不要加冒號,注意區分。
4.用數據窗口的預覽方式輸入數據。具體操作步驟為:按Desion菜單,選Data Source使Data Source前面不打鉤,從Objects菜單中選擇OLE Database Blob項,然后在設計窗口中適當位置點鼠標左鍵,此時出現Database Blob object對話框。逐漸填寫對話窗:
ClientClass:填入DataWindow,可選。
ClientName:填入當前DataWindow的名字,可選。
Table:選擇aaa表。
Large Binary/Text Columns:選擇pic字段。
KeyClause:選id=:id,用于構造where子句,即where id=:id,用于定位相位記錄。
File template:瀏覽選擇并填入一個bmp文件,可不填。
OLE Class:通過下拉菜單選擇Pbrush畫筆程序。
Client Name Expression:填入某一字符串表達式,當OLEServer運行時,顯示在其標題處,如填寫入id+".bmp",按OK鍵。
單擊Positions標簽,選中"Resizable",單擊General標簽,在Border列表框中選擇"Resize"如此選擇這兩個屬性后,程序運行時,用戶能夠通過拖拽改變圖片的大小,單擊OK關閉對話框。
此時,PB關閉該對話窗,并回到DataWindow的設計窗口,OLE字段以一小方框的形式顯示出來。
單擊Preview預覽圖標,在跳出的對話框中給temp的值填1,點Insert Row 圖標,在表中添加一行,填入id后,雙擊方框,打開畫圖程序,這時可以通過繪制,復制等手段制作圖片,制作好后,單擊文件菜單中的"退出并返回到…"關閉畫圖程序,再次單擊預鑒圖標,系統提示"save……",將數據窗口取名為aaa,選擇"是"將結果保存到表中。
同理:若想將動畫存入數據庫則另加一字段,將音樂存入數據庫則另加一字段。
二. 查詢系統的制作
1. 制作從鍵盤輸入記錄號,可查詢到該人的檔案記錄。
�、僦谱鞑樵兇翱凇2襟E為:鼠標點按Window圖標,新建一窗口,在窗口中,添加一個DataWindow控件,在DataWindow控件上按鼠標右鍵,選擇并單擊Properties快捷菜單項,在在Datawindow object name旁按Browse按鈕,選擇裝入前面制作的aaa數據窗口,調整好窗口的大小,再在窗口上放一SingleLineEdit控件,和一CommandButton按鈕控件,點中按鈕控件并按右鍵選擇Properties ,將其顯示文本修改為"查詢",按鈕名稱仍為cb_1,點中按鈕控件并按右鍵選擇Script…,輸入以下腳本
dw_1.settransobject(sqlca)
dw_1.retrieve(sle_1.text)
關閉并保存,按Save圖標保存該窗口,窗口取名為aaa,
�、趯⒉樵兇翱谶B接入test應用程序內。點按Application圖標,出現test應用程序,雙擊test,出現名為w_genapp_frame的窗口圖標,這是應用程序為我們提供的主窗口的名字,點按w_genapp_frame不放按右鍵選edit,出現該主窗口,將一按鈕控件放入該窗口,按鈕顯示的文本可改為"唯一查詢",也可省略不改,點中該按鈕控件并按右鍵選擇Script…,輸入:open(aaa),保存。點按Application圖標,再按script圖標,出現應用程序的自動生成的主體腳本,部分內容如下,它的任務是將數據庫初始化,相當于win.ini。假若不要應用程序的模板,則下面的腳本需自己輸入。而使用模板后,現在我們只需將//connect;前面的注釋號"http://"符號刪除即可。除省事外還避免了因為排版引起的下面的程序格式錯誤。(本人經常因為書中個別字母印刷錯,或排版引起的程序格式錯誤造成程序無法運行而痛心不已。)
sqlca.DBMS = ProfileString (ls_startupfile, "database", "dbms", "")
sqlca.database = ProfileString (ls_startupfile, "database", "database", "")
sqlca.userid = ProfileString (ls_startupfile, "database", "userid", "")
sqlca.dbpass = ProfileString (ls_startupfile, "database", "dbpass", "")
sqlca.logid = ProfileString (ls_startupfile, "database", "logid", "")
sqlca.logpass = ProfileString (ls_startupfile, "database", "LogPassWord", "")
sqlca.servername = ProfileString (ls_startupfile, "database", "servername", "")
sqlca.dbparm = ProfileString (ls_startupfile, "database", "dbparm", "")
connect;
現在按Run圖標運行該程序,結果如下圖。為簡化程序,我們只加入了多媒體中的圖片字段,成功后,讀者可自已增加動畫,聲音字段。
討論:假若多媒體的字段和數據個數比較少,也可用變量和函數來解決。如:
temp2=temp+".bmp"
p_1.picturename=temp2
ole_1.insertfile("sample.avi")
run("c:acdsee.exe c:aa.bmp",normal!)
這些都是很有用的函數,但數據多而雜時,它們就會顯得力不從心了,因為使用它們時,多媒體數據并沒有內置于數據庫之中,也就是說數據庫內并沒有它們的字段,想想看,假若數據庫的所有字段都用變量來代替的話,我想任何人看了都會頭大!