首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++ Builder 多媒體數據庫開發:集成法與分離法完整對比

     編輯:關於C++

兩種存儲策略

針對「編號、姓名、照片、聲音、影像」5 字段的多媒體數據庫,根據媒體數據與數據庫文件是否共同存儲,分為集成法與分離法。

集成法:媒體數據直接入庫

表結構設計

  • 編號、姓名:ftString
  • 照片:ftGraphic (BMP)
  • 聲音、影像:ftBlob (WAV/AVI 等二進制)

關鍵組件與代碼

  • TTable + TDataSource + TDBEdit + TDBImage + TDBNavigator
  • 播放聲音:TMediaPlayer 臨時存檔 SaveToFile → Play
  • 播放影像:TOleContainer CreateLinkToFile + DoVerb(ovPrimary)(支持 Flash、DOC 等 OLE 文檔)
// 增加記錄並導入媒體文件
Table1->AppendRecord(OPENARRAY(TVarRec, ("20010521","劉德友")));
Table1->Edit();
Table1BMPField->LoadFromFile("\\media\\ldy.bmp");
Table1WAVField->LoadFromFile("\\media\\ldy.wav");
Table1AVIField->LoadFromFile("\\media\\ldy.avi");

分離法:僅存文件名,媒體文件獨立存放

表結構調整

所有字段改為 ftString,媒體字段存相對路徑文件名(如 ldy.bmp)。

動態創建表結構

void __fastcall TForm1::Button5Click(TObject *Sender) {
    TTable *newTable = new TTable(this);
    newTable->DatabaseName = "e:\\mydata";
    newTable->TableName = "example2.db";
    newTable->TableType = ttParadox;
    newTable->FieldDefs->Clear();
    newTable->FieldDefs->Add("編號", ftString, 8, false);
    newTable->FieldDefs->Add("姓名", ftString, 8, false);
    newTable->FieldDefs->Add("像片", ftString, 12, false);
    newTable->FieldDefs->Add("聲音", ftString, 12, false);
    newTable->FieldDefs->Add("活動影像", ftString, 12, false);
    newTable->CreateTable();
    delete newTable;
}

運行時綁定顯示與播放

// 打開數據庫時加載圖片
Image1->Picture->LoadFromFile(Table1->DatabaseName + "\\media\\" + Table1->FieldByName("像片")->AsString);

// 導航切換時同步更新圖片
void __fastcall TForm1::DBNavigator1Click(TObject *Sender, TNavigateBtn Button) {
    Image1->Picture->LoadFromFile(Table1->DatabaseName + "\\media\\" + Table1->FieldByName("像片")->AsString);
}

優劣勢總結與選型建議

維度集成法分離法
管理便利性單文件,易備份/遷移文件分散,維護稍繁
數據庫體積極大,讀取效率低輕量,打開/查詢快
媒體修改需打開數據庫寫入直接替換文件即可
適用場景小尺寸媒體(照片、RTF),有專用 DB 控件(TDBImage/TDBRichEdit)大尺寸媒體(音視頻),需靈活替換、獨立管理

原則:小媒體且有專用控件 → 集成法;大媒體或需頻繁外部編輯 → 分離法。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved