前提数据库中有数据,我用PB可以读出图像并显示
但是在VC中
本人按照oo40库中给的例子在读取时
odyn.GetFieldValue("photo",&oblob);
//这里报错
oblob.GetSize()
//---
按说根据orcale.h中定义GetFieldValue可以读取OBlob类型的呀
我查了网上都说用GetChunk该怎么做?
但是在VC中
本人按照oo40库中给的例子在读取时
odyn.GetFieldValue("photo",&oblob);
//这里报错
oblob.GetSize()
//---
按说根据orcale.h中定义GetFieldValue可以读取OBlob类型的呀
我查了网上都说用GetChunk该怎么做?
解决方案 »
- 如何制作一个控件,一般控件都是指ActiveX控件吗
- IAccessible:get_accChildCount的问题
- CSplitterWnd中的view切换
- 各位有在XP SP3上装过VS2005或VC6.0吗?
- 大家帮我看一下这个创建表的语句对吗?MYSQL下
- 我想做一个组件用来实现对sql数据库是查询,合理吗?用dll atl ativex哪个好?
- 高手菜鸟都进来
- VC6.0调用vc6写的控件,在程序退出的时候出现一个DEBUG ASSERT错误,是CCmdTarg类的析构函数出错
- 请问:哪里有提供股市交易数据的服务?
- Windows NT later、Windows98 later区别
- 游戏制作过程中,如何解决闪屏问题???
- 问一个odbc SQLBindCol 函数的问题
http://www.vckbase.com/document/viewdoc/?id=252
http://www.vckbase.com/document/viewdoc/?id=719
BOOL CTcrADORecordset::GetChunk(FieldPtr pField, CString& strValue)
{
CString str = _T("");
long lngSize, lngOffSet = 0;
_variant_t varChunk; lngSize = pField->ActualSize;
str.Empty();
while(lngOffSet < lngSize)
{
try
{
varChunk = pField->GetChunk(ChunkSize);
str += varChunk.bstrVal;
lngOffSet += ChunkSize;
}
catch(_com_error &e)
{
dump_com_error(e);
return FALSE;
}
} lngOffSet = 0;
strValue = str;
return TRUE;
}
{
long lngSize, lngOffSet = 0;
_variant_t varChunk;
UCHAR chData;
HRESULT hr;
long lBytesCopied = 0; lngSize = pField->ActualSize;
while(lngOffSet < lngSize)
{
try
{
varChunk = pField->GetChunk(ChunkSize); //Copy the data only upto the Actual Size of Field.
for(long lIndex = 0; lIndex <= (ChunkSize - 1); lIndex++)
{
hr= SafeArrayGetElement(varChunk.parray, &lIndex, &chData);
if(SUCCEEDED(hr))
{
//Take BYTE by BYTE and advance Memory Location
//hr = SafeArrayPutElement((SAFEARRAY FAR*)lpData, &lBytesCopied ,&chData);
((UCHAR*)lpData)[lBytesCopied] = chData;
lBytesCopied++;
}
else
break;
}
lngOffSet += ChunkSize;
}
catch(_com_error &e)
{
dump_com_error(e);
return FALSE;
}
} lngOffSet = 0;
return TRUE;
}
{
try
{
varChunk = pField-> GetChunk(ChunkSize); 这里读的时候不要用循环,直接读就可以了.. 用SafeArrayAccessData函数,如:
long lDataSize = m_pRs->GetFields()->GetItem("pic")->ActualSize;
if(lDataSize > 0)
{
_variant_t varBLOB;
varBLOB = m_pRs->GetFields()->GetItem("pic")->GetChunk(lDataSize);
if(varBLOB.vt == (VT_ARRAY | VT_UI1))
{
char *pBuf = NULL;
SafeArrayAccessData(varBLOB.parray,(void **)&pBuf); DisplayBMP2(pBuf);//显示BMP字段图片
SafeArrayUnaccessData(varBLOB.parray);
}
}
oresult GetFieldValue(const char *fieldname, OBlob *val) const;
我取出后总是空