社区
数据库
帖子详情
如何存储自定义格式的图片文件到SQL中及如何用Vc来读取
1982xcc
2003-12-12 07:52:22
如题
...全文
138
7
打赏
收藏
如何存储自定义格式的图片文件到SQL中及如何用Vc来读取
如题
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
1982xcc
2003-12-14
打赏
举报
回复
请高手指点,急忙!
AkiraChing
2003-12-14
打赏
举报
回复
储存图片
rs.CreateInstance(__uuidof(Recordset));
rs->Open("相片",_variant_t((IDispatch *)m_pConn,true), adOpenKeyset,
adLockOptimistic, adCmdTable);
rs->AddNew();
_variant_t var;
COleDateTime tDate;
m_datePic.GetTime(tDate);
var.vt=VT_DATE;
var.date=tDate;
rs->GetFields()->GetItem("拍摄日期")->Value=var;
var.Clear();
var.vt=VT_BSTR;
var.bstrVal=strTheme.AllocSysString();
rs->GetFields()->GetItem("主题名称")->Value=var;
var.bstrVal=strId.AllocSysString();
rs->GetFields()->GetItem("照片 ID")->Value=var;
CFile file;
if( !file.Open( m_strPicfile, CFile::modeRead) )
return ;
DWORD uFilesize =(DWORD) file.GetLength();
char* pBuffer = new char[uFilesize + 1];
if(pBuffer!=NULL)
{
ZeroMemory(pBuffer,uFilesize + 1);
VERIFY(file.Read(pBuffer,uFilesize)==uFilesize);
VARIANT varImage;
SAFEARRAY *psa;
SAFEARRAYBOUND rgsabound[1];
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = uFilesize;
psa = SafeArrayCreate(VT_UI1, 1, rgsabound);
for (long i = 0; i < (long)uFilesize; i++)
SafeArrayPutElement (psa, &i, pBuffer++);
varImage.vt = VT_ARRAY | VT_UI1;
varImage.parray = psa;
rs->GetFields()->GetItem("图片")->AppendChunk(varImage);
}
rs->Update();
pBuffer=pBuffer-uFilesize;
if(pBuffer)
{
delete [] pBuffer;
pBuffer=NULL;
}
MessageBox("添加数据成功!","提示",MB_OK|MB_ICONINFORMATION);
}
catch (_com_error e)
{
PrintComError(e);
}
if(rs->State)
rs->Close();
1982xcc
2003-12-13
打赏
举报
回复
"// 文件可以是任意格式,但是数据库中必须有文件的大小"
数据库中图片定义为image格式,如何指定其大小,我想完成一个通过文件列表框打开
选取一个图片,存储。从数据库读出 显示的功能,还请指教。
PS 数据库操作新手,还请将文件操作的代码完整些,谢谢
AkiraChing
2003-12-13
打赏
举报
回复
HGLOBAL hgImageMem = NULL;
LPVOID lpvImageMem = NULL;
long lImageSize = rs->GetFields()->GetItem("图片")->ActualSize;
if(lImageSize > 0)
{
_variant_t varImage;
varImage = rs->GetFields()->GetItem("图片")->GetChunk(lImageSize);
if(varImage.vt == (VT_ARRAY | VT_UI1))
{
hgImageMem = GlobalAlloc(GHND, lImageSize);
if(hgImageMem!=NULL)
{
lpvImageMem = GlobalLock( hgImageMem);
char *pBuffer= NULL;
SafeArrayAccessData(varImage.parray,(void **)&pBuffer);
CopyMemory(lpvImageMem,pBuffer,lImageSize);
SafeArrayUnaccessData (varImage.parray);
CFile file("a.jpg",CFile::modeWrite|CFile::modeCreate);
file.Write(lpvImageMem,lImageSize);
file.Close();
}
}
}
GlobalUnlock(hgImageMem);
lpvImageMem=NULL;
GlobalFree(hgImageMem);
nava
2003-12-12
打赏
举报
回复
#define FILE_MAX_LENGTH 5242880 // 5M
// 文件可以是任意格式,但是数据库中必须有文件的大小
HANDLE hFile;
char* strBuff = new char[FILE_MAX_LENGTH];
DWORD dwFileSize;
DWORD dwRead;
hFile = CreateFile("c:\\2.bmp", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile != INVALID_HANDLE_VALUE)
{
dwFileSize = GetFileSize(hFile, NULL);
if(dwFileSize != 0xFFFFFFFF)
{
if (!ReadFile(hFile, strBuff, dwFileSize, &dwRead, NULL))
return;
}
CloseHandle(hFile);
}
// 向数据库中写入数据,省去一些步骤应该没问题吧
rs.AppendChunk(_T("FILE"), strBuff);
rs.SetFieldValue(_T("FILELENGTH"), dwFileSize);
delete[] strBuff;
// 从数据库中读取
HANDLE hFile;
DWORD dwFileSize;
DWORD dwRead;
char* strBuff = new char[FILE_MAX_LENGTH];
rs.GetChunk(_T("FILE"), strBuff);
rs.GetFieldValue(_T("FILELENGTH"), dwFileSize);
hFile = CreateFile(_T("C:\\1.bmp"), GENERIC_READ|GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, 0, NULL);
if (hFile != INVALID_HANDLE_VALUE)
{
if (!WriteFile(hFile, strBuff, dwFileSize, &dwRead, NULL))
return;
CloseHandle(hFile);
}
delete[] strBuff;
1982xcc
2003-12-12
打赏
举报
回复
是AppendChunk() 和 GetChunk ?
里面的解释少得可怜,有没有具体详细的用法说明呢?
smch
2003-12-12
打赏
举报
回复
GetTrunk
AppendTrunk
在SQL Server中的联机文档查
自动生成访问
sql
server数据库的
VC
代码
自动生成访问
sql
server数据库的
VC
代码(包括Model\IDAL\DAL三层) 公开源码,比MengmaCoder.exe厚道一万倍!!
vc
读取
大智慧实时行情,并将行情数据更新到
sql
server
vc
读取
大智慧实时行情,并将行情数据更新到
sql
server
VC
读取
系统控制面板及运行演示.rar
VC
读取
Windows系统控制面板及运行演示,这个功能很实用,大家说不定能用上,C
读取
/运行系统控制面板中所有程序的信息。
vc
中通过解析mid/mif
文件
访问mapinfo数据
vc
中通过解析mid/mif
文件
访问mapinfo数据,程序提供访问接口,通过接口轻松
读取
mapinfo中的数据
VC
创建写入DBF
文件
这是一个测试实例,功能相对简单,实现了在没有DBF驱动的环境下,
VC
直接创建写入DBF
文件
,如需要完整实例,请留言联系。
数据库
4,017
社区成员
39,807
社区内容
发帖
与我相关
我的任务
数据库
VC/MFC 数据库
复制链接
扫一扫
分享
社区描述
VC/MFC 数据库
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章