2010-10-01 3 views
5

Я написал несколько довольно длинных SQL-запросов в блокноте, а затем вставлял их в свой код VBA как есть, а затем правильно форматировал многострочную строку каждой строки вовремя. Например ...Excel/VBA: как вставить SQL-запрос с правильным форматированием строк

В текстовом редакторе запрос выглядит следующим образом.

SELECT 
     a, 
     b, 
     c, 
     ..., 
     n 
FROM 
     table1, 
     table2, 
     ..., 
     tableN 
WHERE 
     etc 

Затем вставить это в редактор VBA и вручную добавлять sqlStr = sqlStr & "...." в каждую строку.

sqlStr = "    SELECT " 
sqlStr = sqlStr & "   a," 
sqlStr = sqlStr & "   b," 
sqlStr = sqlStr & "   c," 
sqlStr = sqlStr & "   ...," 
sqlStr = sqlStr & "   n" 
sqlStr = sqlStr & "  FROM" 
sqlStr = sqlStr & "   table1," 
sqlStr = sqlStr & "   table2," 
sqlStr = sqlStr & "   ...," 
sqlStr = sqlStr & "   tableN" 
sqlStr = sqlStr & "  WHERE" 
sqlStr = sqlStr & "   etc" 

Кто-нибудь знает инструмент, который позволит мне автоматически обернуть строковый материал VBA вокруг моего запроса (вместо добавления его вручную)? Я предполагаю, что для этого есть сайт, но я не могу его найти.

Я мог бы придумать что-то в Vi, но я не могу гарантировать, что я буду делать это на компьютере, чтобы у меня были права на установку Vi.

Любая помощь оценена! Благодарю.

ответ

6

Возможно, вам стоит взглянуть на SQLinForm. Среди других форматов, он позволяет форматировать SQL для использования в VB/VBA

+0

Благодаря Russ, именно то, что я искал! –

+0

Нет проблем, с удовольствием помогите :) Плата за версию стоит того, если вы ее много используете –

+1

Почти два года спустя ... Я приобрел лицензию на SQLinform. Ну стоит цена! Не только для вывода SQL в строковый формат VBA, но и для автоматического форматирования плохо отформатированных операторов SQL. –

0

Любой текстовый редактор с функцией макро/записи позволит вам автоматизировать это - VS.NET, TextPad, Notepad ++. Последнее см.: Notepad++ Macros.

0

Возможно, у вас будет установлен Excel, если вы делаете VBA.

Вы можете написать таблицу, в которую вы вставляете SQL в столбце A, и используйте функцию excel formula , чтобы добавить код VBA. Затем вы можете просто скопировать и вставить его в свое приложение.

1

быстрый и грязный раствор:

Скопируйте текст в ячейку А1 чистой таблицы. Каждая строка приземляется в ячейке, которая спускается вниз от A1.

In B1 put ="sqlString ="""&A1&"""" 
In B2 put ="sqlString=sqlString&"""&A2&"""" 

Скопируйте/перетащите B2 до конца столбца текста.

Скопируйте и вставьте полученный столбец B в свой код.

Вы также можете отредактировать свои фрагменты sql прямо в столбце A пустого листа Excel вместо блокнота и сохранить шаг.

Если вы хотели бы сделать это с кодом, это VBA будет сделать столбец B из столбца A:

Option Explicit 

Public Sub makeSqlStmt() 
    Dim r 
    Dim n 
    Dim i 
    Const s = "sqlString = """ 
    Const t = "sqlString = sqlString & """ 
    Set r = Range("a1") 
    Range("B1") = s & r & """" 
    n = r.CurrentRegion.Rows.count 
    For i = 1 To n - 1 
     r.Offset(i, 1) = t & r.Offset(i, 0) & """" 
    Next i 
End Sub 

Если вы хотите взять его прямо из файла блокнота, вы могли бы заменить цикл с код для чтения файла.

+0

Спасибо Marc! Это выглядит хорошо. Я собираюсь использовать это, если имею дело с любой конфиденциальной информацией, которую не следует вставлять в sqlinform, упомянутую ниже. –

4

Вам не нужно делать sqlStr = sqlStr & на каждой линии. Просто продолжайте одно заявление следующим образом:

sqlStr = "SELECT a, b, c,..., n " & _ 
     " FROM table1, table2,..., tableN " & _ 
     " WHERE etc" 

Вы можете иметь до 25 строк в одном заявлении таким образом.

Кроме того, я не думаю, что вы делаете все возможное, форматируя длинные запросы с каждым элементом на отдельной строке. Я беру более умеренный подход, пытаясь показать немного больше структуры, не используя слишком много строк. Вот немного кода из недавнего проекта. (Он используется для установки RowSource для комбинированного окна)

q = "SELECT NurseID, NurseName FROM " & _ 
    " (SELECT DISTINCT 0 as NurseID, '-- choose nurse --' as NurseName FROM tblNurse) " & _ 
    "UNION " & _ 
    " (SELECT DISTINCT N.NurseID AS NurseID, FirstName & ' ' & LastName AS NurseName " & _ 
    " FROM tblNurse AS N INNER JOIN tblBookings AS B" & _ 
    " ON N.NurseID=B.NurseID " & _ 
    " WHERE B.BDate >= " & Date_To_SQL(txtStartDate) & _ 
    " AND B.BDate <= " & Date_To_SQL(txtEndDate) & ") " & _ 
    "ORDER BY NurseName" 

Это также демонстрирует использование псевдонимов, чтобы сделать SQL короче и более читаемым. Очень быстро вставить все кавычки и «& _» в редакторе VBA, если вы поместите их в буфер обмена и используйте мышь и клавиатуру для щелчка, Ctrl-V, щелчка, Ctrl-V, жужжащего вниз по строкам ,

0

вот результат генерируется автоматически Instant SQL Formatter (бесплатный онлайн-SQL Formatter)

var1 = "" 
var1 = var1 & "SELECT a, " & vbCrLf 
var1 = var1 & "  b, " & vbCrLf 
var1 = var1 & "  c " & vbCrLf 
var1 = var1 & "FROM table1, " & vbCrLf 
var1 = var1 & "  table2, " & vbCrLf 
var1 = var1 & "  tablen " & vbCrLf 
var1 = var1 & "WHERE a > 1 " 
Смежные вопросы