VC之ADO访问ACCESS数据库.doc_第1页
VC之ADO访问ACCESS数据库.doc_第2页
VC之ADO访问ACCESS数据库.doc_第3页
VC之ADO访问ACCESS数据库.doc_第4页
VC之ADO访问ACCESS数据库.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1.引入ADO类 #import c:program filescommon filessystemadomsado15.dll no_namespace rename (EOF, adoEOF)2.在资源视图里面添加按钮(如图,并设置相应的ID)及其他资源: 方法:打开Dialog对话框IDD_XPDLG_DIALOG 并加入一个Button,双击这个Button,生成该按钮单击处理函数。3.编辑CMyAccessApp类: A.在CMyAccessApp类里面初始化COM AfxOleInit(); m_pConnection.CreateInstance(_uuidof(Connection); 在ADO操作中建议语句中要常用try.catch()来捕获错误信息 try/ 打开本地Access库db1.mdbm_pConnection-ConnectionTimeout =5;m_pConnection-Open(Provider=Microsoft.Jet.OLEDB.4.0;DataSource=db1.mdb,adModeUnknown);catch(_com_error e)AfxMessageBox(TEXT(数据库连接失败,确认数据库db1.mdb是否在当前路径下!);/VS2005编译器只能写成AfxMessageBox(_T(test);才能使用return FALSE; (其中我的数据库的表名是dbtable,数据库是db1)附:常用的数据库连接方法:(1)通过JET数据库引擎对ACCESS2000数据库的连接m_pConnection-Open(Provider=Microsoft.Jet.OLEDB.4.0;DataSource=C:test.mdb,adModeUnknown);(2)通过DSN数据源对任何支持ODBC的数据库进行连接:m_pConnection-Open(Data Source=adotest;UID=sa;PWD=;,adModeUnknown);(3)不通过DSN对SQL SERVER数据库进行连接:m_pConnection-Open(driver=SQLServer;Server=;DATABASE=vckbase;UID=sa;PWD=139,adModeUnknown);其中 其中Server是SQL服务器的名称,DATABASE是库的名称 B.使用vc2005自带的重写函数ExitInstance() / 关闭ADO连接状态if(m_pConnection-State)m_pConnection-Close();m_pConnection= NULL; 4.在 CMyAccessDlg类里面编辑(): A.#import 包含后就可以用3个智能指针了:_ConnectionPtr、_RecordsetPtr和_CommandPtr 定义ADO连接、命令、记录集变量指针_ConnectionPtr m_pConnection;_CommandPtr m_pCommand;_RecordsetPtr m_pRecordset; 添加用于相应相应资源的变量: CListBox m_AccessList;CString m_Name;CString m_Age; 在DoDataExchange中添加代码处理消息: DDX_Control(pDX, IDOK, m_OK);DDX_Control(pDX, IDC_WRITEACCESS, m_Write);DDX_Control(pDX, IDC_READACCESS, m_Read);DDX_Control(pDX, IDC_MODIFY, m_Modify);DDX_Control(pDX, IDC_DELETE, m_Delete);DDX_Control(pDX, IDC_ABOUT, m_About);DDX_Control(pDX, IDC_LISTACCESS, m_AccessList);DDX_Text(pDX, IDC_NAME, m_Name);/bian ji kuang Name de ID wei IDC_NAMEDDV_MaxChars(pDX, m_Name, 10);/Name de ge shiDDX_Text(pDX, IDC_AGE, m_Age);bian ji kuang Age de ID wei IDC_AGEDDV_MaxChars(pDX, m_Age, 3);/Age de ge shi 在BEGIN_MESSAGE_MAP(CMyAccessDlg, CDialog)下面添加列表框处理函数 ON_LBN_SELCHANGE(IDC_LISTACCESS, OnSelchangeListaccess) (以下为数据库的操作-) (1).打开一个记录集: 首先创建一个_RecordsetPtr实例,然后调用Open()得到一条SQL语句的执行结果 /使用ADO创建数据库记录集m_pRecordset.CreateInstance(_uuidof(Recordset); / 在ADO操作中建议语句中要常用try.catch()来捕获错误信息, try m_pRecordset-Open(SELECT * FROM dbtable, / 查询DemoTable表中所有字段 theApp.m_pConnection.GetInterfacePtr(), / 获取库接库的IDispatch指针 adOpenDynamic, adLockOptimistic, adCmdText);catch(_com_error *e) AfxMessageBox(e-ErrorMessage(); (2).编辑Read按钮对应的函数 _variant_t var; CString strName,strAge; / 清空列表框 m_AccessList.ResetContent(); strName=strAge=; / 在ADO操作中建议语句中要常用try.catch()来捕获错误信息,try if(!m_pRecordset-BOF) m_pRecordset-MoveFirst(); else AfxMessageBox(TEXT(表内数据为空); return; / 读入库中各字段并加入列表框中while(!m_pRecordset-adoEOF) var = m_pRecordset-GetCollect(Name); if(var.vt != VT_NULL) strName = (LPCSTR)_bstr_t(var); var = m_pRecordset-GetCollect(Age); if(var.vt != VT_NULL) strAge = (LPCSTR)_bstr_t(var); m_AccessList.AddString( strName + - +strAge ); m_pRecordset-MoveNext(); / 默认列表指向第一项,同时移动记录指针并显示 m_AccessList.SetCurSel(0); OnSelchangeListaccess();/列表框处理函数catch(_com_error *e) AfxMessageBox(e-ErrorMessage(); (3).插入按钮对应函数编辑: UpdateData(); if(m_Name = | m_Age = ) AfxMessageBox(_T(姓名和年龄信息不能为空!); return;try / 写入各字段值 m_pRecordset-AddNew(); m_pRecordset-PutCollect(Name, _variant_t(m_Name); USES_CONVERSION; m_pRecordset-PutCollect(Age, atol(T2A(m_Age); m_pRecordset-Update(); AfxMessageBox(TEXT(插入成功!); / 更新显示其库内容 int nCurSel = m_AccessList.GetCurSel(); OnBnClickedReadaccess(); m_AccessList.SetCurSel(nCurSel); / 移动记录指针到新的位置 OnSelchangeListaccess();catch(_com_error *e) AfxMessageBox(e-ErrorMessage(); (4).删除按钮对应函数编辑: if(m_AccessList.GetCount() = 0)return; else if(m_AccessList.GetCurSel() m_AccessList.GetCount() m_AccessList.SetCurSel(0); try / 删除当前行记录m_pRecordset-Delete(adAffectCurrent);m_pRecordset-Update(); / 删除列表中当前值int nCurSel = m_AccessList.GetCurSel();m_AccessList.DeleteString(nCurSel);if(nCurSel = 0 & (m_AccessList.GetCount() != 0) m_AccessList.SetCurSel(nCurSel);else if(m_AccessList.GetCount() != 0) m_AccessList.SetCurSel(nCurSel-1);/ 移动记录指针到新的位置OnSelchangeListaccess();catch(_com_error *e) AfxMessageBox(e-ErrorMessage(); (5).修改按钮对应函数编辑 UpdateData(); / 更新对话框数据 if(m_AccessList.GetCount() = 0 | m_Name = | m_Age = ) AfxMessageBox(_T(表中记录数为空或姓名和年龄信息没有设置!);return; else if(m_AccessList.GetCurSel() m_AccessList.GetCount() m_AccessList.SetCurSel(0); / 修改当前记录的字段值 try m_pRecordset-PutCollect(Name, _variant_t(m_Name);/cannot convert parameter 1 from CString to const char */程序运行在Unicode模式下,解决CString convert to const char* 方法 USES_CONVERSION;m_pRecordset-PutCollect(Age, atol(T2A(m_Age);/m_pRecordset-PutCollect(Age, atol(m_Age);m_pRecordset-Update(); / 重新读入库记录更新显示int nCurSel = m_AccessList.GetCurSel(); OnBnClickedReadaccess();m_AccessList.SetCurSel(nCurSel);/ 移动记录指针到新的位置OnSelchangeListaccess();catch(_com_error *e) AfxMessageBox(e-ErrorMessage();(6).当每次选择新的记录时,都会移动指针到新的记录位置并将值显示出来用到OnSelchangeListaccess()函数,要自己建的 int curSel = m_AccessList.GetCurSel(); _variant_t var,varIndex; if(curSel MoveFirst();m_pRecordset-Move(long(curSel);var = m_pRecordset-GetCollect(Name);if(var.vt != VT_NULL) m_Name = (LPCSTR)_bstr_t(var);var = m_pRecordset-GetCollect(Age);if(var.vt != VT_NULL) m_Age = (LPCSTR)_bstr_t(var);UpdateData(false);catch(_com_error *e) AfxMessageBox(e-ErrorMessage();(7).如果要实现XP风格按钮可以看一下这个网页: /?action-viewnews-itemid-6260925.好了,编译运行一下喔,就可以看到效果了。ODBCODBC(Open Database Connectivity,开放数据库互连)是微软公司开放服务结构(WOSA,Windows Open Services Architecture)中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API(应用程序编程接口)。这些API利用SQL来完成其大部分任务。ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC。一个基于ODBC的应用程序对数据库的操作不依赖任何DBMS,不直接与DBMS打交道,所有的数据库操作由对应的DBMS的ODBC驱动程序完成。也就是说,不论是FoxPro、Access , MYSQL还是Oracle数据库,均可用ODBC API进行访问。由此可见,ODBC的最大优点是能以统一的方式处理所有的数据库。一个完整的ODBC由下列几个部件组成:应用程序(Application)。ODBC管理器(Administrator)。该程序位于Windows 95控制面板(Control Panel)的32位ODBC内,其主要任务是管理安装的ODBC驱动程序和管理数据源。驱动程序管理器(Driver Manager)。驱动程序管理器包含在ODBC32.DLL中,对用户是透明的。其任务是管理ODBC驱动程序,是ODBC中最重要的部件。ODBC API。ODBC 驱动程序。是一些DLL,提供了ODBC和数据库之间的接口。数据源。数据源包含了数据库位置和数据库类型等信息,实际上是一种数据连接的抽象。各部件之间的关系如图下图所示:应用程序要访问一个数据库,首先必须用ODBC管理器注册一个数据源,管理器根据数据源提供的数据库位置、数据库类型及ODBC驱动程序等信息,建立起ODBC与具体数据库的联系。这样,只要应用程序将数据源名提供给ODBC,ODBC就能建立起与相应数据库的连接。在ODBC中,ODBC API不能直接访问数据库,必须通过驱动程序管理器与数据库交换信息。驱动程序管理器负责将应用程序对ODBC API的调用传递给正确的驱动程序,而驱动程序在执行完相应的操作后,将结果通过驱动程序管理器返回给应用程序。在访问ODBC数据源时需要ODBC驱动程序的支持。用Visual C+ 5.0安装程序可以安装SQL Server、 Access、 Paradox、 dBase、 FoxPro、 Excel、 Oracle 和Microsoft Text等驱动程序在缺省情况下,VC5.0只会安装S

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论