MFC连ACCESS的相关操作(我的MFC做法)
2013-07-23 11:05
246 查看
授人以鱼不如授人以渔,
这篇文章主要会讲述我的MFC中几个地方做法,并不会将所有代码列出来(如有需要,可在资源下载)。//下载后 要重新整一下数据源 要不搜不到了
// 我用的是VC6.0
首先 建立一个MFC文件,然后建立ACCESS文件,并将两者连接起来
点击OK,在下一个界面选中第一个 单文档,然后FINISH就建立出来自己的单文档了。
建立一个ACCESS,取名然后点击进入
进入后选择用设计器创建表,
打入ID,Name,Score,当然你可以自己选择要建立什么样的表格,要注意每个表格类型要选好,比如成绩就要用数字类型,然后在下面常规中 将 长整型 变成 整型(节省下空间),最后不要忘记,将ID设为 主键,(主键就是你的所有内容中设为 唯一 的选项,就是该选项的数值不会有重复情况发生);
键入 表名,然后保存,——将该表存在所建立的MFC 文件夹下,
// 所有名字,都用英文,不用中文
然后,控制面板-> 管理工具->数据源(ODBC)->添加
然后在选择中,找到你的ACCESS文件,然后确定。
这样你的数据源已经建立,然后我们可以通过MFC中的 类 来连接这个数据源
//如果出现错误:不识别CRecordSet等,在View类 头文件中加: #include <afxdb.h>
打开你所创建的MFC,并选择 class view(类视图)
右键点击 上面的Tree classes(与起得文件名有关),选NEW CLASS
名字这些还是根据自己爱好取,但最好简洁明了
ODBC 选择自己的数据源名,Recordset type 选择 Dynaset-> OK->选择自己的表名
你的数据库与MFC类已经关联了
创建对话框
调整到资源视图,然后找到Dialog(别忘了,将文件夹前 + 号打开) 右键点击选择Insert_Dialog,
双击对话框(非按钮部分),则可以新建类来联系这个对话框->输入类名字->OK;再次双击对话框就
可以进去这个类。双击对话框中得Button 按钮可以新建一个函数,就是当你按下这个键位时,它所执行
的东西。
——将类与菜单栏联系:
这一步就是做到,当你点击菜单栏中某个按钮时,执行什么操作(或者 弹出什么对话框),在资源视图中点开Menu,然后单击 IDR_MAINFRAME ,这样就可以编辑你的菜单栏了,通过右键点击空白->properties,可以填写/修改 名称,或者直接左键选中空白,然后开始输入字符也可以达到修改的效果,这个名称可以用中文,但是ID(IDC/IDD)必须英文。例如我建立一个 添加 功能,
// 最好将ID写的清晰明了一些,因为后面要是做得类多了,都是根据名字来判断执行的功能,如果名字乱起,你后面
//一定会崩溃掉。
左键单击 菜单栏(最上面那一行) 中得View下拉菜单中 ClassWizard
然后OK->OK,然后在View类中编辑 弹出所需弹的对话框
这样你就可以通过点击菜单栏自己创建的按钮来弹出对话框了。
/* 为什么你按OK或CANCLE时,它会退出呢? 因为创建他们时都会 多一条语句,即:CDialog::OnCancel() or CDiaglog::OnOK(); 这些就会让他们在被点击时推出,如果你自己创建一个按钮,在它的函数中也加入这种语句,它也能达到对话框结束的效果。
终于讲完这些基础的了= =! 现在该说一些功能的实现了,“捕鱼之法”:
①数据库相关函数
数据库中每一个类型都在类中定义了,文本类型定义为CString,整型为int
点开自己的数据库类,可以在类中发现 ID为:CString m_ID,
同理:Name:CString m_Name;Score:int m_Score;
以我的为例,我的数据库相关类名为 MyDataBank;
所以 先建立一个它的对象:MyDataBank mdb;
打开数据库:mdb.Open();
加入新内容:mdb.AddNew();然后在进行赋值运算(如 mdb.m_Score=90;)
删除内容:mdb.Delete();
更新:mdb.Update();
关闭:mdb.Close();
过滤(查找):mdb.m_strFilter();用法:mdb.m_strFilter="ID='001'" or mdb.m_strFilter="Score=90";
CString类型必须加' '。
注: 如果要查找的是一个变量,则可以用下面这种方法:
CString str_temp,str; //str是变量
str_temp.Format("ID='%s'",str); // Format用法将在后面补充
mdb.m_strFilter=str_temp;
指针下移:mdb.MoveNext() // 当然还有指向头部,指向尾部 MoveFirst,MoveLast,注意在调用这些时最好带上
// IsEof() 来判断是否到达末尾,来避免越界问题
②在对话框 添加的 EditBox 按钮,实现 用户输入内容的提取或置数。(注意用指针,则要保证在函数内部,不能跨函数调用,可以将指针传过去)
置数 this->SetDlgItemText(所取的EditBox的ID,置的数(0)为空);
提取 this->GetDlgItemText(ID,将提取的值放入哪个变量中);// 一般这个变量是CString的,如果需要转换成整型
//就需要转换,可以用atoi函数,即 int a;
// a=atoi(str);
③实现 radio button 的 禁用状态 与 只能单选
单选: 先画出来一个 radio button,然后右键点击->properties,在下面那些选项中勾中 group
然后退出来,或者复制粘贴,或者选中 按住Ctrl 来复制,将复制出来的group都去掉,这样,
这一些radio button就成为单选的了,
禁用状态:初始禁用状态,可以在 右键->properties 中的disabled 设置,如果需要做到,按ID时,
ID后EditBox可用,其他不可用,就可以提取后面EditBox 指针,然后在ID函数(双击ID,形成一个函数)
设置指针所对应的窗口禁用,具体语句为:
CButton *pFID=(CButton*)GetDlgItem(ID后EditBox的IDC); //获取ID后面EditBox 指针
pFID->EnableWindow(TRUE); //TRUE为可用,FALSE为禁用
④:画图/输出,可以将所画的内容掉到 View类中ONDRAW函数,然后通过pDC指针来进行画图,
也可以在View类中别的函数画图,语句为:
CClientDC dc(this);
dc.函数;
若要输出数据可以用TextOut函数: dc.TextOut(x坐标,y坐标,所输出的字符串);
在别的类中所画的,都会被 最小化、最大化或者改变窗口大小而消失,因为每次窗口改变都会将ONDRAW的内容,重绘,因为我们没有在ONDRAW函数画图,所以会丢失,要想让图或数据不消失,要么将最大化这些按钮,改变窗口大小功能禁用(比较麻烦),要么就传到ONDRAW函数来进行绘制(常用);当然还可以在当前对话框开辟空间来进行 数据输出或画图。
*Format:
在MFC程序中,使用CString来处理字符串是一个很不错的选择。CString既可以处理Unicode标准的字符串,也可以处理ANSI标准的字符串。CString的Format方法给我们进行字符串的转换带来了很大的方便,比如常见的int、float和double这些数字类型转换为CString字符串只需一行代码就可以实现。
%c 单个字符
%d 十进制整数(int)
%ld 十进制整数(long)
%f 十进制浮点数(float)
%lf 十进制浮点数(double)
%o 八进制数
%s 字符串
%u 无符号十进制数
%x 十六进制数
int转换为CString:
CString str;
int number=15;
//str="15"
str.Format(_T("%d"),number);
//str=" 15"(前面有两个空格;4表示将占用4位,如果数字超过4位将输出所有数字,不会截断)
str.Format(_T("%4d"),number);
//str="0015"(.4表示将占用4位,如果数字超过4位将输出所有数字,不会截断)
str.Format(_T("%.4d"),number);
long转换为CString的方法与上面相似,只需要把%d改为%ld就可以了。
double转换为CString:
CString str;
double num=1.46;
//str="1.46"
str.Format(_T("%lf"),num);
//str="1.5"(.1表示小数点后留1位,小数点后超过1位则四舍五入)
str.Format(_T("%.1lf"),num);
//str="1.4600"
str.Format(_T("%.4f"),num);
//str=" 1.4600"(前面有1个空格)
str.Format(_T("%7.4f"),num);
float转换为CString的方法也同上面相似,将lf%改为f%就可以了。
将十进制数转换为八进制:
CString str;
int num=255;
//str="377"
str.Format(_T("%o"),num);
//str="00000377"
str.Format(_T("%.8o"),num);
取自百度经验:http://jingyan.baidu.com/article/335530da75054e19cb41c319.html
这篇文章主要会讲述我的MFC中几个地方做法,并不会将所有代码列出来(如有需要,可在资源下载)。//下载后 要重新整一下数据源 要不搜不到了
// 我用的是VC6.0
首先 建立一个MFC文件,然后建立ACCESS文件,并将两者连接起来
点击OK,在下一个界面选中第一个 单文档,然后FINISH就建立出来自己的单文档了。
建立一个ACCESS,取名然后点击进入
进入后选择用设计器创建表,
打入ID,Name,Score,当然你可以自己选择要建立什么样的表格,要注意每个表格类型要选好,比如成绩就要用数字类型,然后在下面常规中 将 长整型 变成 整型(节省下空间),最后不要忘记,将ID设为 主键,(主键就是你的所有内容中设为 唯一 的选项,就是该选项的数值不会有重复情况发生);
键入 表名,然后保存,——将该表存在所建立的MFC 文件夹下,
// 所有名字,都用英文,不用中文
然后,控制面板-> 管理工具->数据源(ODBC)->添加
然后在选择中,找到你的ACCESS文件,然后确定。
这样你的数据源已经建立,然后我们可以通过MFC中的 类 来连接这个数据源
//如果出现错误:不识别CRecordSet等,在View类 头文件中加: #include <afxdb.h>
打开你所创建的MFC,并选择 class view(类视图)
右键点击 上面的Tree classes(与起得文件名有关),选NEW CLASS
名字这些还是根据自己爱好取,但最好简洁明了
ODBC 选择自己的数据源名,Recordset type 选择 Dynaset-> OK->选择自己的表名
你的数据库与MFC类已经关联了
创建对话框
调整到资源视图,然后找到Dialog(别忘了,将文件夹前 + 号打开) 右键点击选择Insert_Dialog,
双击对话框(非按钮部分),则可以新建类来联系这个对话框->输入类名字->OK;再次双击对话框就
可以进去这个类。双击对话框中得Button 按钮可以新建一个函数,就是当你按下这个键位时,它所执行
的东西。
——将类与菜单栏联系:
这一步就是做到,当你点击菜单栏中某个按钮时,执行什么操作(或者 弹出什么对话框),在资源视图中点开Menu,然后单击 IDR_MAINFRAME ,这样就可以编辑你的菜单栏了,通过右键点击空白->properties,可以填写/修改 名称,或者直接左键选中空白,然后开始输入字符也可以达到修改的效果,这个名称可以用中文,但是ID(IDC/IDD)必须英文。例如我建立一个 添加 功能,
// 最好将ID写的清晰明了一些,因为后面要是做得类多了,都是根据名字来判断执行的功能,如果名字乱起,你后面
//一定会崩溃掉。
左键单击 菜单栏(最上面那一行) 中得View下拉菜单中 ClassWizard
然后OK->OK,然后在View类中编辑 弹出所需弹的对话框
这样你就可以通过点击菜单栏自己创建的按钮来弹出对话框了。
/* 为什么你按OK或CANCLE时,它会退出呢? 因为创建他们时都会 多一条语句,即:CDialog::OnCancel() or CDiaglog::OnOK(); 这些就会让他们在被点击时推出,如果你自己创建一个按钮,在它的函数中也加入这种语句,它也能达到对话框结束的效果。
终于讲完这些基础的了= =! 现在该说一些功能的实现了,“捕鱼之法”:
①数据库相关函数
数据库中每一个类型都在类中定义了,文本类型定义为CString,整型为int
点开自己的数据库类,可以在类中发现 ID为:CString m_ID,
同理:Name:CString m_Name;Score:int m_Score;
以我的为例,我的数据库相关类名为 MyDataBank;
所以 先建立一个它的对象:MyDataBank mdb;
打开数据库:mdb.Open();
加入新内容:mdb.AddNew();然后在进行赋值运算(如 mdb.m_Score=90;)
删除内容:mdb.Delete();
更新:mdb.Update();
关闭:mdb.Close();
过滤(查找):mdb.m_strFilter();用法:mdb.m_strFilter="ID='001'" or mdb.m_strFilter="Score=90";
CString类型必须加' '。
注: 如果要查找的是一个变量,则可以用下面这种方法:
CString str_temp,str; //str是变量
str_temp.Format("ID='%s'",str); // Format用法将在后面补充
mdb.m_strFilter=str_temp;
指针下移:mdb.MoveNext() // 当然还有指向头部,指向尾部 MoveFirst,MoveLast,注意在调用这些时最好带上
// IsEof() 来判断是否到达末尾,来避免越界问题
②在对话框 添加的 EditBox 按钮,实现 用户输入内容的提取或置数。(注意用指针,则要保证在函数内部,不能跨函数调用,可以将指针传过去)
置数 this->SetDlgItemText(所取的EditBox的ID,置的数(0)为空);
提取 this->GetDlgItemText(ID,将提取的值放入哪个变量中);// 一般这个变量是CString的,如果需要转换成整型
//就需要转换,可以用atoi函数,即 int a;
// a=atoi(str);
③实现 radio button 的 禁用状态 与 只能单选
单选: 先画出来一个 radio button,然后右键点击->properties,在下面那些选项中勾中 group
然后退出来,或者复制粘贴,或者选中 按住Ctrl 来复制,将复制出来的group都去掉,这样,
这一些radio button就成为单选的了,
禁用状态:初始禁用状态,可以在 右键->properties 中的disabled 设置,如果需要做到,按ID时,
ID后EditBox可用,其他不可用,就可以提取后面EditBox 指针,然后在ID函数(双击ID,形成一个函数)
设置指针所对应的窗口禁用,具体语句为:
CButton *pFID=(CButton*)GetDlgItem(ID后EditBox的IDC); //获取ID后面EditBox 指针
pFID->EnableWindow(TRUE); //TRUE为可用,FALSE为禁用
④:画图/输出,可以将所画的内容掉到 View类中ONDRAW函数,然后通过pDC指针来进行画图,
也可以在View类中别的函数画图,语句为:
CClientDC dc(this);
dc.函数;
若要输出数据可以用TextOut函数: dc.TextOut(x坐标,y坐标,所输出的字符串);
在别的类中所画的,都会被 最小化、最大化或者改变窗口大小而消失,因为每次窗口改变都会将ONDRAW的内容,重绘,因为我们没有在ONDRAW函数画图,所以会丢失,要想让图或数据不消失,要么将最大化这些按钮,改变窗口大小功能禁用(比较麻烦),要么就传到ONDRAW函数来进行绘制(常用);当然还可以在当前对话框开辟空间来进行 数据输出或画图。
*Format:
在MFC程序中,使用CString来处理字符串是一个很不错的选择。CString既可以处理Unicode标准的字符串,也可以处理ANSI标准的字符串。CString的Format方法给我们进行字符串的转换带来了很大的方便,比如常见的int、float和double这些数字类型转换为CString字符串只需一行代码就可以实现。
%c 单个字符
%d 十进制整数(int)
%ld 十进制整数(long)
%f 十进制浮点数(float)
%lf 十进制浮点数(double)
%o 八进制数
%s 字符串
%u 无符号十进制数
%x 十六进制数
int转换为CString:
CString str;
int number=15;
//str="15"
str.Format(_T("%d"),number);
//str=" 15"(前面有两个空格;4表示将占用4位,如果数字超过4位将输出所有数字,不会截断)
str.Format(_T("%4d"),number);
//str="0015"(.4表示将占用4位,如果数字超过4位将输出所有数字,不会截断)
str.Format(_T("%.4d"),number);
long转换为CString的方法与上面相似,只需要把%d改为%ld就可以了。
double转换为CString:
CString str;
double num=1.46;
//str="1.46"
str.Format(_T("%lf"),num);
//str="1.5"(.1表示小数点后留1位,小数点后超过1位则四舍五入)
str.Format(_T("%.1lf"),num);
//str="1.4600"
str.Format(_T("%.4f"),num);
//str=" 1.4600"(前面有1个空格)
str.Format(_T("%7.4f"),num);
float转换为CString的方法也同上面相似,将lf%改为f%就可以了。
将十进制数转换为八进制:
CString str;
int num=255;
//str="377"
str.Format(_T("%o"),num);
//str="00000377"
str.Format(_T("%.8o"),num);
取自百度经验:http://jingyan.baidu.com/article/335530da75054e19cb41c319.html
相关文章推荐
- ACCESS相关的保留字 - 操作ACCESS数据库,报INSERT INTO 语句的语法错误
- MFC 相关文件夹、文件操作
- 有一种程序架构是介于C/S和B/S之间的,通常的做法是Windows Form系统在程序中访问Web Form页面来完成相关模块的操作,比如招行网银系统。
- MFC & ODBC 的相关操作
- MFC读写文件相关操作
- C#连接access及相关操作
- .NET 实现在百度、谷歌中相关操作的做法
- MFC 打印相关操作
- MFC对话框与任务栏相关操作
- MFC中使用ADO操作各类数据库的封装类,包括MySql、Access、Oracle、MSSql
- MFC 对MYSQL数据库相关操作
- MFC学习笔记之程序外观相关操作
- MFC一些相关的操作技巧,网络收集
- MFC中使用ADO操作各类数据库的封装类,包括MySql、Access、Oracle、MSSql
- 关于 ACCESS 中插入操作的相关内容
- MFC通过COM接口实现PPT相关操作
- 关于MFC里面位图相关的操作
- MFC文件操作相关
- 以前实习期间写的一段mfc编程,对数据库和xml格式文档的相关操作 主要相关代码 之一连接数据库
- MFC 文件及其属性相关操作 (MFC 文件操作 三)