ADO 操作access数据库

 

数据库一直没有接触过,由于工作需要,就进行了一些了解。从一开始找资料,到学会基本的编程,大概花了一个半月。其中找资料花的时间最多。这里我对这一个半月的学习进行总结,希望对新手有帮助,也作为资料留档供以后使用。

 

vc对数据的操作方式有ODBC DAO OLE/OB和ado等,一开始我都大概看了下,最后选择了ADO,这个是由于网上介绍,ADO比较有市场。这里大家可以查看<VC 数据库编程三部教学(基础、实践与高级) >这本书,SCDN上下得到,源码也有。可以做一个大概了解。个人感觉这本书不是很好,上面关于ADO的编程源码 我没有看,就看了ADO的介绍。在给大家介绍ADO编程很好的文章写的很详细《VC++中使用ADO方式操作ACCESS数据库》,这篇文章网上随便可以查到,写的很详细,代码也很全。对于ADO的介绍,网上很多也很详细。我这里不再介绍了,我主要对我自己写的程序进行解读。

 

程序中包括了连接数据库,存储,查询,修改等基本的功能。高手就没必看了,新人个人认为还是有参考价值的。我在优快云上浪费了很多积分,下载下来的程序,基本都没用的。最多的是连接数据库的,但其他操作的比较少。

ADO编程

第一步:导入支持库文件

在stdafx.h文件中

 

注意粗线的地方msado15.dll是需要的文件,一般在ado文件夹下面,最后要注意将eof重命名,命名可以自己设定。

 

第二步:初始化智能

这个接触过COM的肯定知道。在程序结束的地方需要加载

来关闭智能指针。这个只有记的就成,如果要了解,看看COM技术方面的资料,有详细介绍的。

 

第三步:连接数据库

这个try和catch的用法 不是很了解,不过貌似很有用的东西,以后要试着多使用使用。catch中的代码,我是抄一个老外的,也有比较简单的写法。

程序中主要的是

HRESULT hr = m_connect.CreateInstance(__uuidof(Connection)); 创建连接指针,其中m_connect为_ConnectionPtr类型。

_bstr_t strconnect =_bstr_t("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=设备管理.mdb");注意这个必须为_bstr_t 的类型。

m_connect->Open(strconnect,_bstr_t (""),_bstr_t (""),adModeUnknown);连接数据库。

open函数的参数为 第一个参数:可以为SQL语句,表名,或者命令对象:连接字符串由一系列被分隔符号的parameter = value来组成,如上述程序为例子。ADO可以连接很多数据源,如mysql等这边有个j牛逼的人物做个总结,连接为:http://www.codeproject.com/KB/database/connectionstrings.aspx

 

第二个参数:为useID 第三个参数为PAssWORD 我写的程序的数据没有权限所以没有这些。

最后一个为 Option:

  adModeUnknown:为缺省值  (现在我都用这个,具体的要以后多用了才有体会。)

  adModeRead:只读

  adModeWrite:只写

  adModeReadWrite:读写

  adModeShareRead:阻止其他Connection对象以读权限打开连接

  adModeShareWrite:阻止其他Connection对象以写权限打开连接

  adModeShareNone:阻止其他Connection对象以任何权限打开连接

  adModeShareShareExclusive:阻止其他Connection对象以读写权限打开连接

  adConnectUnspecifed:(默认值)同步打开连接

  adAsyncConnect:异步打开连接

上述我都是网上找的,就用到一个缺损的。

上述代码中没有问题的话,那你就连接数据库成功了。下面就是其他操作了。

 

第一 读数据:

       读写查询等都有2种方法,一种是ADO自带的函数,一种是执行SQL;程序中使用的是SQL的方法。这种个人感觉灵活一些,不过好学习SQL语言。

       SQL语言执行方法的总体都是一样的

1) 连接数据源。也就是上面代码实现的功能。

2) 定义并创建

   定义   _CommandPtr pCommand;//指向Command的指针
            _RecordsetPtr pRecordset;//指向Recordset的指针

   创建   HRESULT hr = pCommand.CreateInstance(__uuidof(Command));

                           hr = pRecordset.CreateInstance(__uuidof(Recordset));

3) 将Command的指针和数据源关联起来

       pCommand->ActiveConnection = m_connect;

4) 添加SQL语句

       pCommand->CommandText = (_bstr_t)sql;//你所有的操作差别都在SQL语句用;并注意一定是_bstr_t型的。

5) 执行SQL语句并返回记录集

       pRecordset=pCommand->Execute(NULL,NULL,adCmdText);

      注意有些SQL操作是没有记录集返回的 如 UPDATA; DELETE等

SQL读取记录集的语句

      sql = “SELECT * FROM [表名] WHERE 条件”

注意的是如果段名或者表名是中文或者含有 / 空格 等符号的需要用[]括起来

段名 表名 可以用别名的方式 如 sql="SELECT [段名] as name FROM date";

多个表名用“,”分开 如 sql = "SELECT [段名1] as name1, [段名2] as name2 FROM date";

还可以显示固定的条数   sql = "SELECT TOP 20 * FROM [表名]":表中的前20条记录

                                 sql = "SELECT TOP 20 PERCENT * FROM [表名]":表中的前20%条记录

程序中读取表的前一百条记录的代码
 

上述代码中注解的地方 需要注意一下;这些基本是我刚开始写出现过问题的地方。我上网查询,也有不少人出现过这样的错误。

 

第二 查询

       基本步骤和读取是一样的SQL的语句为

       sql="SELECT * FROM [表名] WHERE 条件";查询主要是设置 条件子语句

有条件符  >,<,>=,=<=,<>(取反),!>,!<等

 

范围运算符(判断表达式是否在指定范围)

       BETWEEN ... AND ...            ;NOT BETWEEN ... AND ... 

列表运算符(判断表达式是否在指定项中)

      IN(项1,项2 ...);NOT IN(项1,项2 ...);

模型匹配(判断是否与指定的字符通配格式符合)LINK , NOT LINK:(这个很有用,我程序中的查询都是用到他)

空值判断符(判断表达式是否为空):IS NULL,NOT IS NULL

 

模式匹配的通配符  %:表示任意类型和长度

               下划线   _ :匹配单个任意字符

                方括号  []:指定一个字符,字符串或范围,要求匹配对象为定值中的一个

                           [^]: 要求匹配对象为指定字符外的任意一个

如 LINK '%菜鸟%':就是读取所有含菜鸟字符的数据

 

(上述说明是在一个BOLG中看到的忘了 BLOG是哪位大N的 这里表示感谢。查网络学东西,比只啃书要快好多啊。)

 

程序代码

上面可以看出用sql执行方式,查询,读取基本都差不多,差别在于执行的sql语句;所有对于sql的学习才是以后学习的重点。

 

第三 添加

       sql=sql="INSERT INTO [表名] ([段名1],[段名2]...) VALUES ('值1','值二'...)";后面可以加条件

程序代码

注意的是 添加好像没有返回集的,反正我试者关闭返回集就报错。

 

第四 删除

        sql = "DELETE FROM [表名] WHERE [ID]= '值'";

需要注意的是如果 不限制条件,那么你整张表的所有数据都会被删除,这点和后面要说的修改是一样的;还有如何access自动生成的ID被删除后是不会再出现的,也就是说1~9中的8被删除,那么即使你添加 也是1~7 9~10这样的。一开始我在删除的时候,直接和listctrl获取的行数对于,就会出现错误的解决。后面改用获取ID值做为限制条件,解决问题。(这样的低价错误估计也就我这样的菜鸟才会犯)。

程序代码

 

第五 修改

        sql="UPDATE [设备] SET [段名]='值',[段名1]='值1' WHERE 条件"

需注意的是一定要加限制条件,不然你的整张表都将被同一值修改。

程序代码

 

上面可以看出 对于简单的数据库操作,ADO还是比较简单的,主要的都是一样的,唯独差别的是SQL语句。所以我个人感觉对于SQL本身的学习才是将来的重点。

当然ADO的一些其他操作,还要进一步学习才能了解。

上述代码的源程序在

http://download.youkuaiyun.com/source/2791099

希望各位大侠,指出错误。如果程序中有问题请提出指正。

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值