Home » Выгрузка данных для верстки

Выгрузка данных для верстки

Запустите в MS Access наше приложение баз данных, в главном окне базы выберите объект Модули и двойным щелчком на  модуле Main войдите в режим редактирования модуля.
Добавьте строки программного кода, чтобы готовый модуль у вас выглядел следующим образом:

Option Compare Database
Option Explicit
Public NomerRub As Double
Public NomerVip As Double
Public Function NRub() As Double
NRub = NomerRub
End Function
Public Function NVip()
NVip = NomerVip
End Function

Здесь добавленные строки выделены красным цветом. Таким образом, добавлена одна переменная NomerVip и одна функция NVip(). Переменная NomerVip — это порядковый номер вашего издания, номер выпуска. Функция NVip() нам потребуется для выборки из базы всех объявлений, которые будут публиковаться в конкретном номере.
Сохраним изменения и выйдем из редактора программного кода.

В главном окне базы данных выберем объект Запросы и двойным кликом запустим процедуру <Создание запроса в режиме конструктора>.
В окне Добавление таблицы выберем таблицу Publish и двойным кликом отправим её в окно запроса. Больше никаких таблиц нам не надо, закрываем окно Добавление таблицы (рис. 44).

Рис. 44. Создание запроса для отбора данных по объявлениям в конкретный номер

Рис. 44. Создание запроса для отбора данных по объявлениям в конкретный номер

Перетащите мышью все поля из таблицы Publish в поля запроса, как показано на рис. 45.

Рис. 45. Заполнение полей запроса

Рис. 45. Заполнение полей запроса

В поле запроса Nom впишите функцию NVip().
В полях Rub и SubRub установите сортировку по возрастанию (рис. 46).

Рис. 46. Задание сортировки

Рис. 46. Задание сортировки

Сохраните запрос с именем _Publish и закройте окно построителя запросов.

Все подготовительные операции закончены, и пришло время завершающего шага нашей работы. Сейчас мы займемся процедурой выгрузки информации из базы.

Перейдите в главном окне программы к объекту Формы, выделите форму Output и нажмите вверху окна кнопку Конструктор, чтобы загрузить форму в режиме Конструктора.

Выделим на форме кнопку Продолжить, нажмем правую кнопку мыши и из меню выберем Обработка событий, затем Программы. Загрузится редактор программного кода, в котором уже будут строчки Private Sub КнопкаПродолжить_Click() и End Sub

Копируем между ними следующий программный код, в результате у вас должно получиться следующее:

Private Sub КнопкаПродолжить_Click() ‘ Эта строка у вас уже есть, ее копировать не надо
Dim db As Database
Dim rs As DAO.Recordset
Dim rst As DAO.Recordset
Dim rsset As DAO.Recordset
Dim td As TableDef
Dim q As QueryDef
Dim str As String ‘ строка
Dim Rb As String
Dim SRb As String
Dim fs  ‘ для работы с файловой системой
Dim f   ‘ для работы с файловой системой

Set db = CurrentDb ‘ ссылка на текущую базу данных

‘Проверка, заполнена ли таблица со стилями Индизайна для верстки
Set td = db.TableDefs(«IndesignTagSet»)
Set rsset = td.OpenRecordset(dbOpenSnapshot)
rsset.MoveFirst
If rsset!Styles = «» Or IsNull(rsset!Styles) Then
MsgBox («Не заполнена таблица стилей Индизайна»)
Exit Sub
End If

‘Проверка: правильно ли введен номер выпуска.
‘Если в поле ничего не введено — выводим сообщение
‘и завершаем работу

If IsNull(Me!Поле0) Then
MsgBox («Не введен номер выпуска»)
Exit Sub
End If

‘ Присваиваем глобальной переменной введенный номер выпуска
NomerVip = Me![Поле0]

‘ Открываем рекордсет на основании сделанного и сохраненного ранее запроса
Set q = db.QueryDefs(«_Publish») ‘ссылка на сохраненный в базе запрос
Set rst = q.OpenRecordset ‘ открываем рекордсет
Set rs = rst.OpenRecordset

‘ Проверка на число записей в выпуске
If rs.RecordCount = 0 Then
MsgBox («В таблице публикаций нет записей с таким номером выпуска»)
Exit Sub
End If

‘ Контроль заполнения полей с рубриками и подрубриками
rs.MoveFirst
Do Until rs.EOF
If rs!Rub = «» Or IsNull(rs!Rub) Then
MsgBox («Есть незаполненное поле рубрики, продолжение невозможно»)
Exit Sub
End If
If rs!SubRub = «» Or IsNull(rs!SubRub) Then
MsgBox («Есть незаполненное поле подрубрики, продолжение невозможно»)
Exit Sub
End If
rs.MoveNext
Loop

‘Записываем в файл заголовок тэгового файла
‘ Инициализируем файловую систему
Set fs = CreateObject(«Scripting.FileSystemObject»)
‘Создаем текстовый файл для вывода информации.
‘Для простоты мы не используем стандартные диалоги
‘файловой системы, а вводим имя файла и путь прямо здесь.
‘если вам не подходят имя и путь, введите свои.

Set f = fs.CreateTextFile(«d:\ToIndesign.txt», True, True)

‘————Запись в файл заголовка тэгового файла (стилей)———————
str = rsset!Styles & vbNewLine
f.write str

‘———— Запись в файл табличных данных ——————
rs.MoveFirst
Rb = rs!Rub
SRb = rs!SubRub
i = 0

‘ цикл по рекордсету пока не достигнем его конца
Do Until rs.EOF
If rs!Rub = Rb Then
If rs!SubRub = SRb Then
Select Case i
Case 0
str = «<ParaStyle:Rubrica>» & Rb & vbNewLine
f.write str
‘запись в файл
i = 1
rs.MovePrevious
Case 1
str = «<ParaStyle:Subrubrica>» & SRb & vbNewLine
f.write str
‘запись в файл
i = 2
rs.MovePrevious
Case 2

‘ Если публикация текстовая (в базе параметр — TypePub)
If rs!TypePub = «ТекстБ» Or rs!TypePub = «ТекстПл» Or rs!TypePub = «ТекстПлВыд» Then
str = «<ParaStyle:Text>»
If Not IsNull(rs!BText) Then
str = str & «<CharStyle:StartBold>» & rs!BText & «<CharStyle:>» & » »
End If
If Not IsNull(rs!Text) Then
str = str & rs!Text & » »
End If
If Not IsNull(rs!Tel) Then
str = str & «» & «<CharStyle:Tel>» & rs!Tel & «<CharStyle:>»
End If
str = str & vbNewLine
f.write str
Else
‘ графическая публикация (рекламный блок)
str = «<ParaStyle:Text>» & «РЕКЛАМА № » & rs!Id & «, расположение » & rs!Place & vbNewLine
f.write str
End If
End Select
Else
SRb = rs!SubRub
i = 1
rs.MovePrevious
End If
Else
Rb = rs!Rub
SRb = rs!SubRub
i = 0

rs.MovePrevious
End If
rs.MoveNext
str = «»
Loop

‘———————————————
f.Close
Set f = Nothing
Set fs = Nothing
Set rs = Nothing
Set rst = Nothing
Set db = Nothing
MsgBox («Готово! Результат в файле d:\ToIndesign.txt»)
DoCmd.Close

End Sub ‘Эта строка у вас уже есть, ее копировать не надо

Сохраняем программный код, выходим,  на этом конец нашей работе. В базу теперь можно не только вводить данные, но и делать выгрузку их для Индизайна.

Надеюсь, что этот небольшой пример позволит вам создать своё Приложение баз данных с нужными полями, стилями Индизайна и процедурой выгрузки данных.

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

<< Предыдущая страница Следующая страница >>

Скачать пример