mfc通过ADO访问mysql数据库_MFC通过ADO操作Access数据库

展开全部

// DbTestDlg.cpp : 实现文件

//

#include "stdafx.h"

#include "DbTest.h"

#include "DbTestDlg.h"

#include "Resource.h"

#ifdef _DEBUG

#define new DEBUG_NEW

#endif

// 用于62616964757a686964616fe4b893e5b19e31333262373937应用程序“关于”菜单项的 CAboutDlg 对话框

class CAboutDlg : public CDialog

{

public:

CAboutDlg();

// 对话框数据

enum { IDD = IDD_ABOUTBOX };

protected:

virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持

// 实现

protected:

DECLARE_MESSAGE_MAP()

};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)

{

}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)

{

CDialog::DoDataExchange(pDX);

}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)

END_MESSAGE_MAP()

// CDbTestDlg 对话框

CDbTestDlg::CDbTestDlg(CWnd* pParent /*=NULL*/)

: CDialog(CDbTestDlg::IDD, pParent)

,m_strId(_T(""))

, m_strName(_T(""))

{

m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

}

void CDbTestDlg::DoDataExchange(CDataExchange* pDX)

{

CDialog::DoDataExchange(pDX);

DDX_Text(pDX,IDC_EDIT_ID,m_strId);

DDX_Text(pDX,IDC_EDIT_NAME,m_strName);

}

BEGIN_MESSAGE_MAP(CDbTestDlg, CDialog)

ON_WM_SYSCOMMAND()

ON_WM_PAINT()

ON_WM_QUERYDRAGICON()

//}}AFX_MSG_MAP

ON_BN_CLICKED(IDOK, &CDbTestDlg::OnBnClickedOk)

ON_BN_CLICKED(IDC_BUTTON1, &CDbTestDlg::OnBnClickedButton1)

ON_BN_CLICKED(IDC_BUTTON2, &CDbTestDlg::OnBnClickedButton2)

ON_BN_CLICKED(IDC_BUTTON3, &CDbTestDlg::OnBnClickedButton3)

END_MESSAGE_MAP()

// CDbTestDlg 消息处理程序

BOOL CDbTestDlg::OnInitDialog()

{

CDialog::OnInitDialog();

// 将“关于...”菜单项添加到系统菜单中。

// IDM_ABOUTBOX 必须在系统命令范围内。

ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);

ASSERT(IDM_ABOUTBOX < 0xF000);

CMenu* pSysMenu = GetSystemMenu(FALSE);

if (pSysMenu != NULL)

{

CString strAboutMenu;

strAboutMenu.LoadString(IDS_ABOUTBOX);

if (!strAboutMenu.IsEmpty())

{

pSysMenu->AppendMenu(MF_SEPARATOR);

pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);

}

}

// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动

// 执行此操作

SetIcon(m_hIcon, TRUE); // 设置大图标

SetIcon(m_hIcon, FALSE); // 设置小图标

// TODO: 在此添加额外的初始化代码

m_pConnection.CreateInstance(_T("ADODB.Connection"));

CString sql;

sql.Format(_T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Employee.mdb"));

m_pConnection->Open((_bstr_t)sql,_T(""),_T(""),adModeUnknown);

return TRUE; // 除非将焦点设置到控件,否则返回 TRUE

}

void CDbTestDlg::OnSysCommand(UINT nID, LPARAM lParam)

{

if ((nID & 0xFFF0) == IDM_ABOUTBOX)

{

CAboutDlg dlgAbout;

dlgAbout.DoModal();

}

else

{

CDialog::OnSysCommand(nID, lParam);

}

}

// 如果向对话框添加最小化按钮,则需要下面的代码

// 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,

// 这将由框架自动完成。

void CDbTestDlg::OnPaint()

{

if (IsIconic())

{

CPaintDC dc(this); // 用于绘制的设备上下文

SendMessage(WM_ICONERASEBKGND, reinterpret_cast(dc.GetSafeHdc()), 0);

// 使图标在工作矩形中居中

int cxIcon = GetSystemMetrics(SM_CXICON);

int cyIcon = GetSystemMetrics(SM_CYICON);

CRect rect;

GetClientRect(&rect);

int x = (rect.Width() - cxIcon + 1) / 2;

int y = (rect.Height() - cyIcon + 1) / 2;

// 绘制图标

dc.DrawIcon(x, y, m_hIcon);

}

else

{

CDialog::OnPaint();

}

}

//当用户拖动最小化窗口时系统调用此函数取得光标显示。

//

HCURSOR CDbTestDlg::OnQueryDragIcon()

{

return static_cast(m_hIcon);

}

void CDbTestDlg::OnBnClickedOk()

{

// TODO: 在此添加控件通知处理程序代码

//OnOK();

UpdateData();

CString sql;

m_pRecord.CreateInstance(_T("ADODB.Recordset"));

sql.Format(_T("SELECT * FROM [employee] WHERE id = '%s' ORDER BY [employee].id"),m_strId);

m_pRecord->Open(_bstr_t(sql),

_variant_t((IDispatch*)m_pConnection,true),

adOpenDynamic,adLockOptimistic,adCmdText);

_variant_t varId,varName;

varName = m_pRecord->GetCollect(_T("name"));

m_strName = (TCHAR *)_bstr_t(varName);

UpdateData(FALSE);

}

void CDbTestDlg::OnBnClickedButton1()//添加

{

// TODO: 在此添加控件通知处理程序代码

UpdateData();

CString sql;

m_pRecord.CreateInstance(_T("ADODB.Recordset"));

sql.Format(_T("SELECT * FROM [employee] WHERE id = '%s' ORDER BY [employee].id"),m_strId);

m_pRecord->Open(_bstr_t(sql),

_variant_t((IDispatch*)m_pConnection,true),

adOpenDynamic,adLockOptimistic,adCmdText);

try

{

// 写入各字段值

m_pRecord->AddNew();

m_pRecord->PutCollect("id", _variant_t(m_strId));

m_pRecord->PutCollect("name", _variant_t(m_strName));

m_pRecord->Update();

AfxMessageBox(_T("添加成功!"));

}

catch(_com_error *e)

{

AfxMessageBox(e->ErrorMessage());

}

UpdateData(FALSE);

}

void CDbTestDlg::OnBnClickedButton2()//修改

{

// TODO: 在此添加控件通知处理程序代码

UpdateData();

CString sql;

m_pRecord.CreateInstance(_T("ADODB.Recordset"));

sql.Format(_T("SELECT * FROM [employee] WHERE id = '%s' ORDER BY [employee].id"),m_strId);

m_pRecord->Open(_bstr_t(sql),

_variant_t((IDispatch*)m_pConnection,true),

adOpenDynamic,adLockOptimistic,adCmdText);

try

{

// 假设对第二条记录进行修改

m_pRecord->MoveFirst();

m_pRecord->Move(1); // 从0开始

m_pRecord->PutCollect("id", _variant_t(m_strId));

m_pRecord->PutCollect("name", _variant_t(m_strName));

m_pRecord->Update();

AfxMessageBox(_T("修改成功!"));

}

catch(_com_error *e)

{

AfxMessageBox(e->ErrorMessage());

}

UpdateData(FALSE);

}

void CDbTestDlg::OnBnClickedButton3()//删除

{

// TODO: 在此添加控件通知处理程序代码

UpdateData();

CString sql;

m_pRecord.CreateInstance(_T("ADODB.Recordset"));

sql.Format(_T("SELECT * FROM [employee] WHERE id = '%s' ORDER BY [employee].id"),m_strId);

m_pRecord->Open(_bstr_t(sql),

_variant_t((IDispatch*)m_pConnection,true),

adOpenDynamic,adLockOptimistic,adCmdText);

try

{

// 假设删除第二条记录

m_pRecord->MoveFirst();

m_pRecord->Move(1); // 从0开始

m_pRecord->Delete(adAffectCurrent); // 参数adAffectCurrent为删除当前记录

m_pRecord->Update();

AfxMessageBox(_T("删除成功!"));

}

catch(_com_error *e)

{

AfxMessageBox(e->ErrorMessage());

}

UpdateData(FALSE);

}

2Q==

已赞过

已踩过<

你对这个回答的评价是?

评论

收起

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值