//说明:
// theApp.m_pConnection 是全局的 _ConnectionPtr 对象 已经初始化过
// Access数据库中 有一个表 L,表中有一个字段 A, 其属性为 OLB 对象
//
//我想单击左键时 将C盘的 A.txt备份到数据库,单击右键时读取文件到 C://A-复件.txt
//可是每次的完成后 我用16进制查看, A-复件.txt的前8个字节总是与 A.txt不一样
//
//*************************************************左键点击导入文件
void CTestView::OnLButtonDown(UINT nFlags, CPoint point)
{
//-------------------------------------------------------------------------
CFile TextFile;
if(0 == TextFile.Open(L"C://A.Txt",CFile::modeRead))
return;
_RecordsetPtr pRecord = NULL;
_ConnectionPtr pConnection = theApp.m_pConnection;
unsigned char* pbuf;
long nLength = TextFile.GetLength();
pbuf = new unsigned char[nLength];
//new失败
if(pbuf == NULL)
return;
//读取数据到 pbuf
TextFile.Read(pbuf,nLength);
unsigned char *pBufEx = NULL;
pBufEx = pbuf;
//建立一个 SAFFERRAY
//------------------------------------
SAFEARRAY* psa;
SAFEARRAYBOUND rgsabound[1];
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = nLength;
psa = SafeArrayCreate(VT_UI1, 1, rgsabound);
for (long i = 0; i < nLength; i++)
SafeArrayPutElement (psa, &i, pBufEx++);
VARIANT varBLOB;
varBLOB.vt = VT_ARRAY | VT_UI1;
varBLOB.parray = psa;
//--------------------------------------
try
{
pRecord.CreateInstance(__uuidof(Recordset));
pRecord->Open("L",pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdUnknown);
//添加记录
pRecord->AddNew();
pRecord->PutCollect(_variant_t("A"),varBLOB);
pRecord->Update();
pRecord->Close();
}
catch(_com_error e)
{
AfxMessageBox(e.Description());
}
//--------------------------------------------------------------------------
CView::OnLButtonDown(nFlags, point);
}
//***************************************************右键点击导出文件
void CTestView::OnRButtonDown(UINT nFlags, CPoint point)
{
//-----------------------------------------------------------------------------------------
_RecordsetPtr pRecord = NULL;
_ConnectionPtr pConnection = theApp.m_pConnection;
VARIANT varBLOB;
try
{
pRecord.CreateInstance(__uuidof(Recordset));
pRecord->Open("L",pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdUnknown);
//读出 data
long lDataLength = pRecord->Fields->GetItem("A")->ActualSize;
varBLOB = pRecord->GetCollect(_variant_t("A"));
if(varBLOB.vt == (VT_ARRAY | VT_UI1))
{
unsigned char *pBuf = NULL;
pBuf = (unsigned char*)GlobalAlloc(GMEM_FIXED,lDataLength);
详细解决方案
求解释.MFC大家看一上,小弟我将文件导入OLB 对象 到底哪错了。
热度:2703 发布时间:2013-02-26 00:00:00.0
相关解决方案