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

ADO 實戰(二):BLOB 欄位存取與圖片資料庫範例

     編輯:關於VC++

前置作業:建立含 Image 欄位的資料表

-- SQL Server
CREATE TABLE userphoto (id INT IDENTITY, username VARCHAR(50), age INT, photo IMAGE);

-- Access:設計檢視將 photo 設為 OLE 物件

BLOB 寫入:AppendChunk

// 假設 m_pBmpBuffer 指向長度 m_nLen 的 BMP 檔案資料
m_rs->AddNew();
m_rs->PutCollect("username", "小李");
m_rs->PutCollect("age", 28L);

VARIANT var; SAFEARRAYBOUND bound = {0, m_nLen};
SAFEARRAY* psa = SafeArrayCreate(VT_UI1, 1, &bound);
for (long i=0; iFields->GetItem("photo")->AppendChunk(var);
m_rs->Update();

BLOB 讀取:GetChunk

long len = m_rs->Fields->GetItem("photo")->ActualSize;
if (len > 0) {
    _variant_t var = m_rs->Fields->GetItem("photo")->GetChunk(len);
    if (var.vt == (VT_ARRAY | VT_UI1)) {
        char* pBuf; SafeArrayAccessData(var.parray, (void**)&pBuf);
        // pBuf 指向完整 BMP 資料,可建立 CBitmap 顯示
        // 範例:CBitmap bmp; bmp.Attach((HBITMAP)LoadImage(...))
        SafeArrayUnaccessData(var.parray);
    }
}

完整範例專案功能

  • 從檔案載入 BMP → 存入資料庫
  • 從資料庫讀取 → 重建 HBITMAP → 畫面顯示
  • 支援瀏覽、修改、刪除記錄

關鍵提示

  • SafeArrayCreate(VT_UI1, ...) 對應位元組陣列
  • AppendChunk/GetChunk 可分塊處理超大物件
  • 讀取後 SafeArrayAccessData 取得指標,用畢必呼叫 SafeArrayUnaccessData
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved