用ODBC
重载crecordset
重写DoFieldExchange( CFieldExchange* pFX )
RFX_Binary( pFX, youfieldname, m_pbyte, 300000);//CByteArray *m_pbyte 长度你自己可以定长一些或短一些或动态。m_pbyte //为你的图片数据。
使用时:yourecordset.addnew();
yourecordset.m_pbyte = pbmp ;
yourecordset.update();
重载crecordset
重写DoFieldExchange( CFieldExchange* pFX )
RFX_Binary( pFX, youfieldname, m_pbyte, 300000);//CByteArray *m_pbyte 长度你自己可以定长一些或短一些或动态。m_pbyte //为你的图片数据。
使用时:yourecordset.addnew();
yourecordset.m_pbyte = pbmp ;
yourecordset.update();
重载crecordset
重写DoFieldExchange( CFieldExchange* pFX )
RFX_Binary( pFX, youfieldname, m_pbyte, 300000);//CByteArray *m_pbyte 长度你自己可以定长一些或短一些或动态。m_pbyte //为你的图片数据。
使用时:yourecordset.addnew();
yourecordset.m_pbyte = pbmp ;
yourecordset.update();
在ADO中如何处理?
try
{
char* pwritebase=pFileInfo;
VARIANT varBlob;
SAFEARRAY* psa;
SAFEARRAYBOUND safebound[1];
if(pwritebase)
{
safebound[0].lLbound =0;
safebound[0].cElements =filesize;
psa=SafeArrayCreate(VT_UI1,1,safebound);
for (long i=0;i<(long)filesize;i++)
SafeArrayPutElement(psa,&i,pwritebase++);
varBlob.vt =VT_ARRAY | VT_UI1;
varBlob.parray =psa;
}
_bstr_t sqltext="insert into ";
sqltext+=(_bstr_t)tablename;
sqltext+=" (id,parentid,bedelete,data) values (?,?,?,?)";
m_commandptr.CreateInstance (__uuidof(Command));
m_commandptr->ActiveConnection =papp->m_pConnection ;
m_commandptr->CommandText =sqltext;
m_commandptr->CommandType =adCmdText;
m_commandptr->Parameters ->Append (m_commandptr->CreateParameter ("tableitemid",adInteger,adParamInput,4,COleVariant((short)id)));
m_commandptr->Parameters ->Append (m_commandptr->CreateParameter ("parentid",adInteger,adParamInput,4,COleVariant((short)parentid)));
m_commandptr->Parameters ->Append (m_commandptr->CreateParameter ("bedelete",adInteger,adParamInput,4,COleVariant((short)bedelete)));
m_commandptr->Parameters ->Append (m_commandptr->CreateParameter ("data",/*adLongVarBinary*/adVarBinary,adParamInput,filesize+1,varBlob));
m_commandptr->Execute (NULL,NULL,adCmdUnknown);
}
catch(...)
{}
读取的SOURCE
try {
_bstr_t sqltext="select * from ";
sqltext+=(_bstr_t)tablename;
sqltext+=" where id=? ";
m_pUserSet.CreateInstance (__uuidof(Recordset));
m_commandptr.CreateInstance (__uuidof(Command));
m_commandptr->ActiveConnection =myapp->m_pConnection;
m_commandptr->CommandText =sqltext;
m_commandptr->CommandType =adCmdText;
m_commandptr->Parameters ->Append (m_commandptr->CreateParameter ("tableitemid",adInteger,adParamInput,4,COleVariant((short)tableitemid)));
m_pUserSet=m_commandptr->Execute (NULL,NULL,adCmdUnknown);
if (!m_pUserSet->adoEOF )
{
long filesize=m_pUserSet->GetFields()->GetItem("data")->ActualSize;
if (filesize>0)
{
_variant_t varblob;
varblob=m_pUserSet->GetFields ()->GetItem ("data")->GetChunk (filesize);
if (varblob.vt == (VT_ARRAY | VT_UI1))
{
char* m_pBuffer=new char[filesize+1];
char* pbuf;
SafeArrayAccessData(varblob.parray ,(void**)&pbuf);
memcpy(m_pBuffer,pbuf,filesize);
SafeArrayUnaccessData(varblob.parray );
//写到固定的子目录下:)
CString temp=myapp->temppath;
if (pItem->attribute ==21)
{
temp+="\\temp.xls";
myapp->beExcelOrbeWord=true;
}
if (pItem->attribute ==22)
{
temp+="\\temp.doc";
myapp->beExcelOrbeWord=false;
}
DeleteFile(temp );
printfilename=temp;
FILE* fp;
DWORD err=0;
fp=fopen(temp,"wb+");
if (fp)
{
fwrite(m_pBuffer,sizeof(char),filesize,fp);
fclose(fp);
}
else
err=GetLastError();
fp=NULL;
tablename.ReleaseBuffer (-1);
delete [] m_pBuffer;
m_pBuffer=NULL;
pbuf=NULL;
if (err>0)
return err;
}
}
}
}