Как да принудя MS Access да запази своето SQL форматиране?

Имам много SQL на работа в MS-Access и трябва да го форматирам, така че да може да се чете от хора. Проблемът е, че когато сменям между изгледи, в крайна сметка SQL се кондензира в нещо, което не мога да прочета.

Как да принудя SQL да запази своята „форма“, когато отида в други изгледи?


person Pureferret    schedule 13.08.2012    source източник


Отговори (4)


Намерих хак, тук. Тайната се крие в затварянето на вашата заявка във фиктивна заявка. Така:

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

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

Посочих къде и как да обвиете кода. Единственият проблем, който виждам, е, че ако искате да редактирате кода в изгледа за проектиране, тогава изглежда изобщо не избира приложения код.

person Pureferret    schedule 13.08.2012
comment

в моето уеб приложение имаме демонстрация на някои продукти, които сме разработили, и съм съхранил тези подробности за продукта в база данни като

tblProduct{Id,ProductName,ProductDescription}

сега да предположим, че потребителят щраква върху връзката за изтегляне за продукт A, така че на хипервръзката на тази страница имам предаден низ на заявка като Demo Download, така че ще пренасочи към този формуляр за запитване с ProductName е A и имам извличане на стойността на този низ на заявка на тази страница за запитване с код

 string productName = Request.QueryString["ProductName"] as string;
 objInquiry.InquiryFor = productName; 

Сега на следващата стъпка, когато потребителят натисне бутона за изпращане. На този формуляр за запитване една връзка трябва да изпрати до неговия имейл ID. Тази връзка е за Perticular този ProductOnly....сега върху кода за бутона за изпращане, направих Querystring като mail.Body += "<a href=\"http://www.abc.co.in/test.aspx?period=" + DateTime.Now + "&ProductName=[]\">Download Demo Software</a>"; сега въпросът ми е как мога да подайте това име на продукт означава, че името на продукта е A, така че как мога да предам това и как мога да извлека това на страницата test.aspx..??? моля, помогнете ми

- person Matt Donnan; 14.08.2012
comment
@MattDonnan, това е вярно, но често се улавям, че се въртя напред-назад. Сега, ако имах подходящ интерфейс за писане на sql в... - person Pureferret; 14.08.2012
comment
Този трик работи добре -- но изглежда, че трябва да внимавате да запазите заявката само в изглед на лист с данни (Access 2010). Контраинтуитивно, запазването на заявката, докато сте в SQL изглед, изтрива всички нови редове. Въпреки това, дори със запазване в SQL изглед, този хак все още предотвратява масовото преформатиране на SQL, което обикновено се случва. - person Fred Schleifer; 08.07.2016

Понякога методът, предложен от @Pureferret, може да се провали, като Access поддържа преформатиране на SQL.

Единственият начин, който открих, че работи през цялото време, е да добавя блок UNION ALL в края на заявката.
Всъщност, тъй като Access не обработва UNION ALLs, той дори няма да предложи редактиране в режим на проектиране.
(Опитах с UNION, но получих грешка Overflow!)

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

(ако насочването към реална таблица ви притеснява, можете да използвате "Двойна" таблица към базата данни)

Освен това намирам за малко "по-чисто" да добавя само един ред в края.
Но трябва да напишете толкова NULLs, колкото са избраните полета в истинската заявка.

РЕДАКТИРАНЕ: /!\ Бъдете внимателни с този метод в подзаявките, тъй като може да причини някои Query too complex грешки в заявките, които го използват! :(

person Pragmateek    schedule 17.10.2018

Ако имате администраторски достъп до вашия компютър (необходим за инсталиране), достъп до SQL редактора може да бъде правилният инструмент.
Никога не съм го използвал: като консултант рядко имам правото да инсталирам неща на машините, които използвам, но изглежда точно като това, което бих искал да имам: реплика на SSMS редактор.

person Patrick Honorez    schedule 20.11.2018

Това няма да запази форматирането, но може да преформатира.

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
person RIck_R    schedule 29.06.2019
comment
Какво прави? - person Pureferret; 29.06.2019
comment
Вижте коментарите във функцията. @Pureferret - person Andre; 29.06.2019
comment
@Андре видях. Надявах се OP да добави някои примери към некодовата част на отговора. - person Pureferret; 29.06.2019
comment
Не е предвидено да се извиква от програма. Примери биха били само SQL, който Access преформатира, и същата заявка с нови редове и отстъпи с 5 интервала. - person RIck_R; 30.06.2019
comment
Имайте предвид, че леко го модифицирах, така че замества ВСИЧКИ двойни кавички с единични кавички. Така че относно моя коментар от 30 юни, сега ще бъде същата заявка с нови редове и отстъпи от 5 интервала И двойни кавички, ЗАМЕНЕНИ с единични кавички. - person RIck_R; 07.07.2019