office交流網(wǎng)--QQ交流群號(hào)及微信交流群

Access培訓(xùn)群:792054000         Excel免費(fèi)交流群群:686050929          Outlook交流群:221378704    

Word交流群:218156588             PPT交流群:324131555

微信交流群(請(qǐng)用微信掃碼)

        

同樣的Access查詢(xún),直接找開(kāi)或DAO打開(kāi)結(jié)果正確,但使用ADO代碼打開(kāi)則結(jié)果不正確

2017-09-07 23:13:00
zstmtony
原創(chuàng)
6512


今天有Access網(wǎng)友在Access QQ群中提出個(gè)問(wèn)題,完全一樣的Access查詢(xún),直接找開(kāi)或DAO打開(kāi)結(jié)果正確,但使用ADO代碼打開(kāi)則結(jié)果不正確

就是查詢(xún)?nèi)绻容^復(fù)雜的話(huà),通過(guò)ADO獲取這個(gè)查詢(xún)的記錄的時(shí)候,有些字段的值全部是空的

如果用Access雙擊打開(kāi)這個(gè)查詢(xún),里面的值又是可以計(jì)算出來(lái)的,最后我只有手工的將查詢(xún)的結(jié)果轉(zhuǎn)存到表里,然后讀表,好坑



找了個(gè)Access實(shí)例( 問(wèn)卷扣分查詢(xún) 與ADO代碼對(duì)比)



查詢(xún)與ADO代碼對(duì)比的結(jié)果




查詢(xún)的詳細(xì)SQL視圖里的語(yǔ)句如下:



SELECT 問(wèn)卷扣分.網(wǎng)點(diǎn)代碼, IIf((問(wèn)卷選項(xiàng).K0 Like '*4*')+(問(wèn)卷選項(xiàng).K0 Like '*5*')+(問(wèn)卷選項(xiàng).K0 Like '*6*'),-1,IIf(IIf(IsNull(問(wèn)卷扣分.K0),0,問(wèn)卷扣分.K0)+IIf(IsNull(問(wèn)卷扣總分.K0),0,問(wèn)卷扣總分.K0)<0,IIf(IsNull(問(wèn)卷扣分.K0),0,問(wèn)卷扣分.K0)+IIf(IsNull(問(wèn)卷扣總分.K0),0,問(wèn)卷扣總分.K0),0)) AS K0 FROM 問(wèn)卷扣分 INNER JOIN (問(wèn)卷選項(xiàng) INNER JOIN 問(wèn)卷扣總分 ON 問(wèn)卷選項(xiàng).網(wǎng)點(diǎn)代碼 = 問(wèn)卷扣總分.網(wǎng)點(diǎn)代碼) ON 問(wèn)卷扣分.網(wǎng)點(diǎn)代碼 = 問(wèn)卷扣總分.網(wǎng)點(diǎn)代碼;




而使用ADO VBA代碼 如下:


Public Sub ff()
    Dim rs As New ADODB.Recordset
    rs.Open "Select 網(wǎng)點(diǎn)代碼,K0 From 問(wèn)卷扣分查詢(xún)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獲取的結(jié)果不對(duì)。


經(jīng)過(guò)分析,原來(lái)是 ADO 的SQL 中的通配符必須 使用 % ,而不是使用 *


1. 解決辦法一:將查詢(xún)中的 * 改為 % ,則通過(guò)  ADO調(diào)用正常 (tmtony)


SELECT 問(wèn)卷扣分.網(wǎng)點(diǎn)代碼, IIf((問(wèn)卷選項(xiàng).K0 Like '%4%')+(問(wèn)卷選項(xiàng).K0 Like '%5%')+(問(wèn)卷選項(xiàng).K0 Like '%6%'),-1,IIf(IIf(IsNull(問(wèn)卷扣分.K0),0,問(wèn)卷扣分.K0)+IIf(IsNull(問(wèn)卷扣總分.K0),0,問(wèn)卷扣總分.K0)<0,IIf(IsNull(問(wèn)卷扣分.K0),0,問(wèn)卷扣分.K0)+IIf(IsNull(問(wèn)卷扣總分.K0),0,問(wèn)卷扣總分.K0),0)) AS K0 FROM 問(wèn)卷扣分 INNER JOIN (問(wèn)卷選項(xiàng) INNER JOIN 問(wèn)卷扣總分 ON 問(wèn)卷選項(xiàng).網(wǎng)點(diǎn)代碼 = 問(wèn)卷扣總分.網(wǎng)點(diǎn)代碼) ON 問(wèn)卷扣分.網(wǎng)點(diǎn)代碼 = 問(wèn)卷扣總分.網(wǎng)點(diǎn)代碼; 


還真的是啊,可是Access上顯示的結(jié)果就是錯(cuò)誤的,看來(lái)Access是用的DAO運(yùn)算的查詢(xún)
忘記了ADO使用%的了
【管理員】tmtony小辣椒(18449932)  17:58:13
ADO是使用%
所以這個(gè)要2邊都使用,最好是把查詢(xún)Sql 放在代碼里


我只能將ado 換成dao 了,得將我原來(lái)的adohelper 類(lèi)模塊換成daohelper 才能統(tǒng)一了
【話(huà)嘮】ZPY2(1928323988)  18:22:36
ado不能匹配%?
【話(huà)嘮】ZPY2(1928323988)  18:25:56
能轉(zhuǎn)義的吧
【吐槽】064-姚文濤-10年(21959068)  18:26:10
不是,我得將查詢(xún)里的*換成%,這樣雙擊這個(gè)查詢(xún)打開(kāi)看到的結(jié)果就是錯(cuò)誤的,當(dāng)然用ado 讀取的記錄集數(shù)據(jù)就對(duì)了
兩者不一致,容易造成使用的人迷糊
【話(huà)嘮】ZPY2(1928323988)  18:27:11
?
【話(huà)嘮】ZPY2(1928323988)  18:28:18
可以都用  %做通配符的,數(shù)據(jù)庫(kù) 選項(xiàng) 兼容 sql
【話(huà)嘮】ZPY2(1928323988)  18:30:31

這個(gè)轉(zhuǎn)義 ,我倒是忘了,是那個(gè)了 Excel是左上~


2. 解決辦法二 :ZPY2的解決辦法 可以都用  %做通配符的,數(shù)據(jù)庫(kù) 選項(xiàng) 兼容 sql


【話(huà)嘮】ZPY2(1928323988) 2017/09/07 18:37:55
工具 選項(xiàng) 表/查詢(xún) 有個(gè) 兼容 sql server 選項(xiàng)
    分享
    文章分類(lèi)
    聯(lián)系我們
    聯(lián)系人: 王先生
    Email: 18449932@qq.com
    QQ: 18449932
    微博: officecn01
    移動(dòng)訪問(wèn)