当前位置: 主页 > Office办公 > 其他专区 > Access > 同样的Access查询,直接找开或DAO打开结果正确,但使用ADO代码打开则结果不正确

同样的Access查询,直接找开或DAO打开结果正确,但使用ADO代码打开则结果不正确

  • 2021-10-24
  • 来源/作者: 菜鸟图库/ 菜鸟图库
  • 413 次浏览

完全一样的Access查询,直接找开或DAO打开结果正确,但使用ADO代码打开则结果不正确

就是查询如果比较复杂的话,通过ADO获取这个查询的记录的时候,有些字段的值全部是空的

如果用Access双击打开这个查询,里面的值又是可以计算出来的,最后我只有手工的将查询的结果转存到表里,然后读表,好坑
 


 


 


 

找了个Access实例( 问卷扣分查询 与ADO代码对比)


同样的Access查询,直接找开或DAO打开结果正确,但使用ADO代码打开则结果不正确


 

查询与ADO代码对比的结果

同样的Access查询,直接找开或DAO打开结果正确,但使用ADO代码打开则结果不正确


 

同样的Access查询,直接找开或DAO打开结果正确,但使用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 问卷扣分.网点代码 = 问卷扣总分.网点代码;