📄 s17_02dlg.cpp
字号:
// S17_02Dlg.cpp : 实现文件
//
#include "stdafx.h"
#include "S17_02.h"
#include "S17_02Dlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// 用于应用程序“关于”菜单项的 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()
// CS17_02Dlg 对话框
CS17_02Dlg::CS17_02Dlg(CWnd* pParent /*=NULL*/)
: CDialog(CS17_02Dlg::IDD, pParent)
, m_IsConnectionOpen(false)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_pAdoRecordBinding = NULL;
}
void CS17_02Dlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_LIST1, m_ctlList);
}
BEGIN_MESSAGE_MAP(CS17_02Dlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_WM_DESTROY()
ON_BN_CLICKED(IDC_QUERY, OnBnClickedQuery)
ON_BN_CLICKED(IDC_ADDNEW, OnBnClickedAddnew)
ON_BN_CLICKED(IDC_UPDATE, OnBnClickedUpdate)
ON_BN_CLICKED(IDC_DELETE, OnBnClickedDelete)
END_MESSAGE_MAP()
// CS17_02Dlg 消息处理程序
BOOL CS17_02Dlg::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:在此添加额外的初始化代码
HRESULT hr;
_bstr_t bstrQuery("SELECT * FROM 客户");
_variant_t vRecsAffected(0L);
_variant_t vNull;
vNull.vt = VT_ERROR;
vNull.scode = DISP_E_PARAMNOTFOUND;
try
{
// 创建连接对象, 打开数据源连接
hr = m_pConnection.CreateInstance( __uuidof(Connection) );
if( SUCCEEDED(hr) )
{
hr = m_pConnection->Open(
_bstr_t(L"DSN=CNorthwind;"),
//L"Provider=Microsoft.Jet.OLEDB.4.0; \
// Data Source=e:\\visual studio projects\\vc++.net\\database\\CNorthwind.mdb;"),
_bstr_t(L""),
_bstr_t(L""),
adConnectUnspecified);
if( SUCCEEDED(hr) )
{
// 打开记录集对象
hr = m_pRecordset.CreateInstance(__uuidof(Recordset));
if( SUCCEEDED(hr) )
{
m_pRecordset->PutRefActiveConnection(m_pConnection);
hr = m_pRecordset->Open(_variant_t(bstrQuery), vNull,
adOpenDynamic, adLockOptimistic, adCmdText);
if( SUCCEEDED(hr) )
{
// 获取记录绑定接口
m_pRecordset.QueryInterface(__uuidof(IADORecordBinding), (LPVOID*)&m_pAdoRecordBinding);
m_pAdoRecordBinding->BindToRecordset(&m_rsCustomers);
m_IsConnectionOpen = true;
}
}
}
}
}
// 错误处理, 使用HRESULT的封装类: _com_error
catch( _com_error &e )
{
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());
TRACE("Exception thrown for classes generated by #import");
TRACE("\tCode = %08lx\n", e.Error);
TRACE("\tCode meaning = %s\n", e.ErrorMessage);
TRACE("\tSource = %s\n", (LPCTSTR)bstrSource);
TRACE("\tDescription = %s\n", (LPCTSTR)bstrDescription);
}
catch(...)
{
TRACE("* * * Unhandled Exception * * *");
}
// 初始化对话框控件
m_ctlList.AddColumn("Column1", 0);
m_ctlList.AddColumn("Column2", 1);
m_ctlList.AddColumn("Column3", 2);
m_ctlList.AddItem(0, 0, "Row1");
m_ctlList.AddItem(1, 0, "Row2");
UpdateData(FALSE);
return TRUE; // 除非设置了控件的焦点,否则返回 TRUE
}
void CS17_02Dlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// 如果向对话框添加最小化按钮,则需要下面的代码
// 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
// 这将由框架自动完成。
void CS17_02Dlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(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 CS17_02Dlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
void CS17_02Dlg::OnDestroy()
{
CDialog::OnDestroy();
if( m_IsConnectionOpen ) {
m_IsConnectionOpen = false;
m_pConnection->Close(); // 将关闭连接对象和它相关联的ADO对象,象记录集对象m_pRecordset
m_pConnection = NULL;
m_pRecordset = NULL; //
}
//if( m_pRecordset ) {
// m_pRecordset->Close();
// m_pRecordset = NULL;
//}
if( m_pAdoRecordBinding ) {
m_pAdoRecordBinding->Release();
m_pAdoRecordBinding = NULL;
}
}
void CS17_02Dlg::OnBnClickedQuery()
{
try
{
m_pRecordset->MoveFirst();
if( !m_pRecordset->GetadoEOF() )
{
m_ctlList.DeleteAllItems(); // 删除所有项目(行)
while( m_ctlList.DeleteColumn(0)); // 删除所有字段(列)
m_ctlList.AddColumn("客户ID", 0);
m_ctlList.AddColumn("公司名称", 1);
m_ctlList.AddColumn("联系人", 2);
m_ctlList.AddColumn("联系人职位", 3);
m_ctlList.AddColumn("地址", 4);
m_ctlList.AddColumn("城市", 5);
m_ctlList.AddColumn("电话", 6);
int i=0;
_variant_t vCustID; // 客户ID
_variant_t vCompName; // 公司名称
_variant_t vLinkMan; // 联系人姓名
_variant_t vLinkManPos; // 联系人职务
_variant_t vAddress; // 地址
_variant_t vCity; // 城市
_variant_t vTelephone; // 电话
while( !m_pRecordset->GetadoEOF() )
{
vCustID = m_pRecordset->GetCollect(L"客户ID");
m_ctlList.AddItem(i, 0, (_bstr_t)vCustID);
vCompName = m_pRecordset->GetCollect(L"公司名称");
m_ctlList.AddItem(i, 1, (_bstr_t)vCompName);
vLinkMan = m_pRecordset->GetCollect(L"联系人姓名");
m_ctlList.AddItem(i, 2, (_bstr_t)vLinkMan);
vLinkManPos = m_pRecordset->GetCollect(L"联系人职务");
m_ctlList.AddItem(i, 3, (_bstr_t)vLinkManPos);
vAddress = m_pRecordset->GetCollect(L"地址");
m_ctlList.AddItem(i, 4, (_bstr_t)vAddress);
vCity = m_pRecordset->GetCollect(L"城市");
m_ctlList.AddItem(i, 5, (_bstr_t)vCity);
vTelephone = m_pRecordset->GetCollect(L"电话");
m_ctlList.AddItem(i, 6, (_bstr_t)vTelephone);
i++;
m_pRecordset->MoveNext();
}
}
}
// 错误处理, 使用HRESULT的封装类: _com_error
catch( _com_error &e)
{
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());
TRACE("Exception thrown for classes generated by #import");
TRACE("\tCode = %08lx\n", e.Error);
TRACE("\tCode meaning = %s\n", e.ErrorMessage);
TRACE("\tSource = %s\n", (LPCTSTR)bstrSource);
TRACE("\tDescription = %s\n", (LPCTSTR)bstrDescription);
}
catch(...)
{
TRACE("* * * Unhandled Exception * * *");
}
}
void CS17_02Dlg::OnBnClickedAddnew()
{
try
{
//m_pRecordset->MoveLast();
//CreateBlankRecord();
//UpdateBoundData();
//if( m_pRecordset->Supports(adAddNew) )
// m_pAdoRecordBinding->AddNew(&m_rsCustomers);
if( m_pRecordset->adoEOF && m_pRecordset->BOF)
AfxMessageBox("记录集对象当前没有记录!");
else
m_pRecordset->MoveLast();
// 创建"客户"表的字段列表数组
COleSafeArray vaFieldlist;
vaFieldlist.CreateOneDim(VT_VARIANT, 11);
// 填写字段信息
long lIndex;
lIndex = 0; vaFieldlist.PutElement( &lIndex, &(_variant_t("客户ID")) );
lIndex = 1; vaFieldlist.PutElement( &lIndex, &(_variant_t("公司名称")) );
lIndex = 2; vaFieldlist.PutElement( &lIndex, &(_variant_t("联系人姓名")) );
lIndex = 3; vaFieldlist.PutElement( &lIndex, &(_variant_t("联系人职务")) );
lIndex = 4; vaFieldlist.PutElement( &lIndex, &(_variant_t("地址")) );
lIndex = 5; vaFieldlist.PutElement( &lIndex, &(_variant_t("城市")) );
lIndex = 6; vaFieldlist.PutElement( &lIndex, &(_variant_t("地区")) );
lIndex = 7; vaFieldlist.PutElement( &lIndex, &(_variant_t("邮政编码")) );
lIndex = 8; vaFieldlist.PutElement( &lIndex, &(_variant_t("国家")) );
lIndex = 9; vaFieldlist.PutElement( &lIndex, &(_variant_t("电话")) );
lIndex = 10; vaFieldlist.PutElement( &lIndex, &(_variant_t("传真")) );
// 创建字段值数组
COleSafeArray vaValuelist;
vaValuelist.CreateOneDim(VT_VARIANT, 11);
// 填写字段值信息
lIndex = 0; vaValuelist.PutElement( &lIndex, &(_variant_t("ZSYHN")) );
lIndex = 1; vaValuelist.PutElement( &lIndex, &(_variant_t("中国双子星软件有限公司")) );
//vaValuelist.GetElement( &lIndex, &vNull);
lIndex = 2; vaValuelist.PutElement( &lIndex, &(_variant_t("朱先生")) );
lIndex = 3; vaValuelist.PutElement( &lIndex, &(_variant_t("市场经理")) );
lIndex = 4; vaValuelist.PutElement( &lIndex, &(_variant_t("东风路27号")) );
lIndex = 5; vaValuelist.PutElement( &lIndex, &(_variant_t("张家界")) );
lIndex = 6; vaValuelist.PutElement( &lIndex, &(_variant_t("华中")) );
lIndex = 7; vaValuelist.PutElement( &lIndex, &(_variant_t("432700")) );
lIndex = 8; vaValuelist.PutElement( &lIndex, &(_variant_t("中国")) );
lIndex = 9; vaValuelist.PutElement( &lIndex, &(_variant_t("0744-8300596")) );
lIndex = 10; vaValuelist.PutElement( &lIndex, &(_variant_t("0744-8300596")) );
// 添加记录
if( m_pRecordset->Supports(adAddNew) )
m_pRecordset->AddNew(vaFieldlist, vaValuelist);
AfxMessageBox("添加记录成功!");
}
// 错误处理, 使用HRESULT的封装类: _com_error
catch( _com_error &e)
{
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());
TRACE("Exception thrown for classes generated by #import");
TRACE("\tCode = %08lx\n", e.Error);
TRACE("\tCode meaning = %s\n", e.ErrorMessage);
TRACE("\tSource = %s\n", (LPCTSTR)bstrSource);
TRACE("\tDescription = %s\n", (LPCTSTR)bstrDescription);
}
catch(...)
{
TRACE("* * * Unhandled Exception * * *");
}
}
void CS17_02Dlg::CreateBlankRecord(void)
{
CString strBlank = "";
strcpy(m_rsCustomers.m_CustomerID, strBlank);
strcpy(m_rsCustomers.m_CompanyName, strBlank);
strcpy(m_rsCustomers.m_ContactName, strBlank);
strcpy(m_rsCustomers.m_ContactTitle, strBlank);
strcpy(m_rsCustomers.m_Address, strBlank);
strcpy(m_rsCustomers.m_City, strBlank);
strcpy(m_rsCustomers.m_Region, strBlank);
strcpy(m_rsCustomers.m_PostalCode, strBlank);
strcpy(m_rsCustomers.m_Country, strBlank);
strcpy(m_rsCustomers.m_Phone, strBlank);
strcpy(m_rsCustomers.m_Fax, strBlank);
}
// 更新绑定记录数据.
void CS17_02Dlg::UpdateBoundData(void)
{
strcpy(m_rsCustomers.m_CustomerID, "ZSYHN");
strcpy(m_rsCustomers.m_CompanyName, "中国双子星软件有限公司");
strcpy(m_rsCustomers.m_ContactName, "朱先生");
strcpy(m_rsCustomers.m_ContactTitle, "市场经理");
strcpy(m_rsCustomers.m_Address, "东风路27号");
strcpy(m_rsCustomers.m_City, "张家界");
strcpy(m_rsCustomers.m_Region, "华中");
strcpy(m_rsCustomers.m_PostalCode, "432700");
strcpy(m_rsCustomers.m_Country, "中国");
strcpy(m_rsCustomers.m_Phone, "0744-8300596");
strcpy(m_rsCustomers.m_Fax, "0744-8300596");
}
void CS17_02Dlg::OnBnClickedUpdate()
{
//bstr_t bstrQuery("SELECT * FORM 客户 WHERE 客户ID=\'ZSYHN\'");
_variant_t vNull;
vNull.vt = VT_ERROR;
vNull.scode = DISP_E_PARAMNOTFOUND;
try
{
m_pRecordset->MoveLast();
m_pRecordset->PutCollect(L"公司名称", L"中国普科有限公司");
m_pRecordset->Update(vNull, vNull);
}
catch( _com_error &e )
{
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());
TRACE("Exception thrown for classes generated by #import");
TRACE("\tCode = %08lx\n", e.Error);
TRACE("\tCode meaning = %s\n", e.ErrorMessage);
TRACE("\tSource = %s\n", (LPCTSTR)bstrSource);
TRACE("\tDescription = %s\n", (LPCTSTR)bstrDescription);
}
catch(...)
{
TRACE("* * * Unhandled Exception * * *");
}
}
void CS17_02Dlg::OnBnClickedDelete()
{
_variant_t vNull;
vNull.vt = VT_ERROR;
vNull.scode = DISP_E_PARAMNOTFOUND;
try
{
m_pRecordset->MoveLast();
m_pRecordset->Delete(adAffectCurrent);
}
catch( _com_error &e )
{
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());
TRACE("Exception thrown for classes generated by #import");
TRACE("\tCode = %08lx\n", e.Error);
TRACE("\tCode meaning = %s\n", e.ErrorMessage);
TRACE("\tSource = %s\n", (LPCTSTR)bstrSource);
TRACE("\tDescription = %s\n", (LPCTSTR)bstrDescription);
}
catch(...)
{
TRACE("* * * Unhandled Exception * * *");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -