求星际大荒星领主by小野兽全文迦蓝督心百度云全文

ADO访问Excel数据
我的图书馆
ADO访问Excel数据
我们都知道可以像操作数据表一样使用 ADO 来访问 Excel 文档, &在 Excel 2003 及以前的版本是使用的Microsoft.Jet.OLEDB.4.0 引擎(简称 Jet 引擎)来访问 Excel 数据,但随着 Offic 2007 的推出, 微软发布了最新的 Microsoft.ACE.OLEDB.12.0 引擎(简称 ACE 引擎).& 这个新的数据引擎不仅可以访问 Excel 2007 文件类型, 还兼容支持&Excel 97-2003 文件类型,下面就来简单来说一说这两个引擎。
示例文件下载1文件名称1下载链接ADO.zip
连接字符串的写法
不同的 ADO 引擎访问 Excel 数据有不同的连接字符串的写法,Excel 2003 版本和 2007 版本的写法分别如下(其中的 [Excel-FullName] 为你需要访问的 Excel 文件全名):
Excel2003 及以前版本的写法:
Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & [Excel-FullName] & _
"; Extended Properties='Excel 8.0; HDR=Y IMEX=1'"
&Excel2007 及以后版本的写法:
"Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & [Excel-FullName]&& _
"; Extended Properties='Excel 12.0; HDR=YES; IMEX=1'"
特别说明:&
HDR=YES 表示第一行是列名而不是数据; HDR=NO 则正好与前面的相反, 系统默认为 HDR=YES。
IMEX ( IMport EXport mode )有三种模式:&&&&& 0 表示输出模式: 此时 Excel 文档只能用来做“写入”用途。&&&&& 1 表示输入模式: 此时 Excel 文档只能用来做“读取”用途。&&&&& 2 表示链接模式(完全更新能力):& 此时 Excel 文档可同时支持“读取”与“写入”用途。
示例代码:
Option Explicit
Sub btnADO_Click()
On Error Resume Next
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim xADOCon As Variant
Dim xADORs As Variant
Dim xSQLStr As String
Dim I As Long
ThisWorkbook.Names.Item("Result").RefersToRange.ClearContents
'创建数据库连接
Set xADOCon = CreateObject("Adodb.Connection")
' 打开数据库连接
' 2007及以后版本
xADOCon.Open "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & ThisWorkbook.FullName & "; Extended Properties='Excel 12.0; HDR=YES; IMEX=1'"
' 2003及以前版本
'xADOCon.Open "Provider=Microsoft.jet.OLEDB.4.0; Data Source=" & ThisWorkbook.FullName & "; Extended Properties='Excel 8.0; HDR=YES; IMEX=1'"
' 设置SQL语句
xSQLStr = "SELECT * FROM [Data_1$] WHERE 姓名='王二' OR 姓名='马五' AND 年龄&30"
' 将SQL语句获得的数据传递给数据集
Set xADORs = xADOCon.Execute(xSQLStr)
' 获得SQL结果的列标题
For I = 1 To xADORs.Fields.Count
ThisWorkbook.Names.Item("Result").RefersToRange.Cells(1, I) = xADORs.Fields(I - 1).Name
ThisWorkbook.Names.Item("Result").RefersToRange.Range("a2").CopyFromRecordset xADORs
'关闭数据库连接
xADOCon.Close
Set xADOCon = Nothing
Application.DisplayAlerts = True
Application.ScreenUpdating = True
TA的最新馆藏查看: 1305|回复: 6
求助:ADO连接hdr=no丢失字段标题,SQL模糊匹配:至少一个参数没有被指定值,怎么解决
阅读权限20
在线时间 小时
(11.67 KB, 下载次数: 13)
15:36 上传
点击文件名下载附件
ado,SQL,VBA
两个问题:1、添加筛选where条件时,SQL不认识字段名,模糊匹配出现:至少一个参数没有被指定值;2、hdr=no时,要么就是不支持,用with的方法支持,但是数字列的列标题丢失。
阅读权限50
在线时间 小时
Sub 查询数据()
& & Dim cnn As ADODB.Connection
& & Dim rs As ADODB.Recordset
& & Dim strSql As String, str1 As String
'& & On Error Resume Next
& & Set cnn = CreateObject(&ADODB.Connection&)
& & Set rs = CreateObject(&ADODB.Recordset&)
& & With cnn
.ConnectionString = &provider=microsoft.jet.oledb.4.0;& & _
&extended properties='Excel 8.0;hdr=no';& & _
&data source=& & ThisWorkbook.FullName
& & str1 = ActiveSheet.Range(&A2&).Value
& & strSql = &Select * FROM [数据库$] Where f1 like '%& & str1 & &%'&
& & rs.Open strSql, cnn, adOpenStatic
& & With ActiveSheet
& && &&&.Range(&A5:G1000&).ClearContents
& && &&&.Range(&A5&).CopyFromRecordset rs
& & End With
& & rs.Close
& & cnn.Close
& & Set rs = Nothing
& & Set cnn = Nothing
阅读权限50
在线时间 小时
& & & & & & & &
列标题丢失是因为在HDR=NO的条件下,ADO把标题行当作一条记录了,在没有where子句的情况下ADO将所有记录查询出来,包括标题行这个记录,在有WHERE子句的限制下,标题行不满足查询条件,和其他不满足条件的记录一样没有被查询到,故没有显示出来,在你的思维里就意味着“丢失”了!
阅读权限90
在线时间 小时
hdr=no时,各字段名(列标题)分别为: f1 , f2, f3...........................
阅读权限20
在线时间 小时
你们试下,&=no“时丢失所有标题,2楼代码也丢失所有标题。还是不理想。
阅读权限50
在线时间 小时
本帖最后由 xd3210 于
10:40 编辑
gtwlren 发表于
你们试下,&=no“时丢失所有标题,2楼代码也丢失所有标题。还是不理想。
你说的标题是指列标题(字段名称)吗?看一下3楼的说明,是不是你要的答案?
阅读权限50
在线时间 小时
本帖最后由 xd3210 于
09:45 编辑
最近发现一个类似奇怪的问题,hdr=no时,对指定行区域查询,字段名有的是f开头的f1,f2…,有的却是指定区域第一行中某个单元格的值
最新热点 /1
ExcelHome每周都有线上直播公开课,
国内一流讲师真身分享,高手贴身答疑,
赶不上直播还能看录像,
关键居然是免费的!
厚木哥们都已经这么努力了,
你还好意思说学不好Office。
玩命加载中,请稍候
玩命加载中,请稍候
Powered by
本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任! & & 本站特聘法律顾问:徐怀玉律师 李志群律师

我要回帖

更多关于 星际大领主 咪菟 的文章

 

随机推荐