向数据库中插入图片(高手速进,在线等啊)
一个菜单表menus 字段 pluid,pluno,pluname....photo,dsc 其中photo 为图片字段,如何通过在进行数据插入的时候,同时将数据记录包括图片分别维护到数据库中,插入后,如何提取,请详细说明,谢谢!
[解决办法]
用TBlobField或TBlobStream呗,如:
TBlobField * pField=(TBlobField *)Table1->FieldByName("photo");
if ((ClientDataSet1->State != dsInsert) && (ClientDataSet1->State != dsEdit)) ClientDataSet1->Insert();TMemoryStream *pMS = new TMemoryStream;try{ Image1->Picture->Bitmap->SaveToStream(pMS); pField->LoadFromStream(pMS);}__finally{ delete pMS;}ClientDataSet1->Post();
[解决办法]
哎,我没在家,家里有源码,现成的程序
基本就用流来操作,或者用TPicture类对象来操作
[解决办法]
可以用流操作
void CDemoDlg::OnWrite()
{
//创建文件对话框
CString strFilter="二进制文件(*.*)|*.*||";
CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, strFilter);
dlg.m_ofn.lpstrTitle = _T("打开二进制文件");
if(dlg.DoModal() == IDOK)
{
//获得文件路径
CString strFileName = dlg.GetPathName();
//打开文件
CFile file;
if (!file.Open(strFileName, CFile::modeRead))
{
AfxMessageBox(_T("文件打开失败。"), MB_ICONINFORMATION);
return;
}
//获得文件名
CString strName = file.GetFileTitle();
//获得数据大小
UINT nLength = file.GetLength();
//分配缓冲区
BYTE* pChunk = new BYTE[nLength];
//读文件
file.Read(pChunk, nLength);
//写数据库
m_pRecordset->AddNew();
m_pRecordset->PutCollect(_variant_t(_T("NAME")),
_variant_t(strName));
SetFieldChunk(_T("Data"), pChunk, nLength);
m_pRecordset->Update();
m_pRecordset->MoveLast();
//释放缓冲区
delete []pChunk;
//关闭文件
file.Close();
//刷新
SetDlgItemText(IDC_NAME, strName);
AfxMessageBox(_T("文件写入完成。"));
}
}
给你提供个例子
[解决办法]
http://hi.baidu.com/cunlin/blog/item/243880516528498f8d5430de.html
看看这个