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

📄 dbsrv.cpp

📁 Visual C++实践与提高-刘刀桂, 孟繁晶编著
💻 CPP
字号:
#include "stdafx.h"

#include "DBsrvImp.h" //CPPtoDLL: change to include implementation

#define new DEBUG_NEW

// Database object
HRESULT CDB::Read(short nTable, short nRow, LPWSTR lpszData) {
  CStringArray *pTable;
  pTable=(CStringArray*) m_arrTables[nTable];
#ifndef UNICODE
	MultiByteToWideChar(CP_ACP, 0, (*pTable)[nRow], -1, lpszData, 80);
#else
  lstrcpy (lpszData, (*pTable)[nRow]);
#endif
  return NO_ERROR;
}

HRESULT CDB::Write(short nTable, short nRow, LPCWSTR lpszData) {
  CStringArray *pTable;
  pTable=(CStringArray*) m_arrTables[nTable];
#ifdef UNICODE
  pTable->SetAtGrow(nRow, lpszData);
#else
	char szData[80];
	WideCharToMultiByte(CP_ACP, 0, lpszData, -1, szData, 80, NULL, NULL);
  pTable->SetAtGrow(nRow, szData);
#endif
  return NO_ERROR;
}

HRESULT CDB::Create(short &nTable, LPCWSTR lpszName) {
  CStringArray *pTable=new CStringArray;
  nTable=m_arrTables.Add(pTable);
#ifdef UNICODE
  m_arrNames.SetAtGrow(nTable, lpszName);
#else
	char szName[80];
	WideCharToMultiByte(CP_ACP, 0, lpszName, -1, szName, 80, NULL, NULL);
  m_arrNames.SetAtGrow(nTable, szName);
#endif
  return NO_ERROR;
}

HRESULT CDB::Delete(short nTable) {
  CStringArray *pTable;
  pTable=(CStringArray*) m_arrTables[nTable];
  delete pTable;
  m_arrTables[nTable]=NULL;
  m_arrNames[nTable]="";
  if (nTable==m_arrTables.GetSize()-1) {
		m_arrTables.RemoveAt(nTable);
		m_arrNames.RemoveAt(nTable);
    }
  return NO_ERROR;
}

HRESULT CDB::GetNumTables(short &nNumTables) {
  nNumTables=m_arrTables.GetSize();
	return NOERROR;

}

HRESULT CDB::GetTableName(short nTable, LPWSTR lpszName) {
#ifndef UNICODE
	MultiByteToWideChar(CP_ACP, 0, m_arrNames[nTable], -1, lpszName, 80);
#else
  lstrcpy(lpszName, m_arrNames[nTable]);
#endif
  return NO_ERROR;
}

HRESULT CDB::GetNumRows(short nTable, short &nRows) {
  CStringArray *pTable;
  pTable=(CStringArray*) m_arrTables[nTable];
  return pTable->GetSize();
}

CDB::~CDB() {
  short nNumTables;
  for (GetNumTables(nNumTables);nNumTables>0; GetNumTables(nNumTables)) {
		Delete(nNumTables-1);
    }
}

CDB::CDB() {
	m_dwRefCount=0;
}

HRESULT CDB::QueryInterface(REFIID riid, void** ppObject) {
	if (riid==IID_IUnknown || riid==IID_IDB) {
		*ppObject=(IDB*) this;
		}
	else if (riid==IID_IDBAccess) {
		*ppObject=(IDBAccess*) this;
		}
	else if (riid==IID_IDBManage) {
		*ppObject=(IDBManage*) this;
		}
	else if (riid==IID_IDBInfo) {
		*ppObject=(IDBInfo*) this;
		}
	else {
		return E_NOINTERFACE;
		}
	AddRef();
	return NO_ERROR;
}

ULONG CDB::AddRef() {
	g_dwRefCount++;
	m_dwRefCount++;
	return m_dwRefCount;
}

ULONG CDB::Release() {
	g_dwRefCount--;
	m_dwRefCount--;
	if (m_dwRefCount==0) {
		delete this;
		return 0;
		}
	return m_dwRefCount;
}

⌨️ 快捷键说明

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