PAGE1.CPP
上传用户:sanlisteel
上传日期:2008-06-19
资源大小:98k
文件大小:10k
源码类别:

数据库系统

开发平台:

C/C++

  1. // Page1.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "tbvc.h"
  5. #include "Page1.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // CPage1 property page
  13. IMPLEMENT_DYNCREATE(CPage1, CPropertyPage)
  14. CPage1::CPage1() : CPropertyPage(CPage1::IDD)
  15. {
  16. //{{AFX_DATA_INIT(CPage1)
  17. m_address = _T("");
  18. m_company = _T("");
  19. m_email = _T("");
  20. m_introduction = _T("");
  21. m_mobile = _T("");
  22. m_name = _T("");
  23. m_pager = _T("");
  24. m_position = _T("");
  25. m_relation = _T("");
  26. m_sex = _T("");
  27. m_telphone = _T("");
  28. m_age = 0;
  29. isAppend=FALSE;
  30. isEdit=FALSE;
  31. //}}AFX_DATA_INIT
  32. }
  33. CPage1::~CPage1()
  34. {
  35. if(m_pSet!=NULL)
  36. m_pSet->Close();
  37. m_database->Close();
  38. delete m_pSet;
  39. delete m_database;
  40. }
  41. }
  42. void CPage1::DoDataExchange(CDataExchange* pDX)
  43. {
  44. CPropertyPage::DoDataExchange(pDX);
  45. //{{AFX_DATA_MAP(CPage1)
  46. DDX_Control(pDX, IDC_TELPHONE, m_edittelphone);
  47. DDX_Control(pDX, IDC_SEX, m_editsex);
  48. DDX_Control(pDX, IDC_RELATION, m_editrelation);
  49. DDX_Control(pDX, IDC_POSITION, m_editposition);
  50. DDX_Control(pDX, IDC_PAGER, m_editpager);
  51. DDX_Control(pDX, IDC_NAME, m_editname);
  52. DDX_Control(pDX, IDC_MOBILE, m_editmobile);
  53. DDX_Control(pDX, IDC_INTRODUCTION, m_editintroduction);
  54. DDX_Control(pDX, IDC_EMAIL, m_editemail);
  55. DDX_Control(pDX, IDC_COMPANY, m_editcompany);
  56. DDX_Control(pDX, IDC_AGE, m_editage);
  57. DDX_Control(pDX, IDC_ADDRESS, m_editaddress);
  58. DDX_Text(pDX, IDC_ADDRESS, m_address);
  59. DDX_Text(pDX, IDC_COMPANY, m_company);
  60. DDX_Text(pDX, IDC_EMAIL, m_email);
  61. DDX_Text(pDX, IDC_INTRODUCTION, m_introduction);
  62. DDX_Text(pDX, IDC_MOBILE, m_mobile);
  63. DDX_Text(pDX, IDC_NAME, m_name);
  64. DDX_Text(pDX, IDC_PAGER, m_pager);
  65. DDX_Text(pDX, IDC_POSITION, m_position);
  66. DDX_Text(pDX, IDC_RELATION, m_relation);
  67. DDX_Text(pDX, IDC_SEX, m_sex);
  68. DDX_Text(pDX, IDC_TELPHONE, m_telphone);
  69. DDX_Text(pDX, IDC_AGE, m_age);
  70. DDV_MinMaxInt(pDX, m_age, 0, 100);
  71. //}}AFX_DATA_MAP
  72. }
  73. BEGIN_MESSAGE_MAP(CPage1, CPropertyPage)
  74. //{{AFX_MSG_MAP(CPage1)
  75. ON_BN_CLICKED(IDC_NEXT, OnNext)
  76. ON_BN_CLICKED(IDC_FIRST, OnFirst)
  77. ON_BN_CLICKED(IDC_LAST, OnLast)
  78. ON_BN_CLICKED(IDC_PREV, OnPrev)
  79. ON_BN_CLICKED(IDC_EDITRECORD, OnEditrecord)
  80. ON_WM_CTLCOLOR()
  81. ON_BN_CLICKED(IDC_APPENDRECORD, OnAppendrecord)
  82. ON_BN_CLICKED(IDC_DELETERECORD, OnDeleterecord)
  83. //}}AFX_MSG_MAP
  84. END_MESSAGE_MAP()
  85. /////////////////////////////////////////////////////////////////////////////
  86. // CPage1 message handlers
  87. BOOL CPage1::OnInitDialog() 
  88. {   //MessageBox("CPage1::OnInitDialog","test");
  89. CPropertyPage::OnInitDialog();
  90. CWaitCursor wait;
  91. //Create Dialog BkColor Brush
  92.     m_brush.CreateSolidBrush(RGB(0,170,170));
  93.     
  94. //Set All Edits Control ReadOnly State
  95. SetEditReadOnly(TRUE);
  96. try
  97. {
  98. CString  sDSN="ODBC;DRIVER=Microsoft Access Driver (*.mdb);DSN='';DBQ=telbook.mdb";
  99. m_database=new CDatabase;
  100. if(!m_database->Open(NULL,FALSE,FALSE,sDSN,FALSE))
  101. {
  102. //AfxMessageBox("ODBC Connection Faile!");
  103. CDialog::EndDialog(0);
  104. GetParent()->PostMessage(WM_CLOSE);
  105. return FALSE;
  106. }
  107.         CString strSQL="select * from personlist";
  108. m_pSet=new CMyRecordset(m_database);
  109. m_pSet->Open(CRecordset::dynaset,strSQL);
  110.         if(isEmpty())
  111. {
  112. SetNoRecordBtnState();
  113. return FALSE;
  114. }
  115.         
  116.         GetValue();
  117. SetButtonState();
  118. }
  119. catch(CDBException* pEx)
  120. {
  121. pEx->ReportError();
  122. return TRUE;  
  123.               
  124. }
  125. void CPage1::ClearEditText()
  126. {
  127. m_address = _T("");
  128. m_company = _T("");
  129. m_email = _T("");
  130. m_introduction = _T("");
  131. m_mobile = _T("");
  132. m_name = _T("");
  133. m_pager = _T("");
  134. m_position = _T("");
  135. m_relation = _T("");
  136. m_sex = _T("");
  137. m_telphone = _T("");
  138. m_age = 0;
  139. UpdateData(FALSE);
  140. }
  141. void CPage1::GetValue()
  142. {
  143.     m_name      =   m_pSet->m_name;
  144. m_age       =   m_pSet->m_age;
  145. m_sex       =   m_pSet->m_sex;
  146. m_email     =   m_pSet->m_email;
  147. m_relation  =   m_pSet->m_friendship;
  148. m_company   =   m_pSet->m_company;
  149. m_address   =   m_pSet->m_address;
  150. m_telphone  =   m_pSet->m_telphone;
  151. m_pager     =   m_pSet->m_pager;
  152. m_mobile    =   m_pSet->m_mobile;
  153. m_position  =   m_pSet->m_position;
  154. m_introduction  =  m_pSet->m_introduction;
  155. UpdateData(FALSE);
  156. }
  157. void CPage1::SetValue()
  158. {
  159. UpdateData(TRUE);
  160. m_pSet->m_name      =   m_name;
  161. m_pSet->m_age       =   m_age;
  162. m_pSet->m_sex       =   m_sex;
  163. m_pSet->m_email     =   m_email;
  164. m_pSet->m_friendship=   m_relation;
  165. m_pSet->m_company   =   m_company;
  166. m_pSet->m_address   =   m_address;
  167. m_pSet->m_telphone  =   m_telphone;
  168. m_pSet->m_pager     =   m_pager;
  169. m_pSet->m_mobile    =   m_mobile;
  170. m_pSet->m_position  =   m_position;
  171. m_pSet->m_introduction  =  m_introduction;
  172. }
  173. void CPage1::OnFirst() 
  174. {
  175. m_pSet->MoveFirst();
  176. OnPrev();
  177. }
  178. void CPage1::OnPrev() 
  179. {
  180. m_pSet->MovePrev();
  181. GetValue();
  182. SetButtonState();
  183. }
  184. void CPage1::OnNext() 
  185. {
  186. m_pSet->MoveNext();
  187. GetValue();
  188. SetButtonState();
  189. }
  190. void CPage1::OnLast() 
  191. {
  192. m_pSet->MoveLast();
  193. OnNext();
  194. }
  195. void CPage1::SetButtonState()
  196. {
  197.     if(IsFirstRecord())
  198. {
  199. GetDlgItem(IDC_FIRST)->EnableWindow(FALSE);
  200.     GetDlgItem(IDC_PREV)->EnableWindow(FALSE);
  201. }
  202. else
  203. {
  204. GetDlgItem(IDC_FIRST)->EnableWindow(TRUE);
  205.     GetDlgItem(IDC_PREV)->EnableWindow(TRUE);
  206. }
  207. if(IsLastRecord())
  208. {
  209. GetDlgItem(IDC_NEXT)->EnableWindow(FALSE);
  210.     GetDlgItem(IDC_LAST)->EnableWindow(FALSE);
  211. }
  212. else
  213. {
  214. GetDlgItem(IDC_NEXT)->EnableWindow(TRUE);
  215. GetDlgItem(IDC_LAST)->EnableWindow(TRUE);
  216. }
  217. }
  218.  
  219. BOOL CPage1::IsFirstRecord()
  220. {
  221. if(m_pSet->IsBOF()&&m_pSet->IsEOF())
  222. {
  223. return TRUE;
  224. }
  225. else if(m_pSet->IsBOF())
  226. {
  227. m_pSet->MoveFirst();
  228. return TRUE;
  229. }
  230. else
  231. return FALSE;
  232. }
  233. BOOL CPage1::IsLastRecord()
  234. {
  235. if(m_pSet->IsBOF()&&m_pSet->IsEOF())
  236. {
  237. return TRUE;
  238. }
  239. else if(m_pSet->IsEOF())
  240. {
  241. m_pSet->MoveLast();
  242. return TRUE;
  243. }
  244. else
  245. return FALSE;
  246. }
  247. HBRUSH CPage1::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
  248. {
  249. HBRUSH hbr = (HBRUSH)m_brush;
  250.    
  251. if(nCtlColor==CTLCOLOR_STATIC)
  252. {   pDC->SetBkMode(TRANSPARENT);
  253. return hbr;
  254. }
  255. if(nCtlColor==CTLCOLOR_EDIT)
  256. {  
  257. return NULL;
  258. }
  259.     
  260. return hbr;
  261. }
  262. void CPage1::SetEditReadOnly(BOOL isReadOnly)
  263. {     
  264. m_editname.SetReadOnlyState(isReadOnly);
  265. m_editage.SetReadOnlyState(isReadOnly);
  266. m_editsex.SetReadOnlyState(isReadOnly);
  267. m_editrelation.SetReadOnlyState(isReadOnly);
  268. m_editposition.SetReadOnlyState(isReadOnly);
  269. m_editemail.SetReadOnlyState(isReadOnly);
  270. m_edittelphone.SetReadOnlyState(isReadOnly);
  271. m_editpager.SetReadOnlyState(isReadOnly);
  272. m_editmobile.SetReadOnlyState(isReadOnly);
  273. m_editaddress.SetReadOnlyState(isReadOnly);
  274. m_editcompany.SetReadOnlyState(isReadOnly);
  275. m_editintroduction.SetReadOnlyState(isReadOnly);
  276. }
  277. void CPage1::SetNavButtonVisible(int isVisible)
  278. GetDlgItem(IDC_FIRST)->ShowWindow(isVisible);
  279.     GetDlgItem(IDC_PREV)->ShowWindow(isVisible);
  280. GetDlgItem(IDC_NEXT)->ShowWindow(isVisible);
  281. GetDlgItem(IDC_LAST)->ShowWindow(isVisible);
  282. }
  283. void CPage1::SetButtonText(BOOL blSet)
  284. {
  285. if(blSet)
  286. {
  287. GetDlgItem(IDC_EDITRECORD)->ShowWindow(SW_HIDE);
  288. GetDlgItem(IDC_APPENDRECORD)->SetWindowText(_T("确  定"));
  289. GetDlgItem(IDC_DELETERECORD)->SetWindowText(_T("取  消"));
  290. }
  291. else
  292. {
  293. GetDlgItem(IDC_EDITRECORD)->ShowWindow(SW_SHOW);
  294. GetDlgItem(IDC_APPENDRECORD)->SetWindowText(_T("添加新记录"));
  295. GetDlgItem(IDC_DELETERECORD)->SetWindowText(_T("删除记录"));
  296. }
  297. }
  298. //添加新纪录功能  && 确定按钮事件
  299. void CPage1::OnAppendrecord() 
  300. {
  301. if(isAppend||isEdit)
  302. {
  303. try
  304. {   if(!UpdateData(TRUE)) return;
  305.     if(m_name.IsEmpty())
  306. MessageBox("[姓名] 字段必须填写内容!","注意",MB_ICONINFORMATION|MB_OK);
  307.     return;
  308. }
  309.             //if(!CheckData())
  310.          // return;
  311. SetValue();
  312. m_pSet->Update();
  313. if(isAppend) 
  314. {
  315. m_pSet->Requery();
  316. m_pSet->MoveLast();
  317. }
  318. SetNavButtonVisible(SW_SHOW);  
  319. SetButtonText(FALSE);
  320. SetEditReadOnly(TRUE);
  321. isAppend=FALSE;
  322. isEdit=FALSE;
  323. GetValue();
  324. SetButtonState();
  325. }
  326. catch(CDBException* pEx)
  327. {
  328. pEx->ReportError();
  329. }
  330. }
  331. else
  332. {
  333. if(m_pSet->CanAppend())
  334. {
  335. SetNavButtonVisible(SW_HIDE);  
  336. SetButtonText(TRUE);
  337. m_pSet->AddNew();
  338. if(isEmpty())
  339. {
  340. GetDlgItem(IDC_EDITRECORD)->EnableWindow(TRUE);
  341. GetDlgItem(IDC_DELETERECORD)->EnableWindow(TRUE);
  342. }
  343. SetEditReadOnly(FALSE);
  344. ClearEditText();
  345. isAppend=TRUE;
  346. m_editname.SetFocus();
  347. }
  348. else
  349. {
  350. AfxMessageBox("Can't Append New Record");
  351. }
  352. }
  353. }
  354. //删除记录功能  && 取消功能
  355. void CPage1::OnDeleterecord() 
  356. {
  357. // TODO: Add your control notification handler code here
  358. if(isAppend||isEdit)
  359. {
  360. m_pSet->CancelUpdate();
  361.     SetNavButtonVisible(SW_SHOW);  
  362. SetButtonText(FALSE);
  363. SetEditReadOnly(TRUE);
  364. if(isEmpty()) 
  365. SetNoRecordBtnState();
  366. else
  367. GetValue();
  368. isEdit=FALSE;
  369. isAppend=FALSE;
  370. }
  371. else
  372.     
  373.     if(MessageBox("确定要删除这条记录吗?","删除记录",MB_YESNO|MB_ICONINFORMATION) == IDYES)
  374. {
  375. m_pSet->Delete();
  376. try
  377. {
  378. OnNext();
  379. if(isEmpty())
  380. {
  381. SetNoRecordBtnState();
  382. return;
  383. }
  384. SetButtonState();
  385. GetValue();
  386. }
  387. catch(CDBException* pEx)
  388. {
  389. pEx->ReportError();
  390. }
  391. }
  392. }
  393. void CPage1::OnEditrecord() 
  394. {
  395. if(m_pSet->CanAppend())
  396. {
  397.         SetNavButtonVisible(SW_HIDE);  
  398. SetButtonText(TRUE);
  399. SetEditReadOnly(FALSE);
  400.        m_pSet->Edit();
  401. isEdit=TRUE;
  402. m_editname.SetFocus();
  403. }
  404. else
  405. {
  406. AfxMessageBox("Can't Modify the Record");
  407. }
  408. }
  409. void CPage1::SetNoRecordBtnState()
  410. {
  411. GetDlgItem(IDC_FIRST)->EnableWindow(FALSE);
  412. GetDlgItem(IDC_PREV)->EnableWindow(FALSE);
  413. GetDlgItem(IDC_NEXT)->EnableWindow(FALSE);
  414. GetDlgItem(IDC_LAST)->EnableWindow(FALSE);
  415. GetDlgItem(IDC_EDITRECORD)->EnableWindow(FALSE);
  416. GetDlgItem(IDC_DELETERECORD)->EnableWindow(FALSE);
  417. ClearEditText();
  418. }
  419. BOOL CPage1::isEmpty()
  420. {
  421. if(m_pSet->IsBOF() && m_pSet->IsEOF())
  422. {
  423. return TRUE;
  424. }
  425. else
  426. return FALSE;
  427. }