📄 maindlg.cpp
字号:
/////////////////////////////////////////////////////////////////////////
//名称:OnOk
//功能:提交通讯录查询结果
////////////////////////////////////////////////////////////////////////
void CMainDlg::OnOK()
{
// TODO: Add extra validation here
if(m_bsearchflag)//如果flag=true,则调用精确查询
{
ExactSearch();
}
else//否则调用模糊查询
{
BlurSearch();
}
//CDialog::OnOK();
}
//////////////////////////////////////
//名称:ExactSearch
//功能:实现精确查询
///////////////////////////////////////
void CMainDlg::ExactSearch()
{
//如果数据库没有打开,先将其打开
if(!m_database.IsOpen())
{
m_database.Open(_T("addresslist"));
}
CPersonSet m_personset;//定义CPersonset类的对象
CString m_tablefield;
if(!m_input.IsEmpty())
{
if(m_field.Compare("姓名")==0)
{
m_tablefield.Format("NAME");
}
if(m_field.Compare("性别")==0)
{
m_tablefield.Format("SEX");
}
if(m_field.Compare("关系")==0)
{
m_tablefield.Format("RELATION");
}
if(m_field.Compare("联系电话")==0)
{
m_tablefield.Format("TELEPHONE");
}
if(m_field.Compare("手机号码")==0)
{
m_tablefield.Format("HANDPHONE");
}
if(m_field.Compare("家庭住址")==0)
{
m_tablefield.Format("ADDRESS");
}
if(m_field.Compare("工作单位")==0)
{
m_tablefield.Format("WORKPLACE");
}
if(m_field.Compare("E-MAIL")==0)
{
m_tablefield.Format("EMAIL");
}
if(m_field.Compare("OICQ号码")==0)
{
m_tablefield.Format("OICQ");
}
m_searchSQL.Format("select * from person where %s='%s'",m_tablefield,m_input);
SearchData();
}
else
{
MessageBox("请填写查询关键字","提示",MB_OK|MB_ICONINFORMATION);
GetDlgItem(IDC_INPUT_EDIT)->SetFocus();
}
}
//////////////////////////////////////
//名称:BlurSearch
//功能:实现模糊查询
///////////////////////////////////////
void CMainDlg::BlurSearch()
{
//如果数据库没有打开,先将其打开
if(!m_database.IsOpen())
{
m_database.Open(_T("addresslist"));
}
//UpdateData(TRUE);
CPersonSet m_personset;//定义CPersonset类的对象
CString m_tablefield,m_str="%";
m_str=m_str+m_input+"%";
if(!m_input.IsEmpty())
{
if(m_field.Compare("姓名")==0)
{
m_tablefield.Format("NAME");
}
if(m_field.Compare("性别")==0)
{
m_tablefield.Format("SEX");
}
if(m_field.Compare("关系")==0)
{
m_tablefield.Format("RELATION");
}
if(m_field.Compare("联系电话")==0)
{
m_tablefield.Format("TELEPHONE");
}
if(m_field.Compare("手机号码")==0)
{
m_tablefield.Format("HANDPHONE");
}
if(m_field.Compare("家庭住址")==0)
{
m_tablefield.Format("ADDRESS");
}
if(m_field.Compare("工作单位")==0)
{
m_tablefield.Format("WORKPLACE");
}
if(m_field.Compare("E-MAIL")==0)
{
m_tablefield.Format("EMAIL");
}
if(m_field.Compare("OICQ号码")==0)
{
m_tablefield.Format("OICQ");
}
m_searchSQL.Format("select * from person where %s like '%s'",m_tablefield,m_str);
SearchData();
}
else
{
MessageBox("请填写查询关键字","提示",MB_OK|MB_ICONINFORMATION);
GetDlgItem(IDC_INPUT_EDIT)->SetFocus();
}
}
///////////////////////////////////////////////////////////////////////////
//名称:SearchData
//功能:实现记录查询
//////////////////////////////////////////////////////////////////////////
void CMainDlg::SearchData()
{
//首先确保数据库打开
if(!m_database.IsOpen())
{
m_database.Open(_T("addresslist"));
}
//对列表控件的内容更新,清空原来的内容
m_ctrlperson.DeleteAllItems();
//创建记录集
CPersonSet m_personset(&m_database);
m_personset.Open(AFX_DB_USE_DEFAULT_TYPE,m_searchSQL);
CDBVariant varValue;
char buf[20];
//用来记录当前记录的序号
int i=0;
//如果表中有记录,打开后将游标定在第一位,使记录集中的第一条记录成为当前记录
if(m_personset.GetRecordCount()!=0) m_personset.MoveFirst();
while(!m_personset.IsEOF())
{
int temp=0;
//对整型数字的处理
m_personset.GetFieldValue(temp,varValue);
sprintf(buf,"%d",varValue.m_lVal);m_ctrlperson.InsertItem(i,buf);
//对字符串显示处理
m_personset.GetFieldValue(1,varValue);
m_ctrlperson.SetItemText(i,1,varValue.m_pstring->GetBuffer(1));
m_personset.GetFieldValue(2,varValue);
m_ctrlperson.SetItemText(i,2,varValue.m_pstring->GetBuffer(1));
m_personset.GetFieldValue(3,varValue);
m_ctrlperson.SetItemText(i,3,varValue.m_pstring->GetBuffer(1));
m_personset.GetFieldValue(4,varValue);
m_ctrlperson.SetItemText(i,4,varValue.m_pstring->GetBuffer(1));
m_personset.GetFieldValue(5,varValue);
m_ctrlperson.SetItemText(i,5,varValue.m_pstring->GetBuffer(1));
m_personset.GetFieldValue(6,varValue);
m_ctrlperson.SetItemText(i,6,varValue.m_pstring->GetBuffer(1));
m_personset.GetFieldValue(7,varValue);
m_ctrlperson.SetItemText(i,7,varValue.m_pstring->GetBuffer(1));
m_personset.GetFieldValue(8,varValue);
m_ctrlperson.SetItemText(i,8,varValue.m_pstring->GetBuffer(1));
m_personset.GetFieldValue(9,varValue);
m_ctrlperson.SetItemText(i,9,varValue.m_pstring->GetBuffer(1));
m_personset.MoveNext();
i++;
}
//在标题栏中显示共有记录条数
int counts=m_personset.GetRecordCount();
if( counts == 0 )
MessageBox("找不到合适的记录!","查询结果",MB_OK|MB_ICONINFORMATION);
else
{
CString str;
str.Format("通讯录 V1.0 符合条件的记录数: %d",counts);
this->SetWindowText(str);
}
}
void CMainDlg::OnAdd()
{
// TODO: Add your control notification handler code here
//本对话框对应的数据库连接关闭
m_database.Close();
//新建一个CAddInfoDlg的对象
CAddInfoDlg dlg;
//新对话框建立到数据库连接
dlg.m_database.Open(_T("addresslist"));
//弹出新对话框
dlg.DoModal();
//新对话框关闭后,在原对话框中刷新数据显示
RefreshData();
}
void CMainDlg::OnEdit()
{
// TODO: Add your control notification handler code here
m_database.Close();//本对话框断开与数据库的连接
CModifyDlg dlg;
dlg.m_database.Open(_T("addresslist"));//打开数据库
int i=m_ctrlperson.GetSelectionMark();
CString strSQL;
int id=atoi(m_ctrlperson.GetItemText(i,0));
CPersonSet m_recordset;
CDBVariant varValue;
if(i==-1)
{
MessageBox("请选择一条要修改的记录!","提示",MB_OK|MB_ICONINFORMATION);
}
else
{
int temp=0;
strSQL.Format("select * from person where ID=%d",id);
m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);
m_recordset.GetFieldValue(temp,varValue);
dlg.m_modid=varValue.m_lVal;
m_recordset.GetFieldValue(1,varValue);
dlg.m_modname=varValue.m_pstring->GetBuffer(1);
m_recordset.GetFieldValue(2,varValue);
dlg.m_modsex=varValue.m_pstring->GetBuffer(1);
m_recordset.GetFieldValue(3,varValue);
dlg.m_modrelation=varValue.m_pstring->GetBuffer(1);
m_recordset.GetFieldValue(4,varValue);
dlg.m_modtelephone=varValue.m_pstring->GetBuffer(1);
m_recordset.GetFieldValue(5,varValue);
dlg.m_modhandphone=varValue.m_pstring->GetBuffer(1);
m_recordset.GetFieldValue(6,varValue);
dlg.m_modaddress=varValue.m_pstring->GetBuffer(1);
m_recordset.GetFieldValue(7,varValue);
dlg.m_modworkplace=varValue.m_pstring->GetBuffer(1);
m_recordset.GetFieldValue(8,varValue);
dlg.m_modemail=varValue.m_pstring->GetBuffer(1);
m_recordset.GetFieldValue(9,varValue);
dlg.m_modoicq=varValue.m_pstring->GetBuffer(1);
//m_database.Close();//此处不能断开与数据库的连接
dlg.DoModal();
RefreshData();
}
}
void CMainDlg::OnDelete()
{
// TODO: Add your control notification handler code here
//i是记录中所选的记录号,如果没有则返回
int i=m_ctrlperson.GetSelectionMark();
CString strSQL,msg,strname;
strname=m_ctrlperson.GetItemText(i,1);
msg.Format("第 %d 项,姓名为“%s”的记录将被删除!是否继续?",i+1,strname);
//如果用户没有选择记录,则提示选取一条记录
if(i==-1)
{
MessageBox("请选择一条要删除的记录!","提示",MB_OK|MB_ICONINFORMATION);
}
else
{
if(MessageBox(msg,"提示",MB_YESNO|MB_ICONINFORMATION)==IDYES)
{
CString strname=m_ctrlperson.GetItemText(i,1);
//从表中删除对应的记录
strSQL.Format("delete from person where NAME='%s'",strname);
m_database.ExecuteSQL(strSQL);
m_database.Close();
RefreshData();
}
}
}
void CMainDlg::OnSearch()
{
// TODO: Add your control notification handler code here
RefreshData();
SearchDlg dlg;
if( ( dlg.DoModal() ) == IDOK )
{
m_input = dlg.m_keyword;
m_field = dlg.m_search_field;
m_bsearchflag = dlg.m_bExact;
OnOK();
}
else
{
//Do nothing;
}
}
void CMainDlg::OnDblclkList1(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
OnEdit();
*pResult = 0;
}
void CMainDlg::OnShow()
{
// TODO: Add your control notification handler code here
RefreshData();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -