📄 managerview.cpp
字号:
//将OLE数据转换为C++数据
CString CManagerView::VariantToStr(const COleVariant& var)
{
CString strRet;
strRet = _T("Fish");
switch(var.vt){
case VT_EMPTY:
case VT_NULL:
strRet = _T("NULL");
break;
case VT_I2:
strRet.Format(_T("%hd"),V_I2(&var));
break;
case VT_I4:
strRet.Format(_T("%d"),V_I4(&var));
break;
case VT_R4:
strRet.Format(_T("%e"),(double)V_R4(&var));
break;
case VT_R8:
strRet.Format(_T("%e"),V_R8(&var));
break;
case VT_CY:
strRet = COleCurrency(var).Format();
break;
case VT_DATE:
strRet = COleDateTime(var).Format(_T("%m %d %y"));
break;
case VT_BSTR:
strRet = V_BSTRT(&var);
break;
case VT_DISPATCH:
strRet = _T("VT_DISPATCH");
break;
case VT_ERROR:
strRet = _T("VT_ERROR");
break;
case VT_BOOL:
return V_BOOL(&var) ? _T("TRUE") : _T("FALSE");
case VT_VARIANT:
strRet = _T("VT_VARIANT");
break;
case VT_UNKNOWN:
strRet = _T("VT_UNKNOWN");
break;
case VT_I1:
strRet = _T("VT_I1");
break;
case VT_UI1:
strRet.Format(_T("0x%02hX"),(unsigned short)V_UI1(&var));
break;
case VT_UI2:
strRet = _T("VT_UI2");
break;
case VT_UI4:
strRet = _T("VT_UI4");
break;
case VT_I8:
strRet = _T("VT_I8");
break;
case VT_UI8:
strRet = _T("VT_UI8");
break;
case VT_INT:
strRet = _T("VT_INT");
break;
case VT_UINT:
strRet = _T("VT_UINT");
break;
case VT_VOID:
strRet = _T("VT_VOID");
break;
case VT_HRESULT:
strRet = _T("VT_HRESULT");
break;
case VT_PTR:
strRet = _T("VT_PTR");
break;
case VT_SAFEARRAY:
strRet = _T("VT_SAFEARRAY");
break;
case VT_CARRAY:
strRet = _T("VT_CARRAY");
break;
case VT_USERDEFINED:
strRet = _T("VT_USERDEFINED");
break;
case VT_LPSTR:
strRet = _T("VT_LPSTR");
break;
case VT_LPWSTR:
strRet = _T("VT_LPWSTR");
break;
case VT_FILETIME:
strRet = _T("VT_FILETIME");
break;
case VT_BLOB:
strRet = _T("VT_BLOB");
break;
case VT_STREAM:
strRet = _T("VT_STREAM");
break;
case VT_STORAGE:
strRet = _T("VT_STORAGE");
break;
case VT_STREAMED_OBJECT:
strRet = _T("VT_STREAMED_OBJECT");
break;
case VT_STORED_OBJECT:
strRet = _T("VT_STORED_OBJECT");
break;
case VT_BLOB_OBJECT:
strRet = _T("VT_BLOB_OBJECT");
break;
case VT_CF:
strRet = _T("VT_CF");
break;
case VT_CLSID:
strRet = _T("VT_CLSID");
break;
}
return strRet;
}
//处理添加记录工具栏按钮命令
void CManagerView::OnAdd()
{
// TODO: Add your control notification handler code here
if(m_bIsAddress)//根据当前数据库表选择添加函数
AddAddress();
else if(m_bIsMoney)
AddMoney();
}
//处理修改记录工具栏按钮命令
void CManagerView::OnModify()
{
// TODO: Add your control notification handler code here
if(m_bIsAddress)//根据当前数据库表选择修改函数
ModifyAddress();
else if(m_bIsMoney)
ModifyMoney();
}
//处理删除记录工具栏按钮命令
void CManagerView::OnDel()
{
// TODO: Add your control notification handler code here
if(m_bIsAddress)//根据当前数据库表选择修改函数
DelAddress();
if(m_bIsMoney)
DelMoney();
}
//修改通讯录记录
void CManagerView::ModifyAddress()
{
//创建通讯录记录设置对话框对象,由于没有为该对话框类添加OnInitiate()函数,因此
//必须用这种方式创建对话框
CAddrSetup* dlg;
int nItemIndex = -1;//列表框中被选行的索引
BOOL bFieldsHaveChanged = FALSE;//记录是否被改变
// 如果选择了列表框中的某一行
if((m_list.GetNextItem(-1,LVNI_SELECTED))!=-1)
{
try {
//打开记录集
if(!m_addrSet.IsOpen())
m_addrSet.Open();
//循环,直到找到列表框中被选项为止
while((nItemIndex = m_list.GetNextItem(nItemIndex,LVNI_SELECTED))!=-1)
{
CString sqlSelect=
CString("[姓名]=")+
CString("'")+
CString(m_list.GetItemText(nItemIndex,0))+
CString("'");//设置查询条件
//根据查询条件在记录集中定位记录
if(m_addrSet.FindFirst(sqlSelect))
{
dlg=new CAddrSetup;//显示对话框
//首先将记录数据赋予对话框
dlg->m_name=m_addrSet.m_name;
dlg->m_email=m_addrSet.m_email;
dlg->m_hometel=m_addrSet.m_hometel;
dlg->m_worktel=m_addrSet.m_worktel;
dlg->m_strSex=m_addrSet.m_sex;
dlg->m_birthday=m_addrSet.m_birthday;
dlg->m_bp=m_addrSet.m_bp;
if(dlg->DoModal()==IDOK)//如果单击对话框的OK按钮
{
m_addrSet.Edit(); // 表示开始编辑记录集
//将对话框数据赋予记录集中的记录
m_addrSet.m_name=dlg->m_name;
m_addrSet.m_email=dlg->m_email;
m_addrSet.m_bp=dlg->m_bp;
m_addrSet.m_birthday=dlg->m_birthday;
m_addrSet.m_sex=dlg->m_strSex;
m_addrSet.m_hometel=dlg->m_hometel;
m_addrSet.m_worktel=dlg->m_worktel;
m_addrSet.Update(); // 保存修改结果
bFieldsHaveChanged = TRUE; // 记录已经被修改
}
delete dlg; // 删除对话框对象
}
else
{
AfxMessageBox("内部错误\n\n在数据库中造不到所选记录\n或数据库被损坏", MB_ICONSTOP );
}
}
m_addrSet.Close(); // 关闭记录集
}
catch(CDaoException* e)
{
char szBuffer[256];
CString strExceptDesc=
CString("数据库引擎错误:\n\n Error Code:")+
CString(ltoa(e->m_pErrorInfo->m_lErrorCode,szBuffer,10))+
CString("\nDescription:")+
CString(e->m_pErrorInfo->m_strDescription);
AfxMessageBox(strExceptDesc,MB_ICONEXCLAMATION);
m_addrSet.Close();
return;
}
if ( bFieldsHaveChanged )
{
LoadDatabaseData(); // 如果记录被更改则更新列表框中数据
}
}
else
{
AfxMessageBox("没有选择记录", MB_ICONEXCLAMATION);
}
}
//向通讯录中添加记录
void CManagerView::AddAddress()
{
//创建通讯录记录设置对话框对象,由于没有为该对话框类添加OnInitiate()函数,因此
//必须用这种方式创建对话框
CAddrSetup* dlg;
dlg=new CAddrSetup;
BOOL bFieldsHaveChanged = FALSE;//标识记录是否被改变
try
{
//打开通讯录的记录集
if(!m_addrSet.IsOpen())
m_addrSet.Open();
if(dlg->DoModal()==IDOK)//如果单击对话框的OK按钮
{
m_addrSet.AddNew(); // 表示开始对记录进行编辑
//将对话框中的值赋予记录集中字段变量
m_addrSet.m_name=dlg->m_name;
m_addrSet.m_email=dlg->m_email;
m_addrSet.m_bp=dlg->m_bp;
m_addrSet.m_birthday=dlg->m_birthday;
m_addrSet.m_sex=dlg->m_strSex;
m_addrSet.m_hometel=dlg->m_hometel;
m_addrSet.m_worktel=dlg->m_worktel;
m_addrSet.Update(); // 保存编辑结果
bFieldsHaveChanged = TRUE; // 记录被改变
}
delete dlg; // 删除对话框对象
}
catch(CDaoException* e)
{
char szBuffer[256];
CString strExceptDesc=
CString("数据库引擎错误:\n\n 错误码:")+
CString(ltoa(e->m_pErrorInfo->m_lErrorCode,szBuffer,10))+
CString("\n描述:")+
CString(e->m_pErrorInfo->m_strDescription);
AfxMessageBox(strExceptDesc,MB_ICONEXCLAMATION);
m_addrSet.Close();
return;
}
if ( bFieldsHaveChanged )
{
LoadDatabaseData(); // 如果记录被改变,则更新列表框显示
}
}
//删除通讯录中的记录
void CManagerView::DelAddress()
{
BOOL bFieldsHaveChanged=FALSE;//表示数据库表记录是否被改变
int nItemIndex=-1;//当前所选记录的索引
if((m_list.GetNextItem(-1,LVNI_SELECTED))!=-1)
{
try {
//打开记录集
if(!m_addrSet.IsOpen())
m_addrSet.Open();
while((nItemIndex = m_list.GetNextItem(nItemIndex,LVNI_SELECTED))!=-1)
{
CString sqlSelect=
CString("[姓名]=")+
CString("'")+
CString(m_list.GetItemText(nItemIndex,0))+
CString("'");//设置查询条件
if(m_addrSet.FindFirst(sqlSelect))//根据查询条件定位记录
{
//删除所选记录
m_addrSet.Delete();
bFieldsHaveChanged=TRUE;
}
else
{
AfxMessageBox("内部错误\n\n数据库中不存在该记录\n或者数据库被损坏", MB_ICONSTOP );
}
}
m_addrSet.Close(); // 关闭记录集
}
catch(CDaoException* e)
{
char szBuffer[256];
CString strExceptDesc=
CString("数据库引擎数据:\n\n Error Code:")+
CString(ltoa(e->m_pErrorInfo->m_lErrorCode,szBuffer,10))+
CString("\nDescription:")+
CString(e->m_pErrorInfo->m_strDescription);
AfxMessageBox(strExceptDesc,MB_ICONEXCLAMATION);
m_addrSet.Close();
return;
}
if ( bFieldsHaveChanged )
{
LoadDatabaseData(); // 如果记录被改变则更新列表框数据
}
}
else
{
AfxMessageBox("没有选择记录", MB_ICONEXCLAMATION);
}
}
//处理单击列表框列头消息
void CManagerView::OnColumnclickAddressList(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
//根据所单击的列确定排序字段
switch ( pNMListView -> iSubItem )
{
case 0:
if(m_bIsAddress)
Sort(CString("[姓名]"));
else if(m_bIsMoney)
Sort(CString("[日期]"));
break;
case 1:
if(m_bIsAddress)
Sort(CString("[E-Mail地址]"));
else if(m_bIsMoney)
Sort(CString("[总收入]"));
break;
case 2:
if(m_bIsAddress)
Sort(CString("[住宅电话]"));
else if(m_bIsMoney)
Sort(CString("[总支出]"));
break;
case 3:
if(m_bIsAddress)
Sort(CString("[办公电话]" ));
else if(m_bIsMoney)
Sort(CString("[合计]"));
break;
case 4:
Sort(CString("[性别]"));
break;
case 5:
Sort(CString("[生日]"));
break;
case 6:
Sort(CString("[BP机号码]"));
break;
default:
Sort(CString("")); // default: no sort.
break;
}
*pResult = 0;
}
// 对数据库进行排序
void CManagerView::Sort(CString& str)
{
// 清空列表框
m_list.DeleteAllItems();
// 设置排序参数
if(m_bIsAddress)
m_addrSet.m_strSort=str;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -