亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

VC編程中如何操作數據庫中的圖像字段

2019-11-17 05:07:29
字體:
來源:轉載
供稿:網友
在VC進行數據庫編程中對圖像的處理一直是個難點,經常有朋友為如何向數據庫中添加圖像或從數據庫中讀取圖像數據并顯示處理等問題所困擾,目前關于VC數據庫編程的圖書不少,但很少有涉及圖象問題的,本文針對這一現狀,介紹了如何解決上述的問題,希望可以對朋友們有所幫助。

  本文以ACESS97為例,采用ODBC方式打開數據庫Photo,數據庫Photo的images表中含有一個image的圖像字段,在剛打開時顯示第一條記錄。存取操作時要害是確定數據的長度,讀數據操作時圖像數據可以從記錄集的圖像字段對應的長二進制成員變量m_Image的成員m_hData得到,這個句柄變量存放分配給圖像字段的數據,該對象的另一個成員變量m_dwDataLength為該字段的實際長度,在某些情況下,m_dwDataLength的值有可能小于m_hData中的數據長度值。具體內容可以參考MSND。以下實現的部分要害代碼。首先請看 CdbImages記錄集的定義:

CdbImages::CdbImages(CDatabase* pdb)
: CRecordset(pdb)
{
//{{AFX_FIELD_INIT(CdbImages)
m_nFields = 2;//數據庫中有兩個字段
//}}AFX_FIELD_INIT
m_nDefaultType = snapshot;//數據庫以快照形式打開
}
CString CdbImages::GetDefaultConnect()
{
return _T("ODBC;DSN=MS access Database");//以ODBC操作數據庫
}
CString CdbImages::GetDefaultSQL()
{
return _T("[Images]");//默認的操作是連接到數據庫中的Images表
}
void CdbImages::DoFieldExchange(CFieldExchange* pFX)
{
//{{AFX_FIELD_MAP(CdbImages)
pFX->SetFieldType(CFieldExchange::outputColumn);
RFX_LongBinary(pFX, _T("[Image]"), m_Image);//記錄集中的成員對象和表中的OLE字段采用長二進制交換。
//}}AFX_FIELD_MAP
}
///////////////////////////////////////////////////////////
//從數據庫中顯示圖像數據
CDatabase m_DB;//定義的數據庫全局變量
CBitmap Bitmap;//定義的圖像類全局變量,用以存儲圖像數據
void CImageView::OnOpenDateBase()
{
m_DB.Open(NULL, //以ODBC形式打開數據庫
FALSE,
FALSE,
"ODBC;DRIVER={
Microsof Access Driver (*.mdb)};DBQ=Photo.mdb");
CdbImages dbImages(m_DB);
CString strFileName ;// 用來存放臨時文件名,以該臨時文件存放讀取的數據庫的圖像數據。
i=1;//I為臨時文件號
StrFileName.Format("%s",i)
dbImages.Open();
if (dbImages.ISEOF())
AfxMessageBox("Unable to get image from db");
else
{
char tmpPath[_MAX_PATH+1];
GetTempPath(_MAX_PATH,tmpPath);//得到臨時文件的目錄;
strFileName.Insert(0,tmpPath);//生成臨時文件名
CFile outFile(strFileName,CFile::modeCreateCFile::modeWrite);
//向臨時文件寫數據,數據庫中數據讀操作時要害是知道數據的長度,這可以從記錄集的圖像字段對應的長二進制成員變量m_Image的成員dwDataLength得到;
LPSTR buffer = (LPSTR)GlobalLock(dbImages.m_Image.m_hData);
outFile.WriteHuge(buffer,dbImages.m_Image.m_dwDataLength);

GlobalUnlock(dbImages.m_Image.m_hData);
outFile.Close();
//定義圖像句柄;
HBITMAP hbm = (HBITMAP)::LoadImage(NULL,
strFileName,
IMAGE_BITMAP,
0,
0,
LR_LOADFROMFILE);

if (Bitmap.Attach(hbm))//將圖像句柄和Cbitmap對象聯系起來
{
BITMAP bm;
Bitmap.GetBitmap(&bm);//獲取圖像尺寸
Bitmap.SetBitmapDimension(bm.bmWidth,bm.bmHeight);
return;
}
Invalidate();//重畫屏幕
}
/////////////////////////////////////////////
void CImageView::OnDraw(CDC* pDC)//顯示圖像
{
CDC memDC;
memDC.CreateCompatibleDC(pDC);
CBitmap* pImage = memDC.SelectObject(Bitmap);
CSize imageSize = Bitmap.GetBitmapDimension();
pDC->BitBlt(0,0,imageSize.cx,imageSize.cy,&memDC,0,0,SRCCOPY);
memDC.SelectObject(pImage);
}
//////////////////////////////////////////////////////
//以下是向數據中添加圖像記錄
void CImageView::OnSaveDateBase()
{//打開圖像文件
static char BASED_CODE szFilter[] = "Bitmap Files (*.bmp)*.bmp";
CdbImages dbImages(m_DB);
CFileDialog fd(TRUE,NULL,NULL,0,szFilter,this);
if (IDOK != fd.DoModal())
return;
dbImages.Open();//打開數據庫
dbImages.AddNew();//添加新的記錄
CFile fileImage;
CFileStatus fileStatus;
fileImage.Open(fd.GetPathName(), CFile::modeRead);
fileImage.GetStatus(fileStatus);//得到打開的圖像文件的狀態信息;
dbImages.m_Image.m_dwDataLength = fileStatus.m_size;
HGLOBAL hGlobal= GlobalAlloc(GPTR,fileStatus.m_size);//申請存放圖像數據的空間。
dbImages.m_Image.m_hData = GlobalLock(hGlobal);//將該空間付給m_hData成員;
//向緩沖區讀圖像數據
fileImage.ReadHuge(dbImages.m_Image.m_hData,fileStatus.m_size);//向m_Image讀圖像數據。
dbImages.SetFieldDirty(&dbImages.m_Image);//標志數據庫已經修改;
dbImages.SetFieldNull(&dbImages.m_Image,FALSE);//設置記錄為NULL;
dbImages.Update();//刷新數據庫的記錄
GlobalUnlock(hGlobal);
dbImages.Close();

}


  上述代碼在VC6.0,windows98下編譯通過,運行正常,有愛好的朋友可以稍加修改,將文中所述的功能添加到自己的應用程序當中去。
更多文章 更多內容請看數據庫相關文章專題,或

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲第一男人天堂| 国产欧洲精品视频| 欧美精品久久一区二区| 中文字幕免费国产精品| 久久国产精品久久国产精品| 2020国产精品视频| 欧美专区在线播放| 亚洲美女视频网站| 国产一区二区三区三区在线观看| 国产亚洲欧美日韩精品| 一区二区三区精品99久久| 欧美影院在线播放| 欧美日韩电影在线观看| 国产一区二区三区欧美| 日本久久久久久久久| 欧美极品欧美精品欧美视频| 欧美黑人xxxx| 成人羞羞国产免费| 91免费在线视频网站| 国产精品黄色av| 亚洲激情免费观看| 午夜精品美女自拍福到在线| 成人羞羞国产免费| 亚洲一区亚洲二区| 国产精品久久久久999| 日本国产欧美一区二区三区| 色视频www在线播放国产成人| 久久6免费高清热精品| 91午夜在线播放| 全色精品综合影院| 日韩福利伦理影院免费| 国产精品第2页| 国产精品老牛影院在线观看| 国产日韩中文字幕在线| 日韩综合中文字幕| 欧美午夜精品久久久久久人妖| 欧美一级视频在线观看| 国产91精品久久久久久久| 亚洲国产欧美久久| 国产精品女人久久久久久| 麻豆成人在线看| 国产成人精品999| 亚洲人成网站色ww在线| 欧美激情2020午夜免费观看| 久久国产精品偷| 亚洲成人在线网| 国产精品高清网站| 成人综合国产精品| 国内伊人久久久久久网站视频| 91久久久久久久久久久久久| 欧洲亚洲免费在线| 热久久美女精品天天吊色| 精品久久久国产精品999| 亚洲白拍色综合图区| 亚洲第一av在线| 在线播放国产精品| 日韩精品中文字幕有码专区| 欧美不卡视频一区发布| 中文字幕亚洲激情| 久久久999成人| 国产一区二区三区在线观看视频| 亚洲综合在线播放| 久久99视频精品| 欧美成人在线免费视频| 中日韩午夜理伦电影免费| 欧美在线视频一区二区| 国产亚洲精品久久久久久| 91av在线网站| 成人免费网站在线看| 欧美电影在线观看网站| 欧美日韩一二三四五区| 日韩精品免费一线在线观看| 国产精品欧美日韩一区二区| 91精品国产成人www| 国产精品久久国产精品99gif| 91精品国产综合久久香蕉922| 亚洲性视频网站| 欧美洲成人男女午夜视频| 国产91在线视频| 日韩在线观看免费全| 成人精品网站在线观看| 亚洲自拍小视频免费观看| 午夜精品久久久久久久白皮肤| 欧美国产一区二区三区| 久久的精品视频| 国内精品久久久久久久| 欧美亚洲国产精品| 欧美三级欧美成人高清www| 日韩精品免费一线在线观看| 久久免费视频在线观看| 在线成人激情视频| 国产精品美女免费视频| 日韩欧中文字幕| 欧美一级淫片播放口| 欧美日韩中文字幕日韩欧美| 日韩中文字幕在线播放| 国产精品免费电影| 亚洲欧美精品一区二区| 欧美性黄网官网| 国产精品亚洲网站| 欧美性猛交xxxx乱大交极品| 国产成人一区二区三区电影| 欧美亚洲国产精品| 日韩中文字幕视频在线| 日韩视频免费中文字幕| 国产精品久久久久久久久久ktv| 亚洲男人天堂手机在线| 97超级碰碰碰| 亚洲bt欧美bt日本bt| 成人免费在线网址| 国产玖玖精品视频| 国产精品影片在线观看| 亚洲自拍另类欧美丝袜| 色综合影院在线| 欧美高清视频在线播放| 按摩亚洲人久久| 欧美日韩中文字幕在线| 日本精品中文字幕| 亚洲激情成人网| 欧美另类极品videosbest最新版本| 久久国产精品久久国产精品| 在线观看精品国产视频| 日韩成人在线免费观看| 精品国产精品自拍| www日韩欧美| 成人激情黄色网| 性色av一区二区三区| 国产精品视频区1| 色黄久久久久久| 国产精品99久久久久久www| 亚洲国产精品99久久| 国产精品久久久久7777婷婷| 国产精品亚洲视频在线观看| 欧美精品午夜视频| 国产精品18久久久久久麻辣| 久久99久久99精品免观看粉嫩| 一本久久综合亚洲鲁鲁| 久久久精品2019中文字幕神马| 国产精品日韩欧美综合| 狠狠躁天天躁日日躁欧美| 日韩激情av在线播放| 欧美成人午夜激情在线| 日韩精品在线看| 日韩视频免费在线观看| 国产精品久久久久av免费| 亚洲人成电影网站色…| 激情亚洲一区二区三区四区| 欧美激情亚洲国产| 91国在线精品国内播放| 国产精品91一区| 国产精品中文久久久久久久| 国产在线精品播放| 91视频九色网站| 欧美猛交免费看| 国产这里只有精品| 日本91av在线播放| 这里只有精品久久| 欧美剧在线观看| 久久久久久伊人| 国产精品美女呻吟| 亚洲第一国产精品| 成人国产精品日本在线| 亚洲欧美日韩网| 在线视频日本亚洲性|