Функции для преобразования SQL в строки VBA

Я строю сотни SQL-запросов на листе excel, и каждый из них помещается в ячейку из 1 столбца. То, что я хочу сделать, это запустить каждый из этих SQL-запросов из excel.

Просто интересно, знает ли кто-нибудь способ конвертировать весь мой SQL в строки VBA, чтобы я мог прокручивать все строки для запуска каждого запроса.

Я нашел это, что я хочу сделать, но есть ли способ изменить код, чтобы он мог читать ячейки excel, а не форму?

http://allenbrowne.com/ser-71.html

благодаря

EDIT: Вот пример SQL, который я пытаюсь преобразовать

SELECT TT.TEST_TABLE_ID, TT.TEST_TABLE_NO, TT.MEMBERSHIP_NUMBER, TT.TEST_TABLE_TYPE, from TEST_TABLE TT 

Я думаю, потому что каждый Select находится в своей собственной строке, он вызывает проблемы, когда он преобразуется.

EDIT # 2: Вот мой код, который выполняет SQL

 Sub GetData() Dim Conn As New ADODB.Connection Dim RS As New ADODB.Recordset Dim cmd As New ADODB.Command Dim sqlText As String Dim Row As Long Dim Findex As Long Dim Data As Worksheet Dim X As Long Set Data = Sheets("Results") Data.Select Cells.ClearContents Conn.Open "PROVIDER=ORAOLEDB.ORACLE;DATA SOURCE=ORCL;USER ID=user;PASSWORD=password" cmd.ActiveConnection = Conn cmd.CommandType = adCmdText 'sqlText = How to reference Valid SQL cells cmd.CommandText = sqlText Set RS = cmd.Execute For X = 1 To RS.Fields.Count Data.Cells(1, X) = RS.Fields(X - 1).Name Next If RS.RecordCount < Rows.Count Then Data.Range("A2").CopyFromRecordset RS Else Do While Not RS.EOF Row = Row + 1 For Findex = 0 To RS.Fields.Count - 1 If Row >= Rows.Count - 50 Then Exit For End If Data.Cells(Row + 1, Findex + 1) = RS.Fields(Findex).Value Next Findex RS.MoveNext Loop End If Cells.EntireColumn.AutoFit End Sub 

в текстовой части SQL я хочу иметь возможность ссылаться на мой столбец операторов SQL, которые у меня есть. Я думал, что мне нужно преобразовать его, но вы, ребята, правы, что, ссылаясь на него, я могу просто использовать ваш код Brad.

Я попытался включить ваш код brad, где мой 'sqlText = Как ссылаться на Valid SQL-ячейки, но не имел успеха

Вот начало кода, который, как мне кажется, вам нужен.

Я поместил SQL в лист с именем «SQL» в Col A. Проблемы с этим: (1) Вы помещаете имена полей в строку, а затем данные, которые возвращаются в строку. Это потребует двух строк для SQL-оператора. (2) Я скопировал инструкцию SQL из листа «SQL» и поместил в Col A «Результаты» (вы упомянули, что хотите разместить результаты справа от SQL String. (3) Вы очищаете содержимое листа «Результаты», поэтому вам нужно быть осторожным, чтобы не стереть ваш SQL, если вы решили объединить листы.

 Option Explicit Sub Process_SQL_Strings() Dim cmd As New ADODB.Command Dim sqlText As String Dim Row As Long Dim Findex As Long Dim Data As Worksheet Dim iFldCt As Long Dim conn As ADODB.Connection Dim rs As ADODB.Recordset Dim sConn As String Dim lLastRow As Long Dim lRow As Long Set Data = Sheets("Results") Data.Select Cells.ClearContents conn.Open "PROVIDER=ORAOLEDB.ORACLE;DATA SOURCE=ORCL;USER ID=user;PASSWORD=password" cmd.ActiveConnection = conn cmd.CommandType = adCmdText '' Set conn = New ADODB.Connection '' sConn = "Provider=Microsoft.ACE.OLEDB.12.0;" & _ '' "Data Source=C:\data\access\tek_tips.accdb;" & _ '' "Jet OLEDB:Engine Type=5;" & _ '' "Persist Security Info=False;" conn.Open sConn 'sqlText = How to reference Valid SQL cells lRow = 1 Do sqlText = Sheets("SQL").Range("A" & lRow) If sqlText = "" Then MsgBox "Finished processing " & lRow & " rows of SQL", vbOKOnly, "Finished" GoTo Wrap_Up End If Set rs = New ADODB.Recordset rs.Open sqlText, conn, adOpenStatic, adLockBatchOptimistic, adCmdText Data.Cells(lRow, 1) = sqlText If not rs.EOF then For iFldCt = 1 To rs.Fields.Count Data.Cells(lRow, 1 + iFldCt) = rs.Fields(iFldCt - 1).Name Next If rs.RecordCount < Rows.Count Then Data.Range("B" & lRow).CopyFromRecordset rs Else Do While Not rs.EOF Row = Row + 1 For Findex = 0 To rs.Fields.Count - 1 If Row >= Rows.Count - 50 Then Exit For End If Data.Cells(Row + 1, Findex + 1) = rs.Fields(Findex).value Next Findex rs.MoveNext Loop End If Cells.EntireColumn.AutoFit End If lRow = lRow + 1 Loop Wrap_Up: rs.Close Set rs = Nothing conn.Close Set conn = Nothing End Sub 

Я использую что-то следующее:

 Function SQLQueryRun(ByVal query As String, ByVal returnData As Boolean) As Variant Dim Conn As New ADODB.Connection Dim ADODBCmd As New ADODB.Command Dim ret As New ADODB.Recordset Conn.ConnectionString = "connection_string_here" Conn.Open ADODBCmd.ActiveConnection = Conn ADODBCmd.CommandText = query Set ret = ADODBCmd.Execute() If returnData Then If Not ret.EOF Then SQLQueryRun = ret.GetRows() Else SQLQueryRun = True End If Conn.Close Set Conn = Nothing Set ret = Nothing End Function 

Если второй аргумент False , функция возвращает ничего. Ожидаете ли вы результаты выполнения запроса?
Также я использую макрос для создания таблицы Query / Pivot из sql, содержащейся в буфере обмена Windows, если вы заинтересованы, дайте мне знать.

Вам нужно будет создать соединение с вашей базой данных и пропустить все ячейки и выполнить код в каждой ячейке.

Вы можете использовать ADO для соединения (необходимо добавить ссылку на Microsoft ActiveX Data Objects 6.1 Library )

Вам нужно выяснить свою строку подключения , открыть соединение, затем пропустить все ячейки и выполнить SQL в этих ячейках.

 Dim cnn As New ADODB.Connection Dim connectionString As String Dim cmd As New ADODB.Command Dim c As Range, ws As Worksheet Dim rst as ADODB.Recordset connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data source=C:\Database3.accdb;Persist Security Info=False;" cnn.Open connectionString cmd.ActiveConnection = cnn For Each c In ws.Range() cmd.CommandText = c.Value set rst = cmd.Execute 'do what you need to with your new recordset before moving on to the next SELECT Next c 
  • Предупреждение: sqlsrv_num_rows () ожидает, что параметр 1 будет ресурсом, boolean задан в
  • Импорт листа Excel с изображениями и изображениями в таблицу Pervasive SQL
  • Импорт Excel в SQL со смешанными столбцами - большие номера содержат E +
  • Как сохранить результат запроса в Integer В Excel VBA
  • Ограничения SQL запросов Microsoft в Excel
  • Объединение (INNER JOIN) локальной таблицы Excel в Oracle SQL Query - VBA
  • PowerPivot Calculate фильтры не работают
  • Как запросить поля базы данных Microsoft Access из VBA в Excel
  • Как указать имя схемы в строке соединения VBA
  • Получение данных из Excel-ячейки с использованием SQL-запроса в Excel
  • Как разбить несколько строк на несколько столбцов в excel?
  • Давайте будем гением компьютера.