Запуск SQL-запроса на исполнение осуществляется процедурой TABLE(), текст которой приведен ниже. Структура процедуры состоит из следующих разделов:
0 - подготовка переменных;
1 - создание источника данных;
2 - Подготовка текса SQL-запроса;
3 - Выполнение SQL-запроса и получение набора;
3 - Выполнение SQL-запроса и получение набора записей;
4- Вывод набора записей в таблицу на страницу рабочего листа;
4.1. - Проверка не пустой ли список строк;
4.2. - Вывод таблицы на лист;
4.3. -Вывод тела таблицы.
Далее представлен текст процедуры TABLE().
Sub TABLE()
' ---------- объект для связи с базой ----------------------
'Выволнение SQL запроса к базе данных на рабочий лист
'0 ---------- подготовка переменны ------------------
RabTab = "Лист2"
NstrBeg = 1 ' номер начальной строки для вывода
Call Clear_RabTab(RabTab)
'----------------------------------------------------------
'1- создание источника данных ---
' источник создан в Main()
'2 ------- Подготовка текса SQL-запроса ------
strSQL = frm.TextBox1.Value ' – Текст читается из формы
If Trim(strSQL) = "" Then
MsgBox "нет запроса"
Exit Sub
End If
'3 ----- Выполнение SQL-запроса и получение набора записей -----
Set rs = CreateObject("ADODB.Recordset")
rs.Open strSQL, obj, adOpenDynamic, adLockPessimistic, adCmdTex
'----------------------------------------------------------
'4- Вывод набора записей в таблицу на страницу рабочего листа -----------
'4.1. --- Проверка не пустой ли список строк ----
If rs.EOF = True Then
MsgBox "Список пуст"
Exit Sub
End If
'4.2. --- Вывод таблицы на лист ----
rs.MoveFirst
Nstr = NstrBeg
With Sheets(RabTab)
'--- Строка с заголовками столбцов --
ncol = 1
For Each el In rs.Fields
rr = el.Name
.Cells(Nstr, ncol).Value = rr
ncol = ncol + 1
Next
'4.3.---- Вывод тела таблицы ----
Nstr = Nstr + 1
Do Until rs.EOF
ncol = 1
'---- чтение элементов строки -----
For Each el In rs.Fields
rr = trans(el.Value)
If IsNumeric(rr) = True And (ncol > 1) Then rr = rr * 1
.Cells(Nstr, ncol).Value = rr
ncol = ncol + 1
Next
'---- переход на следующую строку ----
Nstr = Nstr + 1
rs.MoveNext
Loop
End With
End Sub
После ввода текста процедуры, необходимо привязать ее к событию Click на кнопке формы FRM как показано ниже:
Private Sub CommandButton1_Click()
Call TABLE
End Sub