cdbexpalias.cpp
来自「本人买的<<VC++项目开发实例>>源代码配套光盘.」· C++ 代码 · 共 349 行
CPP
349 行
// Copyright (C) 1991 - 1999 Rational Software Corporation
#include "stdafx.h"
#include <afxcoll.h>
#include "CDBExpAlias.h"
#include "CAliasException.h"
#include "CDBExpDatabase.h"
#include "CDBExpTable.h"
#include "resource.h"
#include "aliasinputdlg.h"
#include "TablePackage.h"
#include "ViewPackage.h"
#include "StoredProcPackage.h"
#include "mainfrm.h"
#include "vicdoc.h"
IMPLEMENT_DYNAMIC(CDBExpAlias, CDBTreeNode)
//##ModelId=3C36957A0037
void CDBExpAlias::LoadAlias()
{
// TODO: Add your specialized code here.
ASSERT( NULL != m_pIniFile);
m_strConnectString = m_pIniFile->GetValue(m_strAliasName, _T("ConnectString"));
}
//##ModelId=3C369589002F
void CDBExpAlias::SaveAlias()
{
// TODO: Add your specialized code here.
m_pIniFile->SetValue(m_strAliasName, "ConnectString", m_strConnectString);
}
//##ModelId=3C369C4003CA
CDBExpAlias::CDBExpAlias(CIniFile *pIniFile, const CString& szAliasName)
: m_pIniFile(pIniFile),
m_pDatabase(NULL),
m_bIsActive(FALSE),
m_strConnectString(_T(""))
{
// TODO: Add your specialized code here.
strcpy(m_strAliasName, (const char *)szAliasName);
}
//##ModelId=3C369C59023F
CDBExpAlias::~CDBExpAlias()
{
// TODO: Add your specialized code here.
if(m_pDatabase)
{
delete m_pDatabase;
}
}
//##ModelId=3C369CE501D2
const CString& CDBExpAlias::GetConnectString() const
{
// TODO: Add your specialized code here.
return m_strConnectString;
// NOTE: Requires a correct return value to compile.
}
//##ModelId=3C3885980218
void CDBExpAlias::SetConnectString(const CString& szConnStr)
{
// TODO: Add your specialized code here.
m_strConnectString = szConnStr;
}
//##ModelId=3C3885990043
void CDBExpAlias::DeleteAlias(const CString& szAliasName)
{
// TODO: Add your specialized code here.
//如果现在正在使用中,那么别名不能被删除。
if(m_bIsActive)
{
throw new CAliasException();
}
m_pIniFile->DeleteKey(m_strAliasName);
}
//##ModelId=3C38859900C5
void CDBExpAlias::NewAlias(const CString& szAliasName, const CString& szConnStr)
{
// TODO: Add your specialized code here.
CString strCnn = szConnStr;
if(szConnStr.IsEmpty())
strCnn = m_pDatabase->CreateValidConnStr();
m_pIniFile->SetValue(szAliasName, "ConnectString", strCnn);
}
//##ModelId=3C38859901B5
void CDBExpAlias::ModifyAlias(const CString& szAliasName, const CString& szConnStr)
{
// TODO: Add your specialized code here.
if(IsAliasActive())
throw new CAliasException();
ToDo("ModifyAlias没有实现呢!", __LINE__);
}
//##ModelId=3C38859902D8
void CDBExpAlias::EnumAliases(CStringList& Aliases)
{
// TODO: Add your specialized code here.
/* for(int i = 0; i < m_pIniFile->keys.GetSize(); i++)
Aliases.AddTail(m_pIniFile->keys[i]);
*/
char szSectionBuf[2048];
int i = 0, nSize = GetPrivateProfileSectionNames(szSectionBuf,
sizeof(szSectionBuf), m_pIniFile->GetPath());
while(i < nSize + 1 && szSectionBuf[i] != '\0')
{
Aliases.AddTail((char *)(szSectionBuf + i));
while(szSectionBuf[i++] != '\0')
{
//故意使用空循环,为的是忽略不是NULL的字符
}
}
}
//##ModelId=3C38859C025A
BOOL CDBExpAlias::IsAliasActive()
{
// TODO: Add your specialized code here.
return m_bIsActive;
// NOTE: Requires a correct return value to compile.
}
//##ModelId=3C41D26D0047
void CDBExpAlias::BuildTVITEM(HTREEITEM hParentItem)
{
CDBTreeNode::BuildTVITEM(hParentItem);
}
//##ModelId=3C41D26D001F
const char * CDBExpAlias::GetTreeNodeCaption()
{
return (const char *)get_AliasName();
}
//##ModelId=3C41D26C0352
BOOL CDBExpAlias::ExpandItem(HTREEITEM hItem, UINT state)
{
CWaitCursor wait;
HTREEITEM hTempItem = 0;
m_pDatabase = GetDatabase();
ASSERT(m_pDatabase);
if(m_pDatabase->m_ObStruct[CDBExpDatabase::OBS_TABLE].m_pPackageNode)
{
return TRUE;
}
CTablePackage *pTablePack = new CTablePackage();
CViewPackage *pViewPack = new CViewPackage();
CStoredProcPackage *pSPPack = new CStoredProcPackage();
pTablePack->BuildTVITEM(hItem);
hTempItem = m_pTreeCtrl->InsertItem(&pTablePack->m_tvInsertStruct);
ASSERT(hTempItem);
pTablePack->Set_hItem(hTempItem);
pViewPack->BuildTVITEM(hItem);
hTempItem = m_pTreeCtrl->InsertItem(&pViewPack->m_tvInsertStruct);
ASSERT(hTempItem);
pViewPack->Set_hItem(hTempItem);
pSPPack->BuildTVITEM(hItem);
hTempItem = m_pTreeCtrl->InsertItem(&pSPPack->m_tvInsertStruct);
ASSERT(hTempItem);
pSPPack->Set_hItem(hTempItem);
//将生成的几个包的对象放到 m_pDatabase中, 以便于以后的删除
m_pDatabase->m_ObStruct[CDBExpDatabase::OBS_TABLE].m_pPackageNode
= pTablePack;
m_pDatabase->m_ObStruct[CDBExpDatabase::OBS_VIEW].m_pPackageNode
= pViewPack;
m_pDatabase->m_ObStruct[CDBExpDatabase::OBS_STOREDPROC].m_pPackageNode
= pSPPack;
return TRUE;
}
//##ModelId=3C5B9BA00104
void CDBExpAlias::OnMenuItemClick(UINT nCmd)
{
switch(nCmd)
{
case ID_POPUP_NEW:
{
CAliasInputDlg dlg;
dlg.m_strPrompt = _T("请输入数据库的别名:");
if(IDOK != dlg.DoModal())
return;
this->NewAlias(dlg.m_strName, _T(""));
}
break;
case ID_MENU_NEW_DATABASE:
{
CAliasInputDlg dlg;
dlg.SetCaption("数据库名称");
dlg.m_strPrompt = _T("请输入要创建的数据库的名称:");
if(IDOK != dlg.DoModal())
return;
this->CreateDB(dlg.m_strName);
}
break;
case ID_MENU_DEL_DATABASE:
{
CAliasInputDlg dlg;
dlg.SetCaption("数据库名称");
dlg.m_strPrompt = _T("请输入要删除的数据库的名称:");
if(IDOK != dlg.DoModal())
return;
this->DeleteDB(dlg.m_strName);
}
break;
default:
CDBTreeNode::OnMenuItemClick(nCmd);
break;
}
}
//##ModelId=3C5CC9C70290
BOOL CDBExpAlias::FillListView(CListView *pView)
{
pView->GetListCtrl().DeleteAllItems();
int& nCount = ResetListViewItemCounter();
for(int i = 0; i < _count_of(m_pDatabase->m_ObStruct); i++)
{
m_pDatabase->m_ObStruct[i].m_pPackageNode->BuildLVITEM(nCount);
int ret = pView->GetListCtrl().InsertItem(
&m_pDatabase->m_ObStruct[i].m_pPackageNode->m_lvInsertStruct);
ret = GetLastError();
// pView->GetListCtrl().InsertItem(i, "test", 0);
}
return TRUE;
}
//##ModelId=3C5CCCD80359
BOOL CDBExpAlias::OpenRelatedView(LPARAM lParam)
{
// ToDo: Add your specialized code here
CMainFrame *pFrame = (CMainFrame *)AfxGetMainWnd();
CListView *pListView = (CListView *)pFrame->GetRightPane();
return FillListView(pListView);
}
//##ModelId=3C67402900F4
void CDBExpAlias::Erase(CDBTreeNode * pTreeNode)
{
CMainFrame *pFrame = (CMainFrame *)AfxGetMainWnd();
CVicDoc *pDoc = (CVicDoc *)pFrame->GetActiveDocument();
pDoc->OnAliasDelete((WPARAM)pTreeNode, 0);
this->DeleteAlias(this->get_AliasName());
delete this;
}
//##ModelId=3CD958EC01C3
void CDBExpAlias::BuildLVITEM(int& nIndex)
{
// ToDo: Add your specialized code here or after the call to base class
CDBTreeNode::BuildLVITEM(nIndex);
}
//##ModelId=3CDCDEE3029D
void CDBExpAlias::BuildContextMenu(DBTREE_NODE_CONTEXT& context)
{
// ToDo: Add your specialized code here or after the call to base class
m_pContextMenu->LoadMenu(IDR_MENU_ALIAS);
}
void CDBExpAlias::CreateDB(CString &strDBName)
{
ADODB::_ConnectionPtr ptrTempConn =
this->GetDatabase()->m_ptrConnection;
CString strSQL="CREATE DATABASE ";
strSQL += strDBName;
try
{
_bstr_t bstrTemp = this->GetDatabase()->m_strCnn;
ptrTempConn->Open(bstrTemp, L"", L"", NULL);
ptrTempConn->Execute((const char *)strSQL, NULL, ADODB::adExecuteNoRecords);
ptrTempConn->Close();
AfxMessageBox("创建成功");
}
catch(_com_error &e)
{
CString strError = "创建失败,下面是错误的具体内容: ";
strError += (const char *)e.Description();
AfxMessageBox((const char *)strError);
ptrTempConn->Close();
}
}
void CDBExpAlias::DeleteDB(CString &strDBName)
{
ADODB::_ConnectionPtr ptrTempConn =
this->GetDatabase()->m_ptrConnection;
CString strSQL="DROP DATABASE ";
strSQL += strDBName;
try
{
_bstr_t bstrTemp = this->GetDatabase()->m_strCnn;
ptrTempConn->Open(bstrTemp, L"", L"", NULL);
ptrTempConn->Execute((const char *)strSQL, NULL, ADODB::adExecuteNoRecords);
ptrTempConn->Close();
AfxMessageBox("删除成功");
}
catch(_com_error &e)
{
CString strError = "删除失败,下面是错误的具体内容: ";
strError += (const char *)e.Description();
AfxMessageBox((const char *)strError);
ptrTempConn->Close();
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?