如何更新视图?

Turelies 2004-08-16 10:39:22
在SQL server2000中!
...全文
97 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
gongcengshi 2004-08-16
  • 打赏
  • 举报
回复
try
{
pRecordset.CreateInstance(__uuidof(Recordset));
pRecordset->Open((_bstr_t)strSQL, _variant_t(pConnection, true),
adOpenStatic,adLockOptimistic,adCmdText);

if(!pRecordset->EndOfFile)
{
long nSize = pRecordset->GetFields()->GetItem("GRAPHIC")->ActualSize;
if(nSize > 0)
{
_variant_t varBLOB;
varBLOB=pRecordset->GetFields()->GetItem("GRAPHIC")->GetChunk(nSize);
if(varBLOB.vt == (VT_ARRAY | VT_UI1))
{
if(BYTE *pBuffer = new BYTE [nSize+1]) ///ÖØÐÂÉêÇë±ØÒªµÄ´æ´¢¿Õ¼ä
{
char *pBuf = NULL;
SafeArrayAccessData(varBLOB.parray,(void **)&pBuf);
memcpy(pBuffer,pBuf,nSize); ///½»º³åÇøm_pBMPBuffer
SafeArrayUnaccessData (varBLOB.parray);
CFile f;
CFileException e;
CFileStatus fStatus;

CString strFileType = (LPCTSTR)(_bstr_t)pRecordset->GetCollect(_variant_t("DRAWINGNAME"));
strFileType = strFileType.Right(4);
int n = strFileType.GetLength();
strName = strFileType.Left(n-4);
CString FilePath = "E:\\";
FilePath = FilePath+strName+strFileType;
if(f.Open(FilePath, CFile::modeWrite | CFile::modeCreate | CFile::typeBinary, &e))
{
f.Write(pBuffer, nSize);
f.GetStatus(FilePath, fStatus);
f.Close();
}

delete [] pBuffer;
pBuf=0;

m_pNetFind->ShowWindow(SW_HIDE);
FileOpen(FilePath); //通过文件名字打开文件的,
}
}
}
}
pRecordset->Close();
pRecordset.Release();
}
catch(_com_error &e)
{
CString err;
err.Format("%d\n%s", e.Error(), (char *)e.Description());
AfxMessageBox(err);
return FALSE;
}
在oracle中我建立视图,想从视图中得到long raw类型的字段“GRAPHIC”中的文件内容,但是long nSize = pRecordset->GetFields()->GetItem("GRAPHIC")->ActualSize;的取值不正确,就无法从数据库得到正确的文件数据,希望大家帮忙解决一下!
gongcengshi 2004-08-16
  • 打赏
  • 举报
回复
try
{
pRecordset.CreateInstance(__uuidof(Recordset));
pRecordset->Open((_bstr_t)strSQL, _variant_t(pConnection, true),
adOpenStatic,adLockOptimistic,adCmdText);

if(!pRecordset->EndOfFile)
{
long nSize = pRecordset->GetFields()->GetItem("GRAPHIC")->ActualSize;
if(nSize > 0)
{
_variant_t varBLOB;
varBLOB = pRecordset->GetFields()->GetItem("GRAPHIC")->GetChunk(nSize);
if(varBLOB.vt == (VT_ARRAY | VT_UI1))
{
if(BYTE *pBuffer = new BYTE [nSize+1]) ///ÖØÐÂÉêÇë±ØÒªµÄ´æ´¢¿Õ¼ä
{
char *pBuf = NULL;
SafeArrayAccessData(varBLOB.parray,(void **)&pBuf);
memcpy(pBuffer,pBuf,nSize); ///¸´ÖÆÊý¾Ýµ½»º³åÇøm_pBMPBuffer
SafeArrayUnaccessData (varBLOB.parray);
//ÎļþдÈë²Ù×÷
CFile f;
CFileException e;
CFileStatus fStatus;

CString strFileType = (LPCTSTR)(_bstr_t)pRecordset->GetCollect(_variant_t("DRAWINGNAME"));
strFileType = strFileType.Right(4);
int n = strFileType.GetLength();
strName = strFileType.Left(n-4);
// strFileType
// CString strGYinfo = "currectOpenDoc";
CString FilePath = "E:\\";
FilePath = FilePath+strName+strFileType;
if(f.Open(FilePath, CFile::modeWrite | CFile::modeCreate | CFile::typeBinary, &e))
{
f.Write(pBuffer, nSize);
f.GetStatus(FilePath, fStatus);
f.Close();
}

delete [] pBuffer;
pBuf=0;

m_pNetFind->ShowWindow(SW_HIDE);
FileOpen(FilePath);
}
}
}
}
pRecordset->Close();
pRecordset.Release();
}
catch(_com_error &e)
{
CString err;
err.Format("%d\n%s", e.Error(), (char *)e.Description());
AfxMessageBox(err);
return FALSE;
}
在oracle中我建立视图,想从视图中得到long raw类型的字段“GRAPHIC”中的内容但是long nSize = pRecordset->GetFields()->GetItem("GRAPHIC")->ActualSize;的取值不正确,希望大家帮忙解决一下!

4,011

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧