向数据库中插入图片(高手速进,)
向数据库中插入图片(高手速进,在线等啊)
一个菜单表menus 字段 pluid,pluno,pluname....photo,dsc 其中photo 为图片字段,如何通过在进行数据插入的时候,同时将数据记录包括图片分别维护到数据库中,插入后,如何提取,请详细说明,谢谢!
------解决方案--------------------
用TBlobField或TBlobStream呗,如:
TBlobField * pField=(TBlobField *)Table1->FieldByName("photo");
一个菜单表menus 字段 pluid,pluno,pluname....photo,dsc 其中photo 为图片字段,如何通过在进行数据插入的时候,同时将数据记录包括图片分别维护到数据库中,插入后,如何提取,请详细说明,谢谢!
------解决方案--------------------
用TBlobField或TBlobStream呗,如:
TBlobField * pField=(TBlobField *)Table1->FieldByName("photo");
- C/C++ code
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
看看这个