如何强制MS Access保留其SQL格式?

时间:2012-08-13 07:49:06

标签: sql ms-access code-formatting

我在MS-Access中有很多SQL工作,我需要格式化,以便它是人类可读的。问题是当我在视图之间进行切换时,我最终会将SQL压缩成我无法读取的内容。

当我转到其他视图时,如何强制SQL保留其“形状”?

4 个答案:

答案 0 :(得分:9)

我找到了一个黑客,here。秘诀在于将查询包含在虚拟查询中。像这样:

SELECT * FROM (SELECT   <-----here
Table1.Field1,
Table1.Field2
FROM
Table1

WHERE
Table1.Field2 = "Yes") AS query1 <-----here

我已经指出了你在哪里以及如何包装代码。我能看到的唯一问题是如果你想在设计视图中编辑代码,那么它似乎根本没有选择所附的代码。

答案 1 :(得分:1)

有时@Pureferret提出的方法可能会因Access继续重新格式化SQL而失败。

我发现一直有效的唯一方法是附加一个UNION ALL块 在查询末尾。
实际上,由于Access不处理UNION ALL,因此它甚至不建议在设计模式下进行编辑。
(我尝试过UNION,但遇到了Overflow错误!)

SELECT
    ...
    ...
FROM
    ...
WHERE
    ...
UNION ALL SELECT NULL, NULL, NULL FROM ANY_TABLE WHERE NULL

(如果将实际表作为目标,您可以在数据库中使用“双重”表)

此外,我发现在末尾仅添加一行会比较“干净”。
但是您需要写的NULL与实际查询中选择的字段一样多。

编辑:/!\在子查询中请谨慎使用此方法,因为它可能在使用它的查询中引起一些Query too complex错误! :(

答案 2 :(得分:1)

如果您具有PC管理员权限(安装必需),则Access SQL editor可能是正确的工具。
我从没使用过:作为顾问,我几乎无权在我使用的计算机上安装东西,但看起来就像我想要的:SSMS编辑器的副本。

答案 3 :(得分:0)

这不会保留格式,但是可以重新格式化。

Sub FormatSQL()
' self-contained FormatSQL()

' 1) Takes WHATEVER is in the clipboard:
' 2) replaces all comma + space with comma, vbCrLf and 5 spaces,
' 3) replaces ALL double-quotes chr(34) with single-quotes
' 4) puts result in clipboard

' CAUTION - This CAN screw up DOUBLED double-quotes (see below)

' Use to format SQL in MS Access SQL View
'
' Usage:
' 1) Copy source to clipboard (Ctrl-a, Ctrl-c)
' 2) Run this
' 3) Paste to target (Ctrl-v)
'
' Note: Does NOT have a "Done" popup.
'
' To add it Access ribbon, create a function that calls this and
' create a macro that calls the function using RunCode.
'
' Ex:
' Function FmtSQL()
'   Call FormatSQL()
' End Function

'NOTES: Must enable Forms Library: _
'   Tools > References > Microsoft Forms 2.0 Object Library
'or you will get a "Compile error: user-defined type not defined"

Dim indent As String
    indent = "," & vbCrLf & "     "

Dim DataObj As New MSForms.DataObject
DataObj.Clear   ' may prevent crashes

Dim clip As Variant
DataObj.GetFromClipboard
clip = DataObj.GetText

clip = Replace(clip, ", ", indent)

' Replace ALL double-quote with single-quote
' NOTE: This WILL screw up DOUBLED double-quotes, i.e.
' "Write ""My name is Paul."" "

clip = Replace(clip, Chr(34), "'")

DataObj.SetText clip
DataObj.PutInClipboard
Set DataObj = Nothing

' Sub FormatSQL()
End Sub