ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 4765|回复: 11

[求助] 弱弱问一句:请问如何调用ACCESS里面的查询?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2013-4-9 16:25 | 显示全部楼层 |阅读模式
在论坛里学习了调用ACCESS里面的表,如下语句,但查询是怎么表示呢?
Sub 查询1()
    Dim myconnect As ADODB.Connection
    Dim myres As ADODB.Recordset
    Dim mydata As String, mySQL As String
    mydata = "F:\业绩认定程\数据库.mdb"
    Set myconnect = New ADODB.Connection
    myconnect.ConnectionString = "provider=microsoft.jet.oledb.4.0;" _
                               & "data source=" & mydata
    myconnect.Open
    Set myres = New ADODB.Recordset
    mySQL = "select * from 生成个人数据"                '生成个人数据  是一个数据表,但不知道如何调用查询?请教了!
    myres.Open mySQL, myconnect, adOpenKeyset, adLockOptimistic
    For icols = 0 To myres.Fields.Count - 1
    Sheet2.Cells(1, icols + 1).Value = myres.Fields(icols).Name
    Next icols
    Sheet2.Cells(2, 1).CopyFromRecordset myres
    myres.Close
    myconnect.Close
    Set myres = Nothing
    Set myconnect = Nothing
End Sub

TA的精华主题

TA的得分主题

发表于 2013-4-9 17:04 | 显示全部楼层
好像和调用数据表一样,举例:如果数据库db1中有A、B两个数据表,现创建一个查询——A 与 B 不匹配
  1. Sub 查询1()
  2.     Dim myconnect As ADODB.Connection
  3.     Dim myres As ADODB.Recordset
  4.     Dim mydata As String, mySQL As String
  5.     mydata = ThisWorkbook.Path & "\db1.mdb"
  6.     Set myconnect = New ADODB.Connection
  7.     myconnect.Open "provider=microsoft.jet.oledb.4.0;data source=" & mydata
  8.     Set myres = New ADODB.Recordset
  9.     mySQL = "select * from [A 与 B 不匹配]"                'A 与 B 不匹配  是一个查询
  10.     myres.Open mySQL, myconnect, adOpenKeyset, adLockOptimistic
  11.     For icols = 0 To myres.Fields.Count - 1
  12.     Cells(1, icols + 1).Value = myres.Fields(icols).Name
  13.     Next icols
  14.     Cells(2, 1).CopyFromRecordset myres
  15.     myres.Close
  16.     myconnect.Close
  17.     Set myres = Nothing
  18.     Set myconnect = Nothing
  19. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2013-4-9 17:05 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
请看附件
ADO调用Access查询.rar (44.44 KB, 下载次数: 42)

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-4-9 23:02 | 显示全部楼层
zhaogang1960 发表于 2013-4-9 17:05
请看附件

再次劳驾版主的热心回复。先下来学习

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-4-9 23:49 | 显示全部楼层
抱歉,按版主的格式,我修改了查询的名称,但运行结果只有表头,未见内容。现上传附件,劳烦高人指点。谢谢了。

ADO调用Access查询1.rar

39.12 KB, 下载次数: 3

TA的精华主题

TA的得分主题

发表于 2013-4-10 01:08 | 显示全部楼层
somepeople 发表于 2013-4-9 23:49
抱歉,按版主的格式,我修改了查询的名称,但运行结果只有表头,未见内容。现上传附件,劳烦高人指点。谢谢 ...
  1. Sub 查询1()
  2.     Dim myconnect As ADODB.Connection
  3.     Dim myres As ADODB.Recordset
  4.     Dim mydata As String, mySQL As String
  5.     mydata = ThisWorkbook.Path & "\数据库.mdb"
  6.     Set myconnect = New ADODB.Connection
  7.     myconnect.Open "DBQ=" & mydata & ";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)};"
  8.     Set myres = New ADODB.Recordset
  9.    ' mySQL = "select * from [A 与 B 不匹配]"                'A 与 B 不匹配  是一个查询
  10.     mySQL = "select * from 黄"
  11.     myres.Open mySQL, myconnect, adOpenKeyset, adLockOptimistic
  12.     MsgBox myres.RecordCount
  13.     For icols = 0 To myres.Fields.Count - 1
  14.     Cells(1, icols + 1).Value = myres.Fields(icols).Name
  15.     Next icols
  16.     Cells(2, 1).CopyFromRecordset myres
  17.     myres.Close
  18.     myconnect.Close
  19.     Set myres = Nothing
  20.     Set myconnect = Nothing
  21. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2013-4-10 01:15 | 显示全部楼层
这个查询使用原来的OLEDB驱动查不到,改用ODBC驱动可以
请看附件
ADO调用Access查询1.rar (30.08 KB, 下载次数: 40)

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-4-10 08:09 | 显示全部楼层
zhaogang1960 发表于 2013-4-10 01:15
这个查询使用原来的OLEDB驱动查不到,改用ODBC驱动可以
请看附件

感谢,能说说为什么改用ODBC驱动可以,原来的却查不到?

点评

原理不清楚,实验出来的  发表于 2013-4-10 10:19

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-4-10 12:28 | 显示全部楼层
somepeople 发表于 2013-4-10 08:09
感谢,能说说为什么改用ODBC驱动可以,原来的却查不到?

呵呵,好的,谢谢!

TA的精华主题

TA的得分主题

发表于 2018-7-28 15:52 | 显示全部楼层
zhaogang1960 发表于 2013-4-10 01:15
这个查询使用原来的OLEDB驱动查不到,改用ODBC驱动可以
请看附件

老师,你好,我按照你的说发,去查询,也只能查询到表头,后来我发现我把查询的SQL语句写简单点就能查出值来。这是为什么
复杂语句不行
SELECT f.利润中心, f.员工姓名, Sum(f.补助) AS 补助, Sum(f.长途交通) AS 长途交通, Sum(f.出租车) AS 出租车, Sum(f.公交地铁) AS 公交地铁, Sum(f.机票) AS 机票, Sum(f.住宿) AS 住宿
FROM (SELECT corp_name,period, mid(subj_name,1,instr(subj_name,'/')-1) AS 利润中心 , mid(subj_name,instr(subj_name,'/')+1) AS 员工姓名 , iif(subj_no = '6601.07.06',jfs,0) AS 补助 , iif(subj_no = '6601.07.03',jfs,0) AS 长途交通 , iif(subj_no = '6601.07.04',jfs,0) AS 出租车 , iif(subj_no = '6601.07.05',jfs,0) AS 公交地铁 , iif(subj_no = '6601.07.02',jfs,0) AS 机票 , iif(subj_no = '6601.07.01',jfs,0) AS 住宿  FROM ye_b AS b WHERE b.subj_no like '6601.07*' and b.subj_name not in ('差旅费','住宿费','机票款','高铁/长途汽车','的士/出租车','公交/地铁','补贴')   union all  SELECT corp_name,period, mid(subj_name,1,instr(subj_name,'/')-1) AS 利润中心 , mid(subj_name,instr(subj_name,'/')+1) AS 员工姓名 , iif(subj_no = '6602.07.06',jfs,0) AS 补助 , iif(subj_no = '6602.07.02',jfs,0) AS 长途交通 , iif(subj_no = '6602.07.04',jfs,0) AS 出租车 , iif(subj_no = '6602.07.05',jfs,0) AS 公交地铁 , iif(subj_no = '6602.07.03',jfs,0) AS 机票 , iif(subj_no = '6602.07.01',jfs,0) AS 住宿  FROM ye_b AS b WHERE b.subj_no like '6602.07*' and b.subj_name not in ('差旅费','住宿费','机票款','高铁/长途汽车','的士/出租车','公交/地铁','补贴')     )  AS f
WHERE (((f.补助+f.长途交通+f.出租车+f.公交地铁+f.机票+f.住宿)<>0) And ((f.corp_name)='金业文化传播有限公司') And ((f.period)='04'))
GROUP BY f.利润中心, f.员工姓名
ORDER BY f.员工姓名;

简单语句可以


SELECT * from ye_b where period='01' and corp_name= '金业文化传播有限公司'
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-1-13 13:13 , Processed in 0.030412 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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