⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dboperate.cpp

📁 一个源代码管理工具,支持悬浮框拖曳,后台数据库管理,代码高亮显示灯功能
💻 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]));
	}
	m_pRecordset->Update();
	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 + -