您的位置:首页 > 其它

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

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: