ADO访问blob字段能定位吗?

luokezhu 2010-04-24 04:25:01
求教各位高手,vc中用ADO读取Oracle的blob字段,能任意定位从哪个字节开始读吗?就像fseek那样,找了好久也没找到相关的函数。。。
...全文
124 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zyq5945 2010-05-03
  • 打赏
  • 举报
回复
结贴提醒

如果您的问题已经得到解决,请您早日结贴,如四日后未结贴,该贴将做强制结贴处理。
如果您的问题尚未得到解决,请回复方便其他网友知道你仍关注该问题。如四日后没有其他网友和楼主本人回复,该贴将做强制结贴处理。
如果贴子只有楼主和强制结贴的版主本人回复,将按无满意结帖处理。

注:强制结贴版主本人将不会分配答题分
luokezhu 2010-04-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 yincheng01 的回复:]
引用 2 楼 luokezhu 的回复:
感谢ls,可是没看到有从任意offset开始读啊,都是全部读出。。

可以定义一个指针从offset开始读出
[/Quote]

怎么定义啊,我就知道一个getchunk(),只能指定读多少字节,而且只能从头开始读
luokezhu 2010-04-25
  • 打赏
  • 举报
回复
顶上去,求教啊!
尹成 2010-04-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 luokezhu 的回复:]
感谢ls,可是没看到有从任意offset开始读啊,都是全部读出。。
[/Quote]
可以定义一个指针从offset开始读出
luokezhu 2010-04-24
  • 打赏
  • 举报
回复
感谢ls,可是没看到有从任意offset开始读啊,都是全部读出。。
zyq5945 2010-04-24
  • 打赏
  • 举报
回复
http://www.codeproject.com/KB/database/caaadoclass1.aspx
BOOL CADORecordset::GetChunk(LPCTSTR lpFieldName, CString& strValue)
{
FieldPtr pField = m_pRecordset->Fields->GetItem(lpFieldName);

return GetChunk(pField, strValue);
}

BOOL CADORecordset::GetChunk(int nIndex, CString& strValue)
{
_variant_t vtIndex;

vtIndex.vt = VT_I2;
vtIndex.iVal = nIndex;

FieldPtr pField = m_pRecordset->Fields->GetItem(vtIndex);

return GetChunk(pField, strValue);
}


BOOL CADORecordset::GetChunk(FieldPtr pField, CString& strValue)
{
CString str;
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;
}

BOOL CADORecordset::GetChunk(LPCTSTR lpFieldName, LPVOID lpData)
{
FieldPtr pField = m_pRecordset->Fields->GetItem(lpFieldName);

return GetChunk(pField, lpData);
}

BOOL CADORecordset::GetChunk(int nIndex, LPVOID lpData)
{
_variant_t vtIndex;

vtIndex.vt = VT_I2;
vtIndex.iVal = nIndex;

FieldPtr pField = m_pRecordset->Fields->GetItem(vtIndex);

return GetChunk(pField, lpData);
}

BOOL CADORecordset::GetChunk(FieldPtr pField, LPVOID lpData)
{
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;
}

BOOL CADORecordset::AppendChunk(LPCTSTR lpFieldName, LPVOID lpData, UINT nBytes)
{

FieldPtr pField = m_pRecordset->Fields->GetItem(lpFieldName);

return AppendChunk(pField, lpData, nBytes);
}


BOOL CADORecordset::AppendChunk(int nIndex, LPVOID lpData, UINT nBytes)
{
_variant_t vtIndex;

vtIndex.vt = VT_I2;
vtIndex.iVal = nIndex;

FieldPtr pField = m_pRecordset->Fields->GetItem(vtIndex);

return AppendChunk(pField, lpData, nBytes);
}

BOOL CADORecordset::AppendChunk(FieldPtr pField, LPVOID lpData, UINT nBytes)
{
HRESULT hr;
_variant_t varChunk;
long lngOffset = 0;
UCHAR chData;
SAFEARRAY FAR *psa = NULL;
SAFEARRAYBOUND rgsabound[1];

try
{
//Create a safe array to store the array of BYTES
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = nBytes;
psa = SafeArrayCreate(VT_UI1,1,rgsabound);

while(lngOffset < (long)nBytes)
{
chData = ((UCHAR*)lpData)[lngOffset];
hr = SafeArrayPutElement(psa, &lngOffset, &chData);

if(FAILED(hr))
return FALSE;

lngOffset++;
}
lngOffset = 0;

//Assign the Safe array to a variant.
varChunk.vt = VT_ARRAY|VT_UI1;
varChunk.parray = psa;

hr = pField->AppendChunk(varChunk);

if(SUCCEEDED(hr)) return TRUE;
}
catch(_com_error &e)
{
dump_com_error(e);
return FALSE;
}

return FALSE;
}

4,011

社区成员

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

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