CDatabase::Open()的问题

fenex 2001-10-28 03:18:09
程序是SDI型的.
我想通过CDatabase::Open("xxx.mdb")在程序一运行时就打开一个指定的数据库文件.
我把调用语句放在构造函数里,但执行到这句就出错,提示"建立空文档失败".
这是为什么?
...全文
409 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
fenex 2001-10-29
  • 打赏
  • 举报
回复
如何在程序中建立数据源? 请指点。
ybudi 2001-10-29
  • 打赏
  • 举报
回复
不用安装程序,我记得在程序中可以建立数据源
还有,你是那个构造函数里用的Open(),从你初的问题来看,不象是没建立数据源的原因,因为若没建立数据源,集成环境应该提示你建立的
lownr 2001-10-28
  • 打赏
  • 举报
回复
如果使用MDB的话,可以使用CDaoDatabase,性能更好,使用和CDatabase是一样的。

AfxDaoInit();
CDaoDatabase conn;
conn.Open(TEXT("C:\\database.mdb"), TRUE);
conn.Close();
firehorizon 2001-10-28
  • 打赏
  • 举报
回复
gz
捕鲸叉 2001-10-28
  • 打赏
  • 举报
回复
gz
fenex 2001-10-28
  • 打赏
  • 举报
回复
谢谢你,zhang865(透明)。
不过我想用无绑定的方法。
zhang865 2001-10-28
  • 打赏
  • 举报
回复
你首先需要建立一个和MS ACCESS的数据源的连接的Recordset类,就可以打开了
suds 2001-10-28
  • 打赏
  • 举报
回复
我也想知道!
fenex 2001-10-28
  • 打赏
  • 举报
回复
可不可以具体点,谢谢!
另外最好无需用户选择、设置,而只打开我程序里预设的数据库文件。
maxlu 2001-10-28
  • 打赏
  • 举报
回复
可以用用户dsn或是connect string
fenex 2001-10-28
  • 打赏
  • 举报
回复
我找到答案了,CDatabase只能打开已经定义好的数据源.
不过,如果把我的程序和.mdb文件拷到别的机器上岂不是不能运行?应该如何解决?
是否可以通过安装程序解决呢?
老海小舟 2001-10-28
  • 打赏
  • 举报
回复
要直接打开mdb格式的文件需要 CDaoDatanase base.Open("xxx.mdb") CDatabase 不能直接打开 Access 格式的文件
wyzegg 2001-10-28
  • 打赏
  • 举报
回复
看看MSDN怎么说的
// shujukuDlg.cpp : implementation file // #include "stdafx.h" #include "shujuku.h" #include "shujukuDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CAboutDlg dialog used for App About class CAboutDlg : public CDialog { public: CAboutDlg(); // Dialog Data //{{AFX_DATA(CAboutDlg) enum { IDD = IDD_ABOUTBOX }; //}}AFX_DATA // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CAboutDlg) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: //{{AFX_MSG(CAboutDlg) //}}AFX_MSG DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) { //{{AFX_DATA_INIT(CAboutDlg) //}}AFX_DATA_INIT } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CAboutDlg) //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) //{{AFX_MSG_MAP(CAboutDlg) // No message handlers //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CShujukuDlg dialog CShujukuDlg::CShujukuDlg(CWnd* pParent /*=NULL*/) : CDialog(CShujukuDlg::IDD, pParent) { //{{AFX_DATA_INIT(CShujukuDlg) m_shuju = _T(""); //}}AFX_DATA_INIT // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CShujukuDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CShujukuDlg) DDX_Text(pDX, IDC_EDIT1, m_shuju); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CShujukuDlg, CDialog) //{{AFX_MSG_MAP(CShujukuDlg) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_WM_TIMER() //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CShujukuDlg message handlers BOOL CShujukuDlg::OnInitDialog() { CDial
添加用户流程图 用户输入有效用户名和密码后,单击确定,就可完成用户的添加,当用户名存在是,系统自动提示用"对不起,用户名已经存在,请重新输入用户名!"。 按钮核心代码为: } if (m_userpsw == "") { MessageBox("请输入密码"); //如果密码为空,则提示用户输入密码 return; } if (m_userpsw != m_userpsw2) { MessageBox("两次输入的密码不一样,请重新输入!"); //如果两次输入的密码不一致,则提示用户重新输入 return; } CString str,strSQL; strSQL="insert into userinf(username,userpassword) \ values(''" + m_username + "'',''" + m_userpsw + "'')"; db.ExecuteSQL(strSQL); // 执行SQL语句,将用户名和密码添加到userinf表中 6.1.2 用户修改窗体的建立 单击“用户管理/用户修改”菜单时,可弹出用户修改窗体,如图13所示: 图13 用户修改图 用户输入有效用户名和密码后,单击确定,就可完成用户的更新。 按钮核心代码为: …… ; db.ExecuteSQL(strSQL); // 执行SQL语句,修改userinf表中的该用户信息 6.1.3 用户删除窗体的建立 单击“用户管理/用户删除”菜单时,可弹出用户删除窗体,如图14所示: 图14 用户删除图 删除用户流程图如图15所示: 用户输入有效用户名和密码后,单击确定,就可完成用户的删除。如果用户名不存在,系统会弹出"对不起,用户信息输入有误,请重新输入用户名!"提示框。 图15 删除用户流程图 按钮核心代码为: sql.Format("select * from userinf where username=''%s''and userpassword=''%s'' ",m_username,m_userpsw); 图16 员工查询图 系统员工查询系统流程如图17所示: 图17 员工查询流程图 当输入有效的员工号,单击确定按钮,在列表中就显示出该员工各种信息,当输入的员工号不存在时,系统会提示“没有符合的信息记录!”。 按钮核心的代码为: …… Workerinf.m_strFilter = "workerid = ''"+m_workerid+"''"; //过滤字符串即查询条件 Workerinf.Open(); //获得有效的记录集 m_Listctr.DeleteAllItems(); } [10] ... >> 工资管理系统设计(论文+流程图+源代码+下载) 6.1.4 员工统计窗体的建立 单击“员工管理/员工统计”菜单,可弹出员工统计窗体,如图18所示: 图18 员工统计图 系统员工统计系统流程如图19所示: 图19 员工统计流程图 当输入有效的部门名,单击确定按钮,在列表中就显示出该该部门所有员工的各种信息。 按钮核心的代码为: …… Workerinf.m_strFilter = "departname = ''"+m_departname+"''"; //过滤字符串即查询条件 Workerinf.Open(); //获得有效的记录集 m_Listctr.DeleteAllItems(); Workerinf.Requery(); //开始查询 …… 6.1.5 员工更新窗体的建立 单击“员工管理/员工更新”菜单,可弹出员工更新窗体,如图20所示: 当输入有效的员工号,单击确定按钮,在列表中就显示该员工的各种信息。用户各种新的信息输入完成,单击修改按钮,完成员工信息的输入。 图20 员工更新图 员工信息更新系统流程如图21所示: 图21 员工更新流程图 按钮核心的代码为: …… MessageBox("对不起,该员工号不存在,请重新输入员工号!"); //弹出提示对话框 …… CString strSQL; strSQL="update workerinf set\ workerid=''" + m_id …… + "'' where workerid=''"

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧