前提数据库中有数据,我用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该怎么做?
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;
我取出后总是空