?? dboperate.cpp
字號:
// DbOperate.cpp: implementation of the CDbOperate class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "CodeManager.h"
#include "DbOperate.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CDbOperate::CDbOperate()
{
}
CDbOperate::~CDbOperate()
{
}
int CDbOperate::InitConnection()
{
HRESULT hr;
try
{
hr = m_pConnection.CreateInstance("ADODB.Connection");
if(SUCCEEDED(hr))
hr = m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=DB//Codedb.mdb","","",adModeUnknown);
m_pRecordset.CreateInstance("ADODB.Recordset");
m_pRecordset->Open("select * from CodeTable",_variant_t((IDispatch *)m_pConnection),adOpenStatic,adLockOptimistic,adCmdText);
}
catch(_com_error e)
{
AfxMessageBox("連接數據庫失敗!");
return 1;
}
return 0;
}
int CDbOperate::AddRecord(CString* str)
{
int i;
CString dbstr[] = {"CodeName", "CodePath", "CollectTime",
"ParentID", "IsDir"};
m_pRecordset->AddNew();
for(i = 0; i < 5; i++)
{
if(!str[i].IsEmpty())
m_pRecordset->PutCollect(_variant_t(dbstr[i]),_variant_t(str[i]));
}
//添加OLE文件對象
if(!str[1].IsEmpty())
{
CFile f;
CFileException e;
try
{
if(f.Open(str[1], CFile::modeRead | CFile::typeBinary, &e)) //打開了一個文件
{
int nSize = f.GetLength(); //先得到文件長度
BYTE * pBuffer = new BYTE [nSize]; //按文件的大小在堆上申請一塊內存
if (f.Read(pBuffer, nSize) > 0 ) //把文件讀到pBuffer(堆上申請一塊內存)
{ // +----------------------------------------------
BYTE *pBuf = pBuffer; ///下面這一大段是把pBuffer里的數據放到庫中
VARIANT varBLOB;
SAFEARRAY *psa;
SAFEARRAYBOUND rgsabound[1];
if(pBuf)
{
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = nSize;
psa = SafeArrayCreate(VT_UI1, 1, rgsabound);
BYTE *buf;
::SafeArrayAccessData(psa, (void **)&buf);
for(long index=0;index<nSize;index++)
{
buf[index]=pBuffer[index];
}
::SafeArrayUnaccessData(psa);
varBLOB.vt = VT_ARRAY | VT_UI1;
varBLOB.parray = psa;
m_pRecordset->GetFields()->GetItem("CodeData")->AppendChunk(varBLOB);
}
delete [] pBuffer; //刪掉堆上申請的那一塊內存
pBuf=0; //以防二次亂用
}
f.Close();
}
}
catch(CFileException e)
{
AfxMessageBox("讀取文件出錯,請重試!");
return 1;
}
}
m_pRecordset->Update();
return 0;
}
int CDbOperate::GetValue(CString StrValue)
{
// m_pRecordset.CreateInstance("ADODB.Recordset");
m_pRecordset->Close();
m_pRecordset->Open((_bstr_t)StrValue,_variant_t((IDispatch *)m_pConnection),adOpenStatic,adLockOptimistic,adCmdText);
return 0;
}
int CDbOperate::DeleteValue(CString StrValue)
{
_variant_t RecordsAffected;
m_pConnection->Execute((_bstr_t)StrValue, &RecordsAffected,adCmdText);
return 0;
}
int CDbOperate::UpdataRecord(CString *dbstr, CString *str, int num)
{
int i;
for(i = 0; i < num; i++)
{
m_pRecordset->PutCollect(_variant_t(dbstr[i]),_variant_t(str[i]));
}
return 0;
}
int CDbOperate::AddRecord()
{
m_pRecordset->AddNew();
return 0;
}
int CDbOperate::Update()
{
m_pRecordset->Update();
return 0;
}
int CDbOperate::SetData(CString dbstr, CString str)
{
m_pRecordset->PutCollect(_variant_t(dbstr),_variant_t(str));
return 0;
}
int CDbOperate::SetDataChunk(BYTE *pBuffer)
{
int nSize = strlen((char*)pBuffer);
BYTE *pBuf = pBuffer; ///下面這一大段是把pBuffer里的數據放到庫中
VARIANT varBLOB;
SAFEARRAY *psa;
SAFEARRAYBOUND rgsabound[1];
if(pBuf)
{
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = nSize;
psa = SafeArrayCreate(VT_UI1, 1, rgsabound);
BYTE *buf;
::SafeArrayAccessData(psa, (void **)&buf);
for(long index=0;index<nSize;index++)
{
buf[index]=pBuffer[index];
}
::SafeArrayUnaccessData(psa);
varBLOB.vt = VT_ARRAY | VT_UI1;
varBLOB.parray = psa;
m_pRecordset->GetFields()->GetItem("CodeData")->AppendChunk(varBLOB);
}
return 0;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -