acmilan作者
11年7个月前IP:四川
769356
1楼
附上重要的程序源代码:
stdafx.h文件:
// stdafx.h : 标准系统包含文件的包含文件,
// 或是经常使用但不常更改的
// 特定于项目的包含文件
   
// ... 其它代码 ...
   
#include <afxdb.h></afxdb.h>
DataBaseTest1Dlg.h文件:
// DataBaseTest1Dlg.h : 头文件
//
   
#pragma once
#include "afxwin.h"
   
// CDataBaseTest1Dlg 对话框
class CDataBaseTest1Dlg : public CDialog
{
    // ... 其它代码 ...
public:
    CComboBox m_combobox;
    CDatabase m_dbfile;
   
    // ... 其它代码 ...
};
DataBaseTest1Dlg.cpp文件:
// DataBaseTest1Dlg.cpp : 实现文件
//
  
// ... 其它代码 ...
  
void CDataBaseTest1Dlg::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
    DDX_Control(pDX, IDC_COMBO1, m_combobox);
}
     
// ... 其它代码 ...
     
void CDataBaseTest1Dlg::OnBnClickedAdd()
{
    CString str1;
    m_combobox.GetWindowText(str1);
    if (str1 != "") {
        m_combobox.AddString(str1);
        m_combobox.SetWindowText("");
        SuspendDataToDB(); // 更新数据库
    }
}
     
void CDataBaseTest1Dlg::OnBnClickedDel()
{
    int cur = m_combobox.GetCurSel();
    if (cur >= 0) { // 返回-1则没有选择任何对象
        m_combobox.DeleteString(cur);
        SuspendDataToDB(); // 更新数据库
    }
}
     
void CDataBaseTest1Dlg::OnBnClickedDbopen()
{
    CString sDriver = "Microsoft Access Driver (*.mdb)"; // 数据库引擎
    CString sFile = "Database.mdb"; // 数据库路径
    CString sConnect;
     
    // 构造数据库的连接地址
    sConnect.Format("ODBC;DRIVER={%s};DSN='';DBQ=%s",sDriver,sFile);
     
    // 构造后的地址:"ODBC;DRIVER={Microsoft Access Driver (*.mdb)};DSN='';DBQ=Database.mdb"
         
    // 建议在try块中进行数据库操作
    try
    {
        // 打开数据库(简单用法)
        // 参数1是DSN地址,这里留空
        // 参数2是独占连接,默认为false
        // 参数3是只读连接,默认为false
        // 参数4是连接地址
        // 参数5是是否使用游标库,默认为true
        m_dbfile.Open(NULL, false, false, sConnect);
     
        // 更改标题栏
        SetWindowText("数据库测试:数据库已连接");
     
        // 加载数据库内容到程序
        LoadDataFromDB();
    }
    catch(CDBException &e) // 数据库失败时
    {
         AfxMessageBox("数据库连接失败,确认数据库Database.mdb是否在当前路径下!");
         return;
    }
         
}
     
void CDataBaseTest1Dlg::OnBnClickedDbclose()
{
    if (m_dbfile.IsOpen()) { // 如果数据库已打开
        m_dbfile.Close(); // 关闭数据库
        SetWindowText("数据库测试:数据库已断开");
    }
}
     
void CDataBaseTest1Dlg::OnClose()
{
    if (m_dbfile.IsOpen()) {
        m_dbfile.Close();
        SetWindowText("数据库测试:数据库已断开");
    }
     
    CDialog::OnClose();
}
     
void CDataBaseTest1Dlg::SuspendDataToDB(void)
{
    if (m_dbfile.IsOpen()) { // 数据库操作
        try {
            CString strSql;
     
            // 删除所有记录
            m_dbfile.ExecuteSQL("DELETE FROM datatable");
     
            for (int i=0; i<m_combobox.getcount(); i++) {                                       依次取得组合框中的字符串                 cstring temp;                 m_combobox.getlbtext(i, temp); 依次插入                 strsql.format("insert into datatable (id, context) values (%d, '%s');", i,                 m_dbfile.executesql(strsql);             }         } catch (cdbexception &e)     } }      void cdatabasetest1dlg::loaddatafromdb(void)     if (m_dbfile.isopen()) 数据库操作                       记录集,可以方便地操作记录 crecordset的应用十分广泛,用法参见微软msdn         crecordset recset(&m_dbfile); 需要一个select查询语句以打开记录集         cstring sqlstr="  "SELECT" context from order by id asc"; 打开记录集: 参数1是打开类型,有forwardonly、snapshot、dynaset、dynamic,默认为snapshot 参数2是sql语句 参数3是打开选项,这里是readonly,表示只读         recset.open(crecordset::forwardonly, sqlstr, crecordset::readonly); 先清空组合框         m_combobox.resetcontent();         while (!recset.iseof()) 通过 getfieldvalue("字段名", &str); 获取当前记录中各字段的数据             cstring             recset.getfieldvalue("context", 向组合框添加所取得的值             m_combobox.addstring(temp); 移向下一条记录             recset.movenext(); }< code></m_combobox.getcount();>
评论
文号 / 769356

千古风流
名片发私信
学术分 4
总主题 466 帖总回复 2942 楼拥有证书:进士 学者 笔友
注册于 2009/05/30 21:22:42最后登录 2019/01/31 17:16:38
主体类型:个人
所属领域:无
认证方式:邮箱
IP归属地:0

个人简介

暂未填写
笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的