12

私はMS-Accessで多くのSQLを使用しており、人間が読めるようにフォーマットする必要があります。問題は、ビューを変更すると、SQLが読み込めないものに凝縮されてしまうことです。

他のビューに移動するときにSQLに「形状」を保持させるにはどうすればよいですか?

4

4 に答える 4

11

ここでハックを見つけました。秘密は、ダミークエリ内にクエリを含めることにあります。そのようです:

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

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

コードをどこでどのようにラップするかを示しました。私が見ることができる唯一の問題は、デザインビューでコードを編集したい場合、同封のコードをまったく取得していないようです。

于 2012-08-13T07:49:05.683 に答える
3

@Pureferretによって提案された方法は、AccessがSQLの再フォーマットを継続すると失敗する場合があります。

常に機能することがわかった唯一の方法UNION ALLは、クエリの最後にブロックを追加することです。
実際、AccessはUNION ALLsを処理しないため、デザインモードでの編集を提案することすらありません。
(試してみましUNIONたが、Overflowエラーが発生しました!)

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

(実際のテーブルをターゲットにするのが面倒な場合は、データベースに対して「デュアル」テーブルを使用できます)

さらに、最後に1行だけ追加する方が少し「クリーン」だと思います。ただし、実際のクエリで選択されたフィールドと
同じ数のを記述する必要があります。NULL

Query too complex編集:/!\このメソッドを使用するクエリでエラーが発生する可能性があるため、サブクエリではこのメソッドに注意してください。:(

于 2018-10-17T14:28:41.703 に答える
3

PCへの管理者アクセス権(インストールに必要)がある場合は、 AccessSQLエディターが適切なツールである可能性があります。
私はそれを使用したことはありません。コンサルタントとして、使用するマシンに何かをインストールする権利はめったにありませんが、SSMSエディターのレプリカという私が望んでいるものとまったく同じように見えます。

于 2018-11-20T13:22:44.267 に答える
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
于 2019-06-29T02:30:43.913 に答える