我有一块WORD型的数据,有128*128个WORD型的值,值都在600多左右
我将其存入BLOB字段中
然后读出 结果 读出的值都是40000多
不知哪里出问题了 请教大家 谢谢
//插入一下记录
int m_nFileLen = 128*128;
m_pBlock = new WORD[m_nFileLen];
memset(&m_pBlock,0,m_nFileLen);
for(int i = 0;i<128;i++)
{
for(int j=0;j<128;j++) m_pBlock[i*128+j] = (int)pDoc->m_pDib->pData_Cloud[i*1200+j];
}
WORD *pBuf = m_pBlock;
VARIANT varBLOB;
SAFEARRAY *psa;
SAFEARRAYBOUND rgsabound[1]; m_pRecordset->AddNew();
if(pBuf)
{
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = m_nFileLen;
psa = SafeArrayCreate(VT_UI1, 1, rgsabound);
for (long i = 0; i < (long)m_nFileLen; i++)
SafeArrayPutElement (psa, &i, pBuf++);
varBLOB.vt = VT_ARRAY | VT_UI1;
varBLOB.parray = psa; m_pRecordset->GetFields()->GetItem("Block_data")->AppendChunk(varBLOB);
}
m_pRecordset->Update(); delete m_pBlock;
//读取
CString strSQL,str;
if(m_pBMPBuffer)
{
delete m_pBMPBuffer;
m_pBMPBuffer = NULL;
}
m_pRecordset.CreateInstance(__uuidof(Recordset));
if ( m_pRecordset->State == adStateOpen) m_pRecordset->Close();
try
{
strSQL.Format("SELECT * FROM RASBLOCK_%d",rfid);
m_pRecordset->Open(_bstr_t(strSQL),_variant_t((IDispatch *)theApp.m_pConnection.GetInterfacePtr()),adOpenDynamic,adLockOptimistic,adCmdUnknown);
long lDataSize = m_pRecordset->GetFields()->GetItem("Block_data")->ActualSize;
if(lDataSize > 0)
{
_variant_t varBLOB;
varBLOB = m_pRecordset->GetFields()->GetItem("Block_data")->GetChunk(lDataSize);
if(varBLOB.vt == (VT_ARRAY | VT_UI1))
{
if(m_pBMPBuffer = new WORD[lDataSize]) ///重新分配必要的存储空间
{
WORD *pBuf = NULL;
SafeArrayAccessData(varBLOB.parray,(void **)&pBuf);
memcpy(m_pBMPBuffer,pBuf,lDataSize); ///复制数据到缓冲区m_pBMPBuffer
SafeArrayUnaccessData (varBLOB.parray);
我将其存入BLOB字段中
然后读出 结果 读出的值都是40000多
不知哪里出问题了 请教大家 谢谢
//插入一下记录
int m_nFileLen = 128*128;
m_pBlock = new WORD[m_nFileLen];
memset(&m_pBlock,0,m_nFileLen);
for(int i = 0;i<128;i++)
{
for(int j=0;j<128;j++) m_pBlock[i*128+j] = (int)pDoc->m_pDib->pData_Cloud[i*1200+j];
}
WORD *pBuf = m_pBlock;
VARIANT varBLOB;
SAFEARRAY *psa;
SAFEARRAYBOUND rgsabound[1]; m_pRecordset->AddNew();
if(pBuf)
{
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = m_nFileLen;
psa = SafeArrayCreate(VT_UI1, 1, rgsabound);
for (long i = 0; i < (long)m_nFileLen; i++)
SafeArrayPutElement (psa, &i, pBuf++);
varBLOB.vt = VT_ARRAY | VT_UI1;
varBLOB.parray = psa; m_pRecordset->GetFields()->GetItem("Block_data")->AppendChunk(varBLOB);
}
m_pRecordset->Update(); delete m_pBlock;
//读取
CString strSQL,str;
if(m_pBMPBuffer)
{
delete m_pBMPBuffer;
m_pBMPBuffer = NULL;
}
m_pRecordset.CreateInstance(__uuidof(Recordset));
if ( m_pRecordset->State == adStateOpen) m_pRecordset->Close();
try
{
strSQL.Format("SELECT * FROM RASBLOCK_%d",rfid);
m_pRecordset->Open(_bstr_t(strSQL),_variant_t((IDispatch *)theApp.m_pConnection.GetInterfacePtr()),adOpenDynamic,adLockOptimistic,adCmdUnknown);
long lDataSize = m_pRecordset->GetFields()->GetItem("Block_data")->ActualSize;
if(lDataSize > 0)
{
_variant_t varBLOB;
varBLOB = m_pRecordset->GetFields()->GetItem("Block_data")->GetChunk(lDataSize);
if(varBLOB.vt == (VT_ARRAY | VT_UI1))
{
if(m_pBMPBuffer = new WORD[lDataSize]) ///重新分配必要的存储空间
{
WORD *pBuf = NULL;
SafeArrayAccessData(varBLOB.parray,(void **)&pBuf);
memcpy(m_pBMPBuffer,pBuf,lDataSize); ///复制数据到缓冲区m_pBMPBuffer
SafeArrayUnaccessData (varBLOB.parray);
解决方案 »
- HBitmap怎么通过Socket发送,不通过位图文件。
- win7下关于修改注册表的问题
- 多表求差
- 请问一个关于联合变量赋值的问题
- 急!!求助!100分在线等待!~~~双缓存画图,是否只能画黑白色图?我想画高位的彩图,但是显示的却老是黑白色图,而且添家颜色也不行,望高手指教,最好有源代码,在线等待!~
- 双网卡的pc,如何编程获取其中一个网卡以太网内互联机器的ip
- 谁有AES算法的实现
- 简单测试CChart数据可视化类库的数据规模
- 关于OPENGL采用顶点数组绘制图形时,顶点、贴图、法向各有自己的索引时碰到的问题!
- 这个DLL应该如何做?
- 2005开发的OCX打包,如何将vcredist_x86.exe也写到inf中,打包执行?
- DirectShow设置输出图像大小
int m_nFileLen = 128*128;//这是WORD数组的元素个数,不是字节数
m_pBlock = new WORD[m_nFileLen];
memset(&m_pBlock,0,m_nFileLen);//这里第三个参数是字节数,要m_nFileLen*sizeof(WORD)
rgsabound[0].cElements = m_nFileLen*sizeof(WORD);//安全数组里存放的应该是字节数,不是WORD的元素数
for (long i = 0; i < (long) m_nFileLen*sizeof(WORD); i++)
SafeArrayPutElement (psa, &i, pBuf++);
{
BYTE *pBuf = NULL;
SafeArrayAccessData(varBLOB.parray,(void **)&pBuf);
memcpy(m_pBMPBuffer,pBuf,lDataSize);///复制数据到缓冲区m_pBMPBuffer
SafeArrayUnaccessData (varBLOB.parray);
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = m_nFileLen;
psa = SafeArrayCreate(VT_UI1, 1, rgsabound);
BYTE *ptemp = (BYTE*)pBuf;
for (long i = 0; i <m_nFileLen; i++)
SafeArrayPutElement (psa, &i, ptemp ++);
varBLOB.vt = VT_ARRAY | VT_UI1;
psa;m_pRecordset->GetFields()->GetItem("Block_data")->AppendChunk(varBLOB);
}
参考:
VC ADO Oracle 读写BLOB