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

📄 dbmgr.cpp

📁 真正的传奇源代码
💻 CPP
字号:


#include "stdafx.h"
#include "dbmgr.h"
#include <stdio.h>


static CDBManager s_dbManager;


CDBManager::CDBManager()
{
	m_dbMain.SetDiagRec( __cbDBMsg );

	m_dbMain.Init();
}


CDBManager::~CDBManager()
{
	if ( m_pConn )
		m_dbMain.DestroyConnection( m_pConn );

	m_dbMain.Uninit();
}


bool CDBManager::Init( void	(*pfnLog)( LPTSTR pMsg ), char *pDSN, char *pID, char *pPassword )
{
	m_pfnLog = pfnLog;
	m_pConn  = m_dbMain.CreateConnection( pDSN, pID, pPassword );

	return m_pConn ? true : false;
}


CRecordset * CDBManager::CreateRecordset()
{
	Lock();
	
	return m_pConn->CreateRecordset();
}


void CDBManager::DestroyRecordset( CRecordset *pRec )
{
	m_pConn->DestroyRecordset( pRec );

	Unlock();
}


void CDBManager::__cbDBMsg( char *pState, int nNativeCode, char *pDesc )
{
	static TCHAR szState[256], szDesc[2048];
	static TCHAR szMsg[2048];

	MultiByteToWideChar( CP_ACP, 0, pState, -1, szState, sizeof( szState ) / sizeof( TCHAR ) );
	MultiByteToWideChar( CP_ACP, 0, pDesc, -1, szDesc, sizeof( szDesc ) / sizeof( TCHAR ) );
	
	wsprintf( szMsg, _T("ODBC MsgID: %s(%d)"), szState, nNativeCode );
	GetDBManager()->m_pfnLog( szMsg );

	wsprintf( szMsg, _T("%s"), szDesc );
	GetDBManager()->m_pfnLog( szMsg );
}




CDBManager * GetDBManager()
{
	return &s_dbManager;
}




CQueryManager::CQueryManager()
{
}


CQueryManager::~CQueryManager()
{
	m_listItem.ClearAll();
}


void CQueryManager::StartUpdateQuery( char *pTable, char *pCondition )
{
	m_listItem.ClearAll();

	strcpy( m_szTable, pTable );
	strcpy( m_szCondition, pCondition );
}


char * CQueryManager::GetUpdateQuery()
{
	sprintf( m_szQuery, "UPDATE %s SET ", m_szTable );
	
	CListNode< ITEM > *pNode = m_listItem.GetHead();
	if ( !pNode )
		return NULL;
	ITEM *pItem = pNode->GetData();
	strcat( m_szQuery, pItem->szName );
	strcat( m_szQuery, "=" );
	if ( pItem->bString )
	{
		strcat( m_szQuery, "'" );
		strcat( m_szQuery, pItem->szValue );
		strcat( m_szQuery, "'" );
	}
	else
		strcat( m_szQuery, pItem->szValue );

	for ( pNode = pNode->GetNext(); pNode; pNode = pNode->GetNext() )
	{
		pItem = pNode->GetData();
		strcat( m_szQuery, ", " );
		strcat( m_szQuery, pItem->szName );
		strcat( m_szQuery, "=" );
		if ( pItem->bString )
		{
			strcat( m_szQuery, "'" );
			strcat( m_szQuery, pItem->szValue );
			strcat( m_szQuery, "'" );
		}
		else
			strcat( m_szQuery, pItem->szValue );
	}

	strcat( m_szQuery, " WHERE " );
	strcat( m_szQuery, m_szCondition );

	return m_szQuery;
}


void CQueryManager::StartInsertQuery( char *pTable )
{
	m_listItem.ClearAll();

	strcpy( m_szTable, pTable );
}


char * CQueryManager::GetInsertQuery()
{
	sprintf( m_szQuery, "INSERT %s(", m_szTable );

	CListNode< ITEM > *pNode = m_listItem.GetHead();
	if ( !pNode )
		return NULL;

	ITEM *pItem = pNode->GetData();
	strcat( m_szQuery, pItem->szName );
	
	for ( pNode = pNode->GetNext(); pNode; pNode = pNode->GetNext() )
	{
		pItem = pNode->GetData();
		strcat( m_szQuery, ", " );
		strcat( m_szQuery, pItem->szName );
	}

	strcat( m_szQuery, ") VALUES( " );

	pNode = m_listItem.GetHead();
	pItem = pNode->GetData();

	if ( pItem->bString )
	{
		strcat( m_szQuery, "'" );
		strcat( m_szQuery, pItem->szValue );
		strcat( m_szQuery, "'" );
	}
	else
		strcat( m_szQuery, pItem->szValue );

	for ( pNode = pNode->GetNext(); pNode; pNode = pNode->GetNext() )
	{
		pItem = pNode->GetData();

		strcat( m_szQuery, ", " );
		
		if ( pItem->bString )
		{
			strcat( m_szQuery, "'" );
			strcat( m_szQuery, pItem->szValue );
			strcat( m_szQuery, "'" );
		}
		else
			strcat( m_szQuery, pItem->szValue );
	}

	strcat( m_szQuery, " )" );

	return m_szQuery;
}


void CQueryManager::InsertItem( char *pName, char *pValue, int nValueLen, bool bString )
{
	ITEM *pItem = new ITEM;
	if ( !pItem )
		return;

	strcpy( pItem->szName, pName );
	strncpy( pItem->szValue, pValue, nValueLen );
	pItem->szValue[nValueLen] = '\0';
	pItem->bString = bString;

	m_listItem.Insert( pItem );
}


void CQueryManager::InsertItem( char *pName, TCHAR *pValue, bool bString )
{
	ITEM *pItem = new ITEM;
	if ( !pItem )
		return;

	strcpy( pItem->szName, pName );
	WideCharToMultiByte( CP_ACP, 0, pValue, -1, pItem->szValue, sizeof( pItem->szValue ), 0, 0 );
	pItem->bString = bString;

	m_listItem.Insert( pItem );
}


void CQueryManager::InsertItem( char *pName, char *pValue, bool bString )
{
	ITEM *pItem = new ITEM;
	if ( !pItem )
		return;

	strcpy( pItem->szName, pName );
	strcpy( pItem->szValue, pValue );
	pItem->bString = bString;

	m_listItem.Insert( pItem );
}

void CQueryManager::InsertItem( char *pName, BYTE pValue )
{
	ITEM *pItem = new ITEM;
	if ( !pItem )
		return;

	strcpy( pItem->szName, pName );

	pItem->szValue[0] = pValue;
	pItem->szValue[1] = '\0';
	
	pItem->bString = true;

	m_listItem.Insert( pItem );
}


void CQueryManager::InsertItem( char *pName, int nValue, bool bString )
{
	ITEM *pItem = new ITEM;
	if ( !pItem )
		return;

	strcpy( pItem->szName, pName );
	itoa( nValue, pItem->szValue, 10 );
	pItem->bString = bString;

	m_listItem.Insert( pItem );
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -