用PB開發多媒體數據庫管理系統

用PB開發多媒體數據庫管理系統

(加入日期:2001-6-9)

保存文章至硬盤】【打印文章】【字體:

分享到: 0
圖像、聲音、數字視頻是多媒體的基本要素,目前多媒體數據庫正得到是益廣泛的應用。例如:桂林市開通的交互式有線電視實時點歌系統,即人們可以用電話機的按鍵點歌,並且同時在電視上看到自己正在操縱的菜單,選中歌曲後電視立即自動播放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. 製作從鍵盤輸入記錄號,可查詢到該人的檔案記錄。

  ①製作查詢窗口。步驟爲:鼠標點按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,

  ②將查詢窗口連接入test應用程序內。點按Application圖標,出現test應用程序,雙擊test,出現名爲w_genapp_frame的窗口圖標,這是應用程序爲我們提供的主窗口的名字,點按w_genapp_frame不放按右鍵選edit,出現該主窗口,將一按鈕控件放入該窗口,按鈕顯示的文本可改爲"唯一查詢",也可省略不改,點中該按鈕控件並按右鍵選擇Script…,輸入:open(aaa),保存。點按Application圖標,再按script圖標,出現應用程序的自動生成的主體腳本,部分內容如下,它的任務是將數據庫初始化,相當於win.ini。假若不要應用程序的模板,則下面的腳本需自己輸入。而使用模板後,現在我們只需將//connect;前面的註釋號"//"符號刪除即可。除省事外還避免了因爲排版引起的下面的程序格式錯誤。(本人經常因爲書中個別字母印刷錯,或排版引起的程序格式錯誤造成程序無法運行而痛心不已。)

  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!)

  這些都是很有用的函數,但數據多而雜時,它們就會顯得力不從心了,因爲使用它們時,多媒體數據並沒有內置於數據庫之中,也就是說數據庫內並沒有它們的字段,想想看,假若數據庫的所有字段都用變量來代替的話,我想任何人看了都會頭大!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章