我在 MS-Access 中有很多 SQL 在工作,我需要对其进行格式化以使其易于阅读。问题是当我在视图之间进行更改时,我最终会将 SQL 压缩成我无法阅读的内容。
当我转到其他视图时,如何强制 SQL 保持其“形状”?
我在 MS-Access 中有很多 SQL 在工作,我需要对其进行格式化以使其易于阅读。问题是当我在视图之间进行更改时,我最终会将 SQL 压缩成我无法阅读的内容。
当我转到其他视图时,如何强制 SQL 保持其“形状”?
我在这里找到了一个 hack 。秘诀在于将您的查询包含在一个虚拟查询中。像这样:
SELECT * FROM (SELECT <-----here
Table1.Field1,
Table1.Field2
FROM
Table1
WHERE
Table1.Field2 = "Yes") AS query1 <-----here
我已经指出了你在哪里以及如何包装代码。我能看到的唯一问题是,如果您想在设计视图中编辑代码,那么它似乎根本不会选择包含的代码。
有时@Pureferret 提出的方法可能会失败,Access 会保持重新格式化 SQL。
我发现一直有效的唯一方法是UNION ALL
在查询末尾附加一个块。
事实上,由于 Access 不处理UNION ALL
s 它甚至不会建议在设计模式下进行编辑。
(我试过了,UNION
但Overflow
出错了!)
SELECT
...
...
FROM
...
WHERE
...
UNION ALL SELECT NULL, NULL, NULL FROM ANY_TABLE WHERE NULL
(如果以真实表为目标让您感到困扰,您可以使用数据库的“双”表)
此外,我发现在末尾只添加一行会更“干净”。
但是您需要编写NULL
与实际查询中选择的字段一样多的 s。
编辑: /!\ 在子查询中使用此方法时要小心,因为它可能会Query too complex
在使用它的查询中导致一些错误!:(
如果您对您的 PC 具有管理员访问权限(安装时需要),Access SQL 编辑器可能是正确的工具。
我从未使用过它:作为一名顾问,我很少有权在我使用的机器上安装东西,但它看起来与我想要的完全一样:SSMS 编辑器的复制品。
这不会保留格式,但可以重新格式化。
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