Запустите в 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).
Перетащите мышью все поля из таблицы Publish в поля запроса, как показано на рис. 45.
В поле запроса Nom впишите функцию NVip().
В полях Rub и SubRub установите сортировку по возрастанию (рис. 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.CloseEnd Sub ‘Эта строка у вас уже есть, ее копировать не надо
Сохраняем программный код, выходим, на этом конец нашей работе. В базу теперь можно не только вводить данные, но и делать выгрузку их для Индизайна.
Надеюсь, что этот небольшой пример позволит вам создать своё Приложение баз данных с нужными полями, стилями Индизайна и процедурой выгрузки данных.
Через некоторое время я расскажу как создать оболочку базы для автоматической верстки табличных данных.
Последние комментарии