AdoCtrlAccessDlg.cpp
上传用户:lqt88888
上传日期:2009-12-14
资源大小:905k
文件大小:7k
源码类别:

书籍源码

开发平台:

Visual C++

  1. // AdoCtrlAccessDlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "AdoCtrlAccess.h"
  5. #include "AdoCtrlAccessDlg.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // CAboutDlg dialog used for App About
  13. class CAboutDlg : public CDialog
  14. {
  15. public:
  16. CAboutDlg();
  17. // Dialog Data
  18. //{{AFX_DATA(CAboutDlg)
  19. enum { IDD = IDD_ABOUTBOX };
  20. //}}AFX_DATA
  21. // ClassWizard generated virtual function overrides
  22. //{{AFX_VIRTUAL(CAboutDlg)
  23. protected:
  24. virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
  25. //}}AFX_VIRTUAL
  26. // Implementation
  27. protected:
  28. //{{AFX_MSG(CAboutDlg)
  29. //}}AFX_MSG
  30. DECLARE_MESSAGE_MAP()
  31. };
  32. CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
  33. {
  34. //{{AFX_DATA_INIT(CAboutDlg)
  35. //}}AFX_DATA_INIT
  36. }
  37. void CAboutDlg::DoDataExchange(CDataExchange* pDX)
  38. {
  39. CDialog::DoDataExchange(pDX);
  40. //{{AFX_DATA_MAP(CAboutDlg)
  41. //}}AFX_DATA_MAP
  42. }
  43. BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
  44. //{{AFX_MSG_MAP(CAboutDlg)
  45. // No message handlers
  46. //}}AFX_MSG_MAP
  47. END_MESSAGE_MAP()
  48. /////////////////////////////////////////////////////////////////////////////
  49. // CAdoCtrlAccessDlg dialog
  50. CAdoCtrlAccessDlg::CAdoCtrlAccessDlg(CWnd* pParent /*=NULL*/)
  51. : CDialog(CAdoCtrlAccessDlg::IDD, pParent)
  52. {
  53. //{{AFX_DATA_INIT(CAdoCtrlAccessDlg)
  54. m_nID = 0;
  55. m_strName = _T("");
  56. //}}AFX_DATA_INIT
  57. // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
  58. m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  59. }
  60. void CAdoCtrlAccessDlg::DoDataExchange(CDataExchange* pDX)
  61. {
  62. CDialog::DoDataExchange(pDX);
  63. //{{AFX_DATA_MAP(CAdoCtrlAccessDlg)
  64. DDX_Text(pDX, IDC_ID, m_nID);
  65. DDX_Text(pDX, IDC_NAME, m_strName);
  66. //}}AFX_DATA_MAP
  67. }
  68. BEGIN_MESSAGE_MAP(CAdoCtrlAccessDlg, CDialog)
  69. //{{AFX_MSG_MAP(CAdoCtrlAccessDlg)
  70. ON_WM_SYSCOMMAND()
  71. ON_WM_PAINT()
  72. ON_WM_QUERYDRAGICON()
  73. ON_BN_CLICKED(IDC_PRV, OnPrv)
  74. ON_BN_CLICKED(IDC_NEXT, OnNext)
  75. ON_BN_CLICKED(IDC_MODIFY, OnModify)
  76. ON_WM_DESTROY()
  77. //}}AFX_MSG_MAP
  78. END_MESSAGE_MAP()
  79. /////////////////////////////////////////////////////////////////////////////
  80. // CAdoCtrlAccessDlg message handlers
  81. BOOL CAdoCtrlAccessDlg::OnInitDialog()
  82. {
  83. CDialog::OnInitDialog();
  84. // Add "About..." menu item to system menu.
  85. // IDM_ABOUTBOX must be in the system command range.
  86. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
  87. ASSERT(IDM_ABOUTBOX < 0xF000);
  88. CMenu* pSysMenu = GetSystemMenu(FALSE);
  89. if (pSysMenu != NULL)
  90. {
  91. CString strAboutMenu;
  92. strAboutMenu.LoadString(IDS_ABOUTBOX);
  93. if (!strAboutMenu.IsEmpty())
  94. {
  95. pSysMenu->AppendMenu(MF_SEPARATOR);
  96. pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  97. }
  98. }
  99. // Set the icon for this dialog.  The framework does this automatically
  100. //  when the application's main window is not a dialog
  101. SetIcon(m_hIcon, TRUE); // Set big icon
  102. SetIcon(m_hIcon, FALSE); // Set small icon
  103. // TODO: Add extra initialization here
  104. //初始化环境
  105. ::CoInitialize(NULL);
  106. //创建并打开数据库连接对象
  107. _variant_t vFieldValue;
  108. CString strFieldValue;
  109. m_pCon.CreateInstance(__uuidof(Connection));
  110. m_pCon->Open("students","","",NULL);
  111. //创建并打开记录集对象
  112. m_pRs.CreateInstance(__uuidof(Recordset));
  113. m_pRs->Open("select* from table1",m_pCon.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
  114. if(VARIANT_FALSE == m_pRs->EndOfFile)
  115.     {
  116. //获得第一条记录并显示
  117. vFieldValue = m_pRs->GetCollect("id");
  118. strFieldValue = (char*)_bstr_t(vFieldValue);
  119. m_nID = atoi(strFieldValue.GetBuffer(0));;
  120. vFieldValue.Clear();
  121. vFieldValue = m_pRs->GetCollect("name");
  122. strFieldValue = (char*)_bstr_t(vFieldValue);
  123. m_strName = strFieldValue;
  124. vFieldValue.Clear();
  125.     }
  126. UpdateData(FALSE);
  127. return TRUE;  // return TRUE  unless you set the focus to a control
  128. }
  129. void CAdoCtrlAccessDlg::OnSysCommand(UINT nID, LPARAM lParam)
  130. {
  131. if ((nID & 0xFFF0) == IDM_ABOUTBOX)
  132. {
  133. CAboutDlg dlgAbout;
  134. dlgAbout.DoModal();
  135. }
  136. else
  137. {
  138. CDialog::OnSysCommand(nID, lParam);
  139. }
  140. }
  141. // If you add a minimize button to your dialog, you will need the code below
  142. //  to draw the icon.  For MFC applications using the document/view model,
  143. //  this is automatically done for you by the framework.
  144. void CAdoCtrlAccessDlg::OnPaint() 
  145. {
  146. if (IsIconic())
  147. {
  148. CPaintDC dc(this); // device context for painting
  149. SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
  150. // Center icon in client rectangle
  151. int cxIcon = GetSystemMetrics(SM_CXICON);
  152. int cyIcon = GetSystemMetrics(SM_CYICON);
  153. CRect rect;
  154. GetClientRect(&rect);
  155. int x = (rect.Width() - cxIcon + 1) / 2;
  156. int y = (rect.Height() - cyIcon + 1) / 2;
  157. // Draw the icon
  158. dc.DrawIcon(x, y, m_hIcon);
  159. }
  160. else
  161. {
  162. CDialog::OnPaint();
  163. }
  164. }
  165. // The system calls this to obtain the cursor to display while the user drags
  166. //  the minimized window.
  167. HCURSOR CAdoCtrlAccessDlg::OnQueryDragIcon()
  168. {
  169. return (HCURSOR) m_hIcon;
  170. }
  171. //前一条记录
  172. void CAdoCtrlAccessDlg::OnPrv() 
  173. {
  174. _variant_t vFieldValue;
  175. CString strFieldValue;
  176. //记录集指针前移一条
  177. m_pRs->MovePrevious();
  178. if(VARIANT_FALSE == m_pRs->FirstOfFile)
  179.     {
  180. //获得当前条的数据并显示
  181. vFieldValue = m_pRs->GetCollect("id");
  182. strFieldValue = (char*)_bstr_t(vFieldValue);
  183. m_nID = atoi(strFieldValue.GetBuffer(0));;
  184. vFieldValue.Clear();
  185. vFieldValue = m_pRs->GetCollect("name");
  186. strFieldValue = (char*)_bstr_t(vFieldValue);
  187. m_strName = strFieldValue;
  188. vFieldValue.Clear();
  189. UpdateData(FALSE);
  190.     }
  191. else
  192. {
  193. //定位到第一条
  194. m_pRs->MoveNext();
  195. AfxMessageBox("已经到第一条了");
  196. }
  197. }
  198. //后一条记录
  199. void CAdoCtrlAccessDlg::OnNext() 
  200. {
  201. _variant_t vFieldValue;
  202. CString strFieldValue;
  203. //记录集指针后移一条
  204. m_pRs->MoveNext();
  205. if(VARIANT_FALSE == m_pRs->EndOfFile)
  206.     {
  207. //获得当前条的数据并显示
  208. vFieldValue = m_pRs->GetCollect("id");
  209. strFieldValue = (char*)_bstr_t(vFieldValue);
  210. m_nID = atoi(strFieldValue.GetBuffer(0));;
  211. vFieldValue.Clear();
  212. vFieldValue = m_pRs->GetCollect("name");
  213. strFieldValue = (char*)_bstr_t(vFieldValue);
  214. m_strName = strFieldValue;
  215. vFieldValue.Clear();
  216. UpdateData(FALSE);
  217.     }
  218. else
  219. {
  220. //定位到最后一条
  221. m_pRs->MovePrevious();
  222. AfxMessageBox("已经到最后一条了");
  223. }
  224. }
  225. //修改记录
  226. void CAdoCtrlAccessDlg::OnModify() 
  227. {
  228. UpdateData(TRUE);
  229. if(VARIANT_FALSE == m_pRs->EndOfFile)
  230. {
  231. //修改数据库记录
  232. _variant_t vFieldName,vFieldValue;
  233. CString strValue;
  234. vFieldName.SetString("id");
  235. strValue.Format("%d",m_nID);
  236. vFieldValue.SetString(strValue);
  237. m_pRs->Update(vFieldName,vFieldValue);
  238. vFieldName.Clear();
  239. vFieldValue.Clear();
  240. vFieldName.SetString("name");
  241. vFieldValue.SetString(m_strName);
  242. m_pRs->Update(vFieldName,vFieldValue);
  243. vFieldName.Clear();
  244. vFieldValue.Clear();
  245. }
  246. }
  247. void CAdoCtrlAccessDlg::OnDestroy() 
  248. {
  249. //关闭记录和连接
  250. m_pRs->Close();
  251. m_pCon->Close();
  252. //释放环境
  253. ::CoUninitialize();
  254. CDialog::OnDestroy();
  255. }