在VBA中編寫含有變量的SQL語(yǔ)句的代碼,,歷來(lái)是Access初學(xué)者甚至已入門者頭痛的問(wèn)題。 其中各種引號(hào),、連接號(hào)的嵌套,看上去紛繁復(fù)雜,,眼花繚亂,,極易把人搞暈菜,別說(shuō)初學(xué)者了,,縱然是多年老司機(jī),,也時(shí)常翻車。 因?yàn)樵赩BA中編寫的一句含有多個(gè)變量的SQL語(yǔ)句,,始終報(bào)錯(cuò)不能正常執(zhí)行,,折騰N小時(shí)乃至N天,仍然百撕不得騎姐的大有人在,。 我們來(lái)看一個(gè)真實(shí)案例(因情節(jié)需要有所改編):W童鞋因?yàn)橄旅孢@個(gè)SQL語(yǔ)句的編寫,,折騰了半天時(shí)間(實(shí)打?qū)嵉陌胩欤。?/span> 頭發(fā)抓掉了幾十根,,什么學(xué)生卡,、老年卡、公交卡,、處男卡,、白領(lǐng)卡……他自己能找到的卡都刷了個(gè)遍,卻還是上不了Access發(fā)的車,! 于是找到我求助,。 W童鞋寫的代碼如下: strSQL = 'Insert INTO 憑證記錄表 (狀態(tài),日期,制單人,制單時(shí)間,關(guān)聯(lián)單號(hào))' _ & 'VALUE ('未審核',' & Me.日期 & '',' & Forms!SysFrmMain!Nickname & '',' _ & Now() & '',' & Me.單號(hào) & '')' 作為一名常年發(fā)車,具有豐富經(jīng)驗(yàn)的老司機(jī),,本公子瞟了兩眼就看出來(lái)了下面幾點(diǎn)問(wèn)題: 1. 引號(hào)使用有問(wèn)題,,單引號(hào)不成對(duì)。 2. 日期必須要格式化,,并且兩端加#號(hào),。 3. Now()函數(shù)在SQL中同樣可以用,不需要放到VBA中解析,。 于是本公子隨手幫他改寫成了下面這樣: strSQL = 'Insert INTO 憑證記錄表 (狀態(tài),日期,制單人,制單時(shí)間,關(guān)聯(lián)單號(hào))' _ & 'VALUE ('未審核', ' & Format(Me.日期,'\#yyyy-mm-dd\#') & ','' _ & Forms!SysFrmMain!Nickname & '',Now(),'' & Me.單號(hào) & '')' 但是,W童鞋用了我發(fā)給他的代碼試了之后告訴我:仍然不行,。這就很尷尬了…… 又仔細(xì)看了一下,,發(fā)現(xiàn)第1個(gè)左圓括號(hào)用的有問(wèn)題,,應(yīng)該是半角“(”,結(jié)果他寫成全角的“(”了,。 抱歉,,這倆孿生兄弟長(zhǎng)得太像,我這老司機(jī)老眼昏花也難以分辨,。改正括號(hào)問(wèn)題再試,,一切OK。(中間仍然發(fā)生了一些其它問(wèn)題,,但那都不是我們這里要講的故事了) 最后,,做為送一贈(zèng)一的贈(zèng)品,我向W童鞋推薦了本公子多年苦修領(lǐng)悟的絕學(xué):偷梁換柱,。用 Replace 函數(shù)替換的方式,,代替引號(hào)、連接號(hào)的作用,。 改寫后的代碼如下: strSQL = ' Insert INTO 憑證記錄表 (狀態(tài),日期,制單人,制單時(shí)間,關(guān)聯(lián)單號(hào))' _ & ' VALUE ('未審核', #日期#,'@制單人',Now(),'@關(guān)聯(lián)單號(hào)')' strSQL = Repalce(strSQL, '@日期', Format(Me.日期, 'yyyy-mm-dd') strSQL = Repalce(strSQL, '@制單人', Forms!SysFrmMain!Nickname) strSQL = Repalce(strSQL, '@關(guān)聯(lián)單號(hào)', Me.單號(hào)) 好了,,這下子邋遢女漢子變成清新小美女了。 這一招偷梁換柱大法,,雖然看著代碼行數(shù)增加了,,但卻更加清晰易懂,不易出錯(cuò),。 推薦各位即將入門或者剛?cè)腴T的童鞋使用,,以后你再也不用犯引號(hào)糾結(jié)癥了! |
|