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