我有一些技巧是針對(duì)VBA中的SQL的。
將SQL代碼與字符串變量放在一起。我以前是這樣做的:
DoCmd.RunSQL "SELECT ..."
這是很難管理的。而是這樣做:
strSQL = "SELECT ..."DoCmd.RunSQL strSQL
通常,除非您看到正在運(yùn)行的內(nèi)容,否則無法修復(fù)查詢。為此,在執(zhí)行之前將SQL轉(zhuǎn)儲(chǔ)到即時(shí)窗口:
strSQL = "SELECT ..."Debug.Print strSQL
Stop
DoCmd.RunSQL strSQL
將結(jié)果粘貼到Access的標(biāo)準(zhǔn)查詢生成器(必須使用SQL視圖)?,F(xiàn)在您可以測(cè)試最終版本,包括代碼處理的變量。
當(dāng)將長(zhǎng)查詢準(zhǔn)備為字符串時(shí),拆分代碼:
strSQL = "SELECT wazzle FROM bamsploot" _ & vbCrLf & "WHERE plumsnooker = 0"
我第一次學(xué)會(huì)使用vbCrLf
當(dāng)我想美化給用戶的長(zhǎng)消息時(shí)。后來,我發(fā)現(xiàn)它使SQL在編碼時(shí)更加可讀性,并且改進(jìn)了Debug.Print
..(其他微小的好處:每行末尾不需要空間。))的新行語法。)
(注意:您可能認(rèn)為這將允許您在SQL行的右側(cè)添加注釋。(為失望做好準(zhǔn)備。)
正如這里其他地方所說,到文本編輯器的旅行是一種節(jié)省時(shí)間的方法。一些文本編輯器提供了比官方VBA編輯器更好的語法突出顯示。(見鬼,StackOverflow做得更好。)它還可以有效地刪除WHERE子句中的訪問CRUFT,例如多余的表引用和大量括號(hào)。
解決嚴(yán)重問題的工作流程:
VBA Debug.Print > (capture query during code operation)
query builder > (testing lab to find issues)
Notepad++ > (text editor for clean-up and review)
query builder > (checking, troubleshooting) VBA
當(dāng)然,解決問題通常是降低查詢的復(fù)雜性,直到您能夠隔離問題(或者至少使其消失!)。然后你可以把它建回你想要的杰作。因?yàn)榻鉀Q一個(gè)棘手的問題可能需要幾個(gè)周期,所以您可能會(huì)重復(fù)使用這個(gè)工作流。