?? phone.cpp
字號:
// Phone.cpp : implementation file
//
#include "stdafx.h"
#include "Papaz.h"
#include "Phone.h"
#include "PhoneSet.h"
#include "PhoneDel.h"
#include "PhoneFind.h"
#include "PhoneAdd.h"
#include "PhoneEdit.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CPhone property page
IMPLEMENT_DYNCREATE(CPhone, CPropertyPage)
CPhone::CPhone() : CPropertyPage(CPhone::IDD)
{
//{{AFX_DATA_INIT(CPhone)
//}}AFX_DATA_INIT
sDriver = "MICROSOFT ACCESS DRIVER (*.mdb)";
sFile = "Papaz.mdb";
sDsn.Format("ODBC;DRIVER={%s};DSN='';DBQ=%s",sDriver,sFile);
}
CPhone::~CPhone()
{
}
void CPhone::DoDataExchange(CDataExchange* pDX)
{
CPropertyPage::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CPhone)
DDX_Control(pDX, IDC_LIST1, m_ListCtrl);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CPhone, CPropertyPage)
//{{AFX_MSG_MAP(CPhone)
ON_BN_CLICKED(IDC_DEL, OnDel)
ON_BN_CLICKED(IDC_FIND, OnFind)
ON_BN_CLICKED(IDC_SHOW, OnShow)
ON_BN_CLICKED(IDC_ADD, OnAdd)
ON_BN_CLICKED(IDC_EDIT, OnEdit)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CPhone message handlers
BOOL CPhone::OnInitDialog()
{
CPropertyPage::OnInitDialog();
m_ListCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
m_ListCtrl.InsertColumn(0,_T("姓名"),LVCFMT_IMAGE|LVCFMT_LEFT);
m_ListCtrl.InsertColumn(1,_T("電話號碼"));
int j;
for(j=0;j<2;j++)
{
m_ListCtrl.SetColumnWidth(j ,90);
}
//顯示所有記錄
this->Show();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CPhone::OnDel()
{
database.Open(NULL,false ,false ,sDsn);
CPhoneSet m_pSet( &database );
m_pSet.Open();
CPhoneDel dlg;
if(dlg.DoModal()==IDOK)
{
BOOL b=FALSE;
m_pSet.MoveFirst();
do
{
if(dlg.m_DeleteName!=m_pSet.m_column1)
m_pSet.MoveNext();
else
{
//將列表框清空
m_ListCtrl.DeleteAllItems();
b=TRUE;
//從數據庫中刪除記錄
m_pSet.Delete();
//重新在列表框中顯示記錄
// m_pSet.Requery();
database.Close();
this->Show();
database.Open(NULL,false ,false ,sDsn);
m_pSet.Open();
m_pSet.MoveFirst();
break;
}
}while(!m_pSet.IsEOF());
if(b==FALSE)
AfxMessageBox("沒有此記錄");
}
// m_pSet.Close();
database.Close();
}
void CPhone::OnFind()
{
// like %查詢內容% 包含查詢內容
// like %查詢內容 以查詢內容結尾
// like 查詢內容% 以查詢內容開始的
//一般通用的數據庫的like使用 % ,但是ACCESS是不一樣的,具體使用是這樣:
//記錄的內容為“樂哈哈”
//select * from 地名索引 where [name] like '哈哈%%';
//select * from 地名索引 where [name] like '%%哈哈%%';
CPhoneFind dlg;
if(dlg.DoModal()==IDOK)
{
//記錄集與數據庫不同,記錄集用于存放對數據庫進行查詢等操作后的內容
/* CString strSQL;
CDatabase database; //定義數據庫對象
//以下是自動連接數據庫
CString sDriver = "MICROSOFT ACCESS DRIVER (*.mdb)";
CString sDsn;
CString sFile = "電話簿.mdb";
sDsn.Format("ODBC;DRIVER={%s};DSN='';DBQ=%s",sDriver,sFile);
*/ database.Open(NULL,false ,false ,sDsn); //打開數據庫
CString t;
t.Format("%%%s%%",dlg.m_FindName); // %s相當于一個變量,這句的功能是t=%%dlg.m_Name%%
CPhoneSet recset( &database ); //定義記錄集對象
strSQL.Format("select * from 電話簿 where 姓名 like '%s'",t);//這句的功能是strSQL=select * from fen where 姓名 like '%%dlg.m_Name%%'
recset.Open(CPhoneSet::forwardOnly,strSQL,CPhoneSet::readOnly);//按strSQL語句進行查詢,查詢結果放到記錄集中
m_ListCtrl.DeleteAllItems(); //將ListCtrl的內容清空,為顯示查詢結果做準備
for(int j=0;j<recset.GetRecordCount();j++) //GetRecordCount()是用來計算記錄集中有幾條記錄并返回計算結果
{
CString temp;
recset.GetFieldValue("姓名",temp); //得到列屬性為“學號”的記錄集中的內容(不是數據庫中的)附給temp
m_ListCtrl.InsertItem(j,temp); //將temp加入到ListCtrl中用以顯示
recset.GetFieldValue("電話號碼",temp);
m_ListCtrl.SetItemText(j,1,temp);
recset.MoveNext(); //將記錄集的指針向下移一位
}
// recset.Close();
database.Close();
}
}
void CPhone::Show()
{
CString sCatID, sCategory;
database.Open(NULL,false ,false ,sDsn);
CPhoneSet recset( &database );
strSQL = "SELECT 姓名, 電話號碼 "
"FROM 電話簿";
recset.Open(CPhoneSet::forwardOnly,strSQL,CPhoneSet::readOnly);
int i=0;
while ( !recset.IsEOF() )
{
recset.GetFieldValue("姓名",sCatID);
recset.GetFieldValue("電話號碼",sCategory);
m_ListCtrl.InsertItem(i,sCatID,0);
m_ListCtrl.SetItemText(i,1,sCategory);
i++;
recset.MoveNext();
}
// recset.Close();
database.Close();
}
/*
void CPhone::OnDisplayall()
{
// TODO: Add your control notification handler code here
}
*/
void CPhone::OnShow()
{
// TODO: Add your control notification handler code here
m_ListCtrl.DeleteAllItems();
CPhone::Show();
}
void CPhone::OnAdd()
{
database.Open(NULL,false ,false ,sDsn);
CPhoneSet m_pSet( &database );
m_pSet.Open();
CPhoneAdd dlg;
if( dlg.DoModal()==IDOK)
{
if(dlg.m_Name=="")
{
//保證學號不為零
AfxMessageBox("學號不可為零!");
}
else
{
//增加記錄,將變量中的數據賦給數據庫對應的字段
m_pSet.AddNew();
m_pSet.m_column1=dlg.m_Name;
m_pSet.m_column2=dlg.m_Number;
m_pSet.Update();
}
}
m_ListCtrl.DeleteAllItems();
// m_pSet.Requery();
// m_pSet.Close();
database.Close();
this->Show();
}
void CPhone::OnEdit()
{
database.Open(NULL,false ,false ,sDsn);
CPhoneSet m_pSet( &database );
m_pSet.Open();
CPhoneEdit dlg;
UpdateData(FALSE);
if(dlg.DoModal()==IDOK)
{
BOOL b=FALSE;
m_pSet.MoveFirst();
do
{
if(dlg.m_EditName!=m_pSet.m_column1)
m_pSet.MoveNext();
else
{
//清空列表框
m_ListCtrl.DeleteAllItems();
//修改指定的記錄
m_pSet.Edit();
b=TRUE;
m_pSet.m_column1=dlg.m_EditName;
m_pSet.m_column2=dlg.m_EditNum;
m_pSet.Update();
m_pSet.Requery();
//重新在列表框中顯示記錄
database.Close();
this->Show();
database.Open(NULL,false ,false ,sDsn);
m_pSet.Open();
m_pSet.MoveFirst();
break;
}
}while(!m_pSet.IsEOF());
if(b==FALSE)
AfxMessageBox("沒有此記錄");
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -