社区
数据库
帖子详情
'CRecordset' : base class undefined什么意思呀
dwh7875
2003-08-30 12:05:43
'CRecordset' : base class undefined什么意思呀
Add New Class
CRecordset为基类
联接".mdb"ODBC数据库
什么都没干,
就报这个错误.真不明白了,
谁来指点一下吧.
...全文
412
2
打赏
收藏
'CRecordset' : base class undefined什么意思呀
'CRecordset' : base class undefined什么意思呀 Add New Class CRecordset为基类 联接".mdb"ODBC数据库 什么都没干, 就报这个错误.真不明白了, 谁来指点一下吧.
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
丁淇石头
2003-08-30
打赏
举报
回复
在StdAfx.h中加入
#ifndef _AFX_NO_DB_SUPPORT
#include <afxdb.h> // MFC ODBC database classes
#endif // _AFX_NO_DB_SUPPORT
canany1tellme
2003-08-30
打赏
举报
回复
你没有包含CRecordset需要的h文件
图书查询功能的实现
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来实现的。
db
class
.zip_array_ data
base
_crecordset
因为MFC完全支持数据库应用程序的开发,所以大多数数据库应用都使用CData
base
和CRecordset类,并且类向导(
Class
Wizard)提供了快速简易的方式来使用这两个类。有一点不足的就是当应用程序涉及到多表数据库时,类向导将产生大量的关于记录集的源码文件使得工程(project)给人的感觉很混乱。 这里介绍如何使用一个模板记录集类来降低类向导所产生的记录集文件的数量,同时增强记录积类(CRecordset)的功能。这个模板记录集类叫做:CDataSet。它的主要目的是降低代码量,为数据对象数组提供一个接口。
VC_MFC中CRecordset类详解
CRecordset类的详细说明和MFC中使用CRecordset类的详细方法
数据库课程设计 人事管理系统(我从我同学那搞来得)
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,
数据库
4,011
社区成员
39,816
社区内容
发帖
与我相关
我的任务
数据库
VC/MFC 数据库
复制链接
扫一扫
分享
社区描述
VC/MFC 数据库
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章