设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 15198|回复: 4

[ADO/DAO] 【新手入门】之十二:浅谈ADO之Connection

[复制链接]
发表于 2014-11-12 10:29:39 | 显示全部楼层 |阅读模式
       ADO有五个子集。分别是Connection(连接)、Command(命令)、Recordset(记录集)、Record(记录)和Stream(数据流)。
现在,开始谈谈连接对象。
       连接对象为用户定义数据源的会话,用于建立起数据源与当前程序之间的链接。这些数据源包括多种类型,例如SQL Server、Access、Oracle,甚至Excel数据表和文本文件等等。
       前期绑定(即引用ADO库)后,在当前数据库中,我们可以用CurrentProject.Connection来建立数据连接。事实上,我们常常都是把这一句作为打开记录集的一个参数来用的。例如,Rst.Open strSQL, CurrentProject.Connection,adOpenKeyset,AdLockOptimistic
       但是使用外部数据库时就不能使用这个方法,而必须使用常规方法了。通常可以通过下面的方法来创建一个连接:
  1. Dim cnn As ADODB.Connection
  2. Set cnn=New ADODB.Connection
复制代码
       或者用New关键字来创建一个连接:
  1. Dim cnn As New ADODB.Connection
复制代码
        虽然不建议后期绑定,这里还是给出所对应的后期绑定语句:

  1. Dim cnn As Object
  2. Set cnn=CreateObject(“ADODB.Connection”)
复制代码
       建立好连接之后,还需要为连接指定相应属性:引擎提供者,数据源位置,数据类型,用户ID和密码(这一点在安全性更高的SQLServer中最为常用)。例如:
  1. Cnn.Open “Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=E:\myExcel.xls”
复制代码
       上述语句通过对一个2003版本Excel文件建立起数据连接。这一点可以用于建立不太规范的数据表。——不太规范的意思是说,与标准表相比,可能会存在一行“xx公司销售报表”之类的表头,而不是说字段可以数值文本混编,更不是说字段名可以含有特殊字符。这类数据表导入或者链接都不太方便。Access 2003版本有TransferSpreadsheet宏,可以指定Excel表范围来导入或者链接表,不过到了2007版本以上,就只能编程了。——反正我没找到过。说到2007,顺便说一句,2007版本的Jet引擎已经改为Microsoft.ACE..OLEDB.12.0了,对应的2007版本Excel也成为 “Excel 12.0”了。也有人这样写,觉得这样似乎更规整:
  1. Dim cnn As ADODB.Connection
  2. Set cnn = New ADODB.Connection
  3. With cn
  4.     .ConnectionString =”Extended Properties=Excel 8.0;Data Source=E:\myExcel.xls”
  5.   .Provider = " Microsoft.Jet.OLEDB.4.0"
  6. .Open
  7. End With
复制代码
       更多连接字符串见下面链接:
       建立好连接之后,便可以执行命令了。例如,删除表数据:Cnn.Excecute “Delete * From MyTable”。从操作上来说,跟Docmd.RunSQL几乎没有太大区别,唯一的不同是,后者只能在Access里使用,而且执行前会弹出警告框(设置了Setwarning属性的除外)。
当然,它也可以执行选择查询。不过,这往往很少单独使用,而是与Recordset联合起来使用。因为只有赋值给记录集了,我们才可以从中获取所需信息。例如:
  1. Sub test()
  2. Dim rst As ADODB.Recordset
  3. Set rst = CurrentProject.Connection.Execute("select * from  MyTable")
  4. Debug.Print rst(0)
  5. End Sub
复制代码
    据说,还可以通过开始事务(BeginTrans)、提交事务(CommitTrans)和滚回事务(RollbackTrans)来处理记录,之前在《Access 2007数据分析cookbook 中文版》里见过例子。但遗憾的是,帮助文件里给的例子是在SQL Server里实现的,而我的目前手头上没有示例,测试几次都没成功。
【新手入门】之一:If分支语句
【新手入门】之二:分支语句总结
【新手入门】之三:循环语句For
【新手入门】之四:循环语句Do和死循环
【新手入门】之五:公共变量与传址过程、传值过程
【新手入门】之六:“悲欢离合总无情”——浅谈Split和Join
【新手入门】之七:嵌套与并列——再谈If流程问题
【新手入门】之八:“连就连”——浅谈“&”和“+”连接符的区别

【新手入门】之九:从百钱百鸡谈起——浅谈“规划求解”兼答lingjiang问
【新手入门】之十:书到用时方恨少——自定义菜单(Access 2003)的制作
【新手入门】之十一:浅谈ADO之序言
【新手入门】之十二:浅谈ADO之Connection
【新手入门】之十三:浅谈ADO之Conmmand(上)
【新手入门】之十四:浅谈ADO之Command(下)
【新手入门】之十五:浅谈ADO之Recordset(上)
【新手入门】之十六:浅谈ADO之Recordset(下)
【新手入门】之十七:浅谈列表框的使用
【新手入门】之十八:双击列表框修改数据
【新手入门】之十九:从“书与女友恕不外借”谈起——浅谈“Bookmark”的使用
【新手入门】之二十:“书与书签”——bookmark属性答疑
【新手入门】之二十一:记录集的“凌迟”——逐条导出记录集

【新手进阶】之一:基础算法(一)
【新手进阶】之二:基础算法(二)
【新手进阶】之三:基础算法(三)
【新手进阶】之四:基础算法(四)
【新手进阶】之五:排序搜索(一)
【新手进阶】之六:排序搜索(二)
【新手进阶】之七:递归算法
【新手进阶】之八:冒泡排序
【新手进阶】之九:浅谈不绑定数据源操作记录
【新手进阶】之十:工作日的计算
【新手进阶】之十一:“庖丁解牛”和“纪昌学射”——浅谈表格式文本数据的导入
【新手进阶】之十二:从四脚腾空的奔马谈起——原来界面可以这样设计
【新手进阶】之十三:Outlook风格导航界面
【新手进阶】之十四:仓库管理系统

本帖被以下淘专辑推荐:

发表于 2014-11-17 13:48:37 | 显示全部楼层
ACC不支持手工事务吗?
 楼主| 发表于 2014-11-17 14:44:57 | 显示全部楼层
风中漫步 发表于 2014-11-17 13:48
ACC不支持手工事务吗?

没测试成功。下次回家再找找那个示例测试下。
发表于 2014-11-19 12:56:19 | 显示全部楼层
试了下,可以的

点击这里给我发消息

发表于 2015-10-10 17:01:00 | 显示全部楼层
学习学习
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-4-18 09:19 , Processed in 0.096404 second(s), 31 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表