同样的Access查询,直接找开或DAO打开结果正确,但使用ADO代码打开则结果不正确
- 2017-09-07 23:13:00
- zstmtony 原创
- 6324
今天有Access网友在Access QQ群中提出个问题,完全一样的Access查询,直接找开或DAO打开结果正确,但使用ADO代码打开则结果不正确
就是查询如果比较复杂的话,通过ADO获取这个查询的记录的时候,有些字段的值全部是空的
如果用Access双击打开这个查询,里面的值又是可以计算出来的,最后我只有手工的将查询的结果转存到表里,然后读表,好坑
找了个Access实例( 问卷扣分查询 与ADO代码对比)
查询与ADO代码对比的结果
查询的详细SQL视图里的语句如下:
SELECT 问卷扣分.网点代码, IIf((问卷选项.K0 Like '*4*')+(问卷选项.K0 Like '*5*')+(问卷选项.K0 Like '*6*'),-1,IIf(IIf(IsNull(问卷扣分.K0),0,问卷扣分.K0)+IIf(IsNull(问卷扣总分.K0),0,问卷扣总分.K0)<0,IIf(IsNull(问卷扣分.K0),0,问卷扣分.K0)+IIf(IsNull(问卷扣总分.K0),0,问卷扣总分.K0),0)) AS K0 FROM 问卷扣分 INNER JOIN (问卷选项 INNER JOIN 问卷扣总分 ON 问卷选项.网点代码 = 问卷扣总分.网点代码) ON 问卷扣分.网点代码 = 问卷扣总分.网点代码;
而使用ADO VBA代码 如下:
Public Sub ff() Dim rs As New ADODB.Recordset rs.Open "Select 网点代码,K0 From 问卷扣分查询1", CurrentProject.Connection Do Until rs.EOF Debug.Print rs.Fields(0).Value, rs.Fields(1).Value rs.MoveNext Loop rs.Close End Sub
但ADO获取的结果不对。
经过分析,原来是 ADO 的SQL 中的通配符必须 使用 % ,而不是使用 *
1. 解决办法一:将查询中的 * 改为 % ,则通过 ADO调用正常 (tmtony)
SELECT 问卷扣分.网点代码, IIf((问卷选项.K0 Like '%4%')+(问卷选项.K0 Like '%5%')+(问卷选项.K0 Like '%6%'),-1,IIf(IIf(IsNull(问卷扣分.K0),0,问卷扣分.K0)+IIf(IsNull(问卷扣总分.K0),0,问卷扣总分.K0)<0,IIf(IsNull(问卷扣分.K0),0,问卷扣分.K0)+IIf(IsNull(问卷扣总分.K0),0,问卷扣总分.K0),0)) AS K0 FROM 问卷扣分 INNER JOIN (问卷选项 INNER JOIN 问卷扣总分 ON 问卷选项.网点代码 = 问卷扣总分.网点代码) ON 问卷扣分.网点代码 = 问卷扣总分.网点代码;
还真的是啊,可是Access上显示的结果就是错误的,看来Access是用的DAO运算的查询
忘记了ADO使用%的了
【管理员】tmtony小辣椒(18449932) 17:58:13
ADO是使用%
所以这个要2边都使用,最好是把查询Sql 放在代码里
忘记了ADO使用%的了
【管理员】tmtony小辣椒(18449932) 17:58:13
ADO是使用%
所以这个要2边都使用,最好是把查询Sql 放在代码里
我只能将ado 换成dao 了,得将我原来的adohelper 类模块换成daohelper 才能统一了
【话唠】ZPY2(1928323988) 18:22:36
ado不能匹配%?
【话唠】ZPY2(1928323988) 18:25:56
能转义的吧
【吐槽】064-姚文涛-10年(21959068) 18:26:10
不是,我得将查询里的*换成%,这样双击这个查询打开看到的结果就是错误的,当然用ado 读取的记录集数据就对了
两者不一致,容易造成使用的人迷糊
【话唠】ZPY2(1928323988) 18:27:11
?
【话唠】ZPY2(1928323988) 18:28:18
可以都用 %做通配符的,数据库 选项 兼容 sql
【话唠】ZPY2(1928323988) 18:30:31
这个转义 ,我倒是忘了,是那个了 Excel是左上~
2. 解决办法二 :ZPY2的解决办法 可以都用 %做通配符的,数据库 选项 兼容 sql
工具 选项 表/查询 有个 兼容 sql server 选项
Access数据库自身
- office课程播放地址及课程明细
- Excel Word PPT Access VBA等Office技巧学习平台
- 将( .accdb) 文件格式数据库转换为早期版本(.mdb)的文件格式
- 将早期的数据库文件格式(.mdb)转换为 (.accdb) 文件格式
- KB5002984:配置 Jet Red Database Engine 数据库引擎和访问连接引擎以阻止对远程数据库的访问(remote table)
- Access 365 /Access 2019 数据库中哪些函数功能和属性被沙箱模式阻止(如未启动宏时)
- Access Runtime(运行时)最全的下载(2007 2010 2013 2016 2019 Access 365)
Access Activex第三方控件
- Activex控件或Dll 在某些电脑无法正常注册的解决办法(regsvr32注册时卡住)
- office使用部分控件时提示“您没有使用该ActiveX控件许可的问题”的解决方法
- RTF文件(富文本格式)的一些解析
- Access树控件(treeview) 64位Office下出现横向滚动条不会自动定位的解决办法
- Access中国树控件 在win10电脑 节点行间距太小的解决办法
- EXCEL 2019 64位版(Office 2019 64位)早就支持64位Treeview 树控件 ListView列表等64位MSCOMMCTL.OCX控件下载
- VBA或VB6调用WebService(直接Post方式)并解析返回的XML
Access ADP Sql Server等
- 早期PB程序连接Sqlserver出现错误
- MMC 不能打开文件C:/Program Files/Microsoft SQL Server/80/Tools/Binn/SQL Server Enterprise Manager.MSC 可能是由于文件不存在,不是一个MMC控制台,或者用后来的MMC版
- sql server连接不了的解决办法
- localhost与127.0.0.1区别
- Roych的浅谈数据库开发系列(Sql Server)
- sqlserver 自动备份对备份目录没有存取权限的解决办法
- 安装Sql server 2005 express 和SQLServer2005 Express版企业管理器 SQLServer2005_SSMSEE
文章分类
联系我们
联系人: | 王先生 |
---|---|
Email: | 18449932@qq.com |
QQ: | 18449932 |
微博: | officecn01 |