社区
数据库
帖子详情
请问怎么才能接获CRecordset::Open()的异常?
elyta
2004-03-25 01:55:35
我想说如果数据库文件不在默认路径下时,不想让它出现那个让你选择数据库的对话框。可是,我用下面的方法截不住:
try
{
m_Set.Open(CRecordset::snapshot,
_T( "Select * from Mybase" ));
}
catch(CDBException* e)
{
AfxMessageBox("数据库连接失败!");
e->Delete();
}
...全文
35
3
打赏
收藏
请问怎么才能接获CRecordset::Open()的异常?
我想说如果数据库文件不在默认路径下时,不想让它出现那个让你选择数据库的对话框。可是,我用下面的方法截不住: try { m_Set.Open(CRecordset::snapshot, _T( "Select * from Mybase" )); } catch(CDBException* e) { AfxMessageBox("数据库连接失败!"); e->Delete(); }
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
elyta
2004-03-25
打赏
举报
回复
yangang000(风),
倒是看到这样一个例子,
CDatabase m_dbCust;
m_dbCust.OpenEx( _T( "DSN=MYDATASOURCE;UID=JOES" ),
CDatabase::openReadOnly |
CDatabase::noOdbcDialog );
但是CRecordSet就没有这样的用法 ^^"
DebugXP
2004-03-25
打赏
举报
回复
catch(...)
{
...
}
yangang000
2004-03-25
打赏
举报
回复
那个不是异常!
好像是在建立连接时可以控制!
图书查询功能的实现
3. 修改记录 函数
CRecordSet
::Edit可以用来修改记录,例如: m_pSet->Edit(); // 修改当前记录 m_pSet->m_name="刘向东"; // 修改当前记录字段值 ...... m_pSet->Update(); // 将修改结果存入数据库 4. 撤消操作 如果用户在进行增加或者修改记录后,希望放弃当前操作,则在调用
CRecordSet
::Update()函数之前调用
CRecordSet
::Move(AFX_MOVE_REFRESH)来撤消操作, 便可恢复在增加或修改操作之前的当前记录。
一个好用的ODBC数据库类CMYODBC
感觉MFC的
CRecordset
类不是很好用,因为我们要想使用的话必须为每个查询从
CRecordset
类派生出一个新类,或者进行动态数据交换。在VC知识库第六期上面有一篇介绍"单独使用
CRecordset
"文章,可是上面的
CRecordset
打开方式只能使用
CRecordset
::forwardOnly,游标只能向前滚动,而且用这种方式,你根本无法从打开的记录集中
获
得本次查询得到了有多少列。有一次在应用的时候,我只好通过捕
获
CRecordset
::GetFieldValue()的
异常
来得到查询的结果有多少列。为了使用的方便,我自己写了一个数据库类CMYODBC,它是用ODBC API写的,它支持各种sql语句,支持事务处理。它最好的地方在于,对于查询的记录集实现了动态绑定,这是通过类CODBCSet来实现的。
数据库课程设计 人事管理系统(我从我同学那搞来得)
IMPLEMENT_DYNCREATE(CAddView, CFormView) CAddView::CAddView() : CFormView(CAddView::IDD) { //{{AFX_DATA_INIT(CAddView) m_strID = _T(""); m_strPasswd = _T(""); m_strName = _T(""); m_strBirthday = _T(""); m_strDepartment = _T(""); m_strJob = _T(""); m_strEdulevel = _T(""); m_strSpecialty = _T(""); m_strAddress = _T(""); m_strTel = _T(""); m_strEmail = _T(""); m_strMemo = _T(""); //}}AFX_DATA_INIT } CAddView::~CAddView() { } void CAddView::DoDataExchange(CDataExchange* pDX) { CFormView::DoDataExchange(pDX); //{{AFX_DATA_MAP(CAddView) DDX_Control(pDX, IDC_ADD_CMB_EDULEVEL, m_cEdulevel); DDX_Control(pDX, IDC_ADD_CMB_JOB, m_cJob); DDX_Control(pDX, IDC_ADD_CMB_DEPARTMENT, m_cDepartment); DDX_Text(pDX, IDC_ADD_EDT_ID, m_strID); DDX_Text(pDX, IDC_ADD_EDT_PASSWD, m_strPasswd); DDX_Text(pDX, IDC_ADD_EDT_NAME, m_strName); DDX_Text(pDX, IDC_ADD_EDT_BIRTHDAY, m_strBirthday); DDX_CBString(pDX, IDC_ADD_CMB_DEPARTMENT, m_strDepartment); DDX_CBString(pDX, IDC_ADD_CMB_JOB, m_strJob); DDX_CBString(pDX, IDC_ADD_CMB_EDULEVEL, m_strEdulevel); DDX_Text(pDX, IDC_ADD_EDT_SPECIALTY, m_strSpecialty); DDX_Text(pDX, IDC_ADD_EDT_ADDRESS, m_strAddress); DDX_Text(pDX, IDC_ADD_EDT_TEL, m_strTel); DDX_Text(pDX, IDC_ADD_EDT_EMAIL, m_strEmail); DDX_Text(pDX, IDC_ADD_EDT_MEMO, m_strMemo); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CAddView, CFormView) //{{AFX_MSG_MAP(CAddView) ON_BN_CLICKED(IDC_ADD_BTN_ADD, OnAddBtnAdd) ON_WM_DESTROY() //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CAddView diagnostics #ifdef _DEBUG void CAddView::AssertValid() const { CFormView::AssertValid(); } void CAddView::Dump(CDumpContext& dc) const { CFormView::Dump(dc); } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // CAddView message handlers void CAddView::OnInitialUpdate() { CFormView::OnInitialUpdate(); // 使框架窗口大小与视图匹配 GetParentFrame()->RecalcLayout(); ResizeParentToFit(FALSE); GetParentFrame()->SetWindowText("增加新员工"); // 设置标题
CRecordset
rs(&db); // 数据集 CString str; // 设置部门下拉框所取的值为DEPARTMENT表中的值 rs.
Open
(
CRecordset
::forwardOnly, "select NAME from DEPARTMENT"); while(!rs.IsEOF()) { rs.GetFieldValue("NAME", str); m_cDepartment.AddString(str); rs.MoveNext(); } rs.Close(); // 设置职务下拉框所取的值为JOB表中的值 rs.
Open
(
CRecordset
::forwardOnly, "select DESCRIPTION from JOB"); while(!rs.IsEOF()) { rs.GetFieldValue("DESCRIPTION", str); m_cJob.AddString(str); rs.MoveNext(); } rs.Close(); // 设置受教育水平下拉框所取的值为EDU_LEVEL表中的值 rs.
Open
(
CRecordset
::forwardOnly, "select DESCRIPTION from EDU_LEVEL"); while(!rs.IsEOF()) { rs.GetFieldValue("DESCRIPTION", str); m_cEdulevel.AddString(str); rs.MoveNext(); } rs.Close(); Init(); // 调用初始化函数 } void CAddView::OnAddBtnAdd() { CString str,strSQL; int counter; // 用于计数
CRecordset
rs(&db); // 数据集 UpdateData(); // 更新数据 if(m_strName.IsEmpty()) // 姓名为空则返回 { AfxMessageBox("姓名不能为空!"); return; } // 累加员工编号计数器 rs.
Open
(
CRecordset
::forwardOnly, "select COUNTER_VALUE from COUNTER where ID='P'"); rs.GetFieldValue("COUNTER_VALUE", str); sscanf(str, "%d", &counter); //
获
取计数值 rs.Close(); // 关闭数据集 counter++; // 计数值加1 str.Format("%d", counter); // 转换为字符串 strSQL="update COUNTER set COUNTER_VALUE=" + str + " where ID='P'"; // 设置SQL语句 db.ExecuteSQL(strSQL); // 执行 // 增加员工个人信息记录 CString strPasswd,strSex,strDepID,strJobID,strEduID; // 判断生日是否为空 if(m_strBirthday.IsEmpty()) m_strBirthday="1900-1-1"; // 缺省值 // 加密密码 strPasswd=CCrypt::Encrypt(m_strPasswd, 123); // 判断性别 if(((CButton*)GetDlgItem(IDC_ADD_RADIO_MALE))->GetCheck()) strSex="M"; else strSex="F"; // 得到部门ID rs.
Open
(
CRecordset
::forwardOnly, "select ID from DEPARTMENT where NAME='" + m_strDepartment +"'"); rs.GetFieldValue("ID", strDepID); rs.Close(); // 得到职务代码 rs.
Open
(
CRecordset
::forwardOnly, "select CODE from JOB where DESCRIPTION='" + m_strJob +"'"); rs.GetFieldValue("CODE", strJobID); rs.Close(); // 得到受教育水平代码 rs.
Open
(
CRecordset
::forwardOnly, "select CODE from EDU_LEVEL where DESCRIPTION='" + m_strEdulevel +"'"); rs.GetFieldValue("CODE", strEduID); rs.Close(); // 写SQL语句 strSQL="insert into PERSON(ID,PASSWD,NAME,SEX,\ BIRTHDAY,DEPARTMENT,JOB,EDU_LEVEL,SPECIALTY,\ ADDRESS,TEL,EMAIL,REMARK) \ values('" + m_strID + "','" // ID + strPasswd + "','" // PASSWD + m_strName + "','" // NAME + strSex + "','" // SEX + m_strBirthday + "','" // BIRTHDAY + strDepID + "','" // DEPARTMENT + strJobID + "','" // JOB + strEduID + "','" // EDU_LEVEL + m_strSpecialty + "','" // SPECIALTY + m_strAddress + "','" // ADDRESS + m_strTel + "','" // TEL + m_strEmail + "','" // EMAIL + m_strMemo + "')"; // REMARK db.ExecuteSQL(strSQL); // 执行 //
获
取人事变动记录号并累加 rs.
Open
(
CRecordset
::forwardOnly,
VC_MFC中
CRecordset
类详解
CRecordset
类的详细说明和MFC中使用
CRecordset
类的详细方法
CRecordset
有关的代码
有点小问题,如果是一个表格的数据库就可以用,希望大虾能给点指点
数据库
4,012
社区成员
39,817
社区内容
发帖
与我相关
我的任务
数据库
VC/MFC 数据库
复制链接
扫一扫
分享
社区描述
VC/MFC 数据库
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章