Home » Верстка таблиц из базы

Верстка таблиц из базы

Пример создания приложения баз данных для верстки таблиц

Создание главной таблицы

Для выполнения поставленной задачи нам потребуются следующие таблицы:
1. IndesignTagSet — для хранения заголовка тэгового файла
2. MainRub — рубрики издания
4. Publish — главная таблица
5. SubRubr — подрубрики
6. TypePub — типы публикаций.

Вы уже можете создавать таблицы в MS Access, поэтому приведем только формат основной таблицы Publish. Так же как и ранее, для детального ознакомления с таблицами мы приведем в конце этого материала ссылку для скачивания.

Поле Тип данных Размер поля Подпись Значение по умолчанию
Npub Счетчик Длинное целое Код
Nomer Числовой Целое Номер издания
MainRub Текстовый 50 Рубрика
SubRub Текстовый 50 Подрубрика
TypePub Текстовый 50 Тип публикации
BText Текстовый 50 Выд. текст
Text Текстовый 170 Текст
Firm Текстовый 50 Фирма
Telkod Текстовый 8 Тел. код 495
Tel1 Текстовый 50 Телефон 1
Tel2 Текстовый 50 Телефон 2

Поле NPub — внутренний уникальный номер публикации в базе;

Поле Nomer — номер выпуска. В базе будут храниться все публикации (объявления) с накоплением, поэтому при ежемесячном издании январским публикациям будем присваивать номер 1, февральским — 2, и т.д.

Поля MaimRub и SubRub будут хранить данные о рубриках и подрубриках. Размер их (количество знаков) установите исходя из длины самой длинной рубрики или подрубрики.

Поле TypePub — для хранения типов публикаций.

Поле BText — для хранения части текста в начале объявления, которую надо выделить. Если ничего не надо выделять, поле остается пустым.

Поле Text — для хранения всего объявления или его оставшейся части после текста, занесенного в поле BText.
Например, есть объявление: «Срочно! Продается гималайский тигр.»  Слово «Срочно!» требуется выделить.
Мы заносим слово «Срочно!» в поле BText, а «Продается гималайский тигр» — в поле Text.

Обычно при приеме строчного объявления ограничивается число символов, поэтому в поле Text поставьте нужное вам значение. Оно не может быть более 255 символов. Если у вас практикуются строчные объявления большего, чем 255 символов, размера, то измените тип поля на MEMO. В поля типа MEMO можно забивать до 64 кB информации (MS Access).

Поле Firm — для хранения названия фирмы.

Поле TelKod — региональный телефонный код населенного пункта. Для Москвы это 495. Поставьте свое значение по умолчанию для этого параметра, если вы не в Москве.

Поля Tel1, Tel2 — для хранения номеров телефонов, приведенных в объявлении. Здесь размер полей с телефонами даны с запасом на случай, если к основному телефону будут еще и дополнительные номера офисной АТС.

При желании можно добавить такие поля как примечание (для хранения каких-либо заметок о рекламодателе), стоимости объявления (потом можно организовать суммирование стоимости всех объявлений и получить экономический результат),  можно добавить поле с датой создания объявления, можно всё это дополнить полем с фамилией рекламного менеджера (чтобы делать выборки стоимости объявлений по каждому менеджеру, если их несколько…) и т.д. Если добавлять фамилию менеджера, то для этого надо создать отдельную таблицу со списком менеджеров.

Формат остальных таблиц такой же как и в предыдущем примере. Таблица MainRub — из двух полей (Kod, тип — Счетчик и MainRub — Текстовое 50 символов). Таблица SubRub — из трех полей (Kod, тип — Счетчик, KodMain для хранения номера главной рубрики, типа Длинное целое и поля SubRub для названия подрубрики, текстовое, 50 символов).

Создание форм для ввода данных

Из главного окна выбираем раздел Формы и затем Создание формы при помощи мастера.

AccessVt01

Далее для формы выбираем таблицу Publish, и из списка Доступных полей переносим все поля в список Выбранных полей.

AccessVt02

Нажимаем Далее.

На следующем шаге выберите тип формы — ленточный

AccessVt03

Стиль может быть любым

AccessVt04

Далее задайте имя формы (можно оставить как есть) и отметьте Изменить макет формы

AccessVt05

После нажатия кнопки Готово мы получим нашу форму, открытую в режиме конструктора:

AccessVt08

Здесь надо все привести в порядок: увеличить размер полей и надписей над полями, поле Text сделать такой же высоты как и все поля. Для этого выделяется нужное поле или надпись над ним и перетягиванием маркеров увеличивают размер. Размер полей также можно численно задавать в панели свойств на вкладе «Макет«.

Вот что получилось (щелкните по рисунку для просмотра в увеличенном виде):

AccessVt09

Теперь необходимо заменить поля Гл. рубрика и Подрубрика полями со списками.

Удаляем поле SubRub (Подрубрика), включаем режим Мастера (если не включен) на Панели элементов на и на его место ставим Поле со списком. Запустится Мастер, в котором надо выбрать «Объект поле со списком будет использовать значения из таблицы или запроса» и нажать кнопку Далее.

AccessVt10

Далее выбираем таблицу SubRubr, в которой у нас список подрубрик

AccessVt11

Выбираем все поля:

AccessVt12

Устанавливаем сортировку по полю SubRub

AccessVt13

На следующем шаге устанавливаем размеры полей. Необходимо дважды щелкнуть на их границе (показано стрелкой)

accessVt14

Выбираем сохранять выбор из списка в поле SubRub

AccessVt15

Далее все оставляем как есть

AccessVt16

На этом всё готово. Мы увидим, что наше поле немножко неровно стоит, и есть ненужная надпись KodMain.

AccessVt17

Надпись удаляем и поле выравниваем вровень с остальными.

По такой же методике заменяем поле MainRub (Гл. рубрика) полем со списком. В качестве исходных данных выбираем таблицу MainRub, все поля, сортировка по MainRub, сохранить выбранное значение в поле MainRub.

Сохраним форму и закроем ее. Чтобы проверить как работают поля со списком, введем в таблицы рубрик и подрубрик тестовые значения, которые потом можно будет исправить на нужные. В Главном окне откроем вкладку Таблицы.

В таблицу главных рубрик введем две рубрики: Продажа автомобилей и Продажа недвижимости.

AccessVt18

В таблицу подрубрик вносим

AccessVt19

Поскольку все автомобили относятся к первой главной рубрике, то для них в столбце «Номер главной рубрики» стоит значение 1. Виллы, Дома и Квартиры относятся ко второй главной подрубрике и для них номер главной рубрики равен 2.

Запустим созданную форму Publish и  проверим работу полей со списками.

AccessVt20

С первым выпадающим списком всё хорошо. А со вторым — нет. Показываются номера Главных рубрик и обрезанный правый край

AccessVt21

Переходим в режим Конструктора, выделяем второй выпадающий список и в Окне свойств на вкладке Макет корректируем размеры

AccessVt22

Устанавливаем ширину столбцов в 0 см, 0 см, 4 см. и общую ширину списка в 4 см.

Заодно переключаемся на вкладку Другие, где даем правильное название полю со списком

AccessVt23

Перключимся на вкладку Данные и в поле Присоединенный столбец введем значение «3»

AccessVt28

Затем выделим поле со списком MainRub и дадим ему правильное название — ПолеСоСпискомРубрик и на вкладке Данные зададим присоединенный столбец как «2».

Теперь выпадающий список с подрубриками выглядит нормально:

AccessVt24

Не очень удобно, если для каждой главной рубрики в списке подрубрик отображаются все подрубрики. Сделаем так, чтобы для Продажи недвижимости в списке подрубрик отображались Дома, виллы и квартиры, а для главной рубрики Продажа автомобилей отображались только автомобили. Но перед этим самостоятельно замените поле TypePub (типы публикаций) на выпадающий список. Присоединенный столбец установите как «2».

Cогласование рубрик и подрубрик

Этот вопрос мы подробно рассматривали ранее, здесь будет более краткое изложение.

1. Создаем новый модуль. В модуль помещаем следующий код:

Option Compare Database
Option Explicit

Public NomerRub As Double

Public Function NRub()
NRub = NomerRub
End Function

Cохраняем модуль с именем Main

2. Загружаем форму Publish в режиме конструктора, выделяем в ней список рубрик, в Панели свойств открываем вкладу «События». Выбираем событие «После обновления» и нажав на кнопочку с тремя точками, «Программы», переходим в редактор VBA.

AccessVt25

В редакторе набираем следующие строки:

Private Sub ПолеСоСпискомРубрик_AfterUpdate()
NomerRub = Me!ПолеСоСпискомРубрик.Column(0)
Me!ПолеСоСпискомПодрубрик.Requery
End Sub

Заметьте, что первая и последняя строчки кода уже набраны.

Сохранив данные, закроем редактор кода, вернемся к форме в Режиме конструктора.

3. Dыделим список подрубрик и изменим для него запрос к источнику данных. В Панели свойств перейдем на вкладку Данные и поставим курсор в графу Источник строк

AccessVt26

Нажав на кнопочку с тремя точками попадаем в Построитель запросов

AccessVt27

в котором в строку «Условие отбора» вписываем NRub(). После этого закрываем окно Построителя запросов сохраняя внесенные изменения.

4. Продолжаем работать с формой в режиме конструктора. Выделим всю форму (Ctrl+R). Переходим в Панель свойств, вкладка «События», Текущая запись. Нажав на кнопку с тремя точками и выбрав «Программы» войдем в редактор VBA где введем следующий программный код:

Private Sub Form_Current()
If Not IsNull(Me!ПолеСоСпискомРубрик.Column(1)) Then
NomerRub = Me!ПолеСоСпискомРубрик.Column(0)
Me!ПолеСоСпискомПодрубрик.Requery
End If
End Sub

Как всегда, первую и последнюю строки вводить не надо. Сохраняем данные.

На этом всё по данному разделу. Проверьте работу формы, вводя рубрики и подрубрики. Они должны быть синхронизированы.

Добавление кнопок для формы Publish

На данную форму необходимо добавить кнопки:

1. Для удаления записи (введенной строки).

2. Для дублирования записи. Очень часто бывает так, что клиент сразу дает объявление не только на текущий выпуск, но и несколько следующих. Было бы нерационально одну и ту же информацию набирать несколько раз. Проще скопировать запись и изменить в ней только номер выпуска.

3. Для выхода из формы.

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

AccessVt29

Создание формы для вывода данных

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

Из главного окна базы данных выберем Формы > Создать > Конструктор

AccessVt30

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

AccessVt31

В процессе создания кнопки меняем ее название, а затем меняем название поля для ввода. Вот как это может выглядеть:

AccessVt32

Пора сохранить результат работы. Как обычно: File > Save, или Ctrl+S. При сохранении даем название форме — Output

Изменим оформление формы, изменив в окне свойств (вкладка Макет) следующие параметры: Полосы прокрутки, Область выделения, Кнопки перехода, Разделительные линии.

AccessVt33

На вкладке Другие устанавливаем Разрешить изменения макетатолько режим конструктора.

Выключим работу мастера и добавим еще одну кнопку на форму. Изменим надпись на ней — Выполнить.

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

А пока у нас новая форма выглядит так:

AccessVt34

Сохраним результат — Ctrl+S, и закроем форму.

Связывание двух форм

Загрузим форму Publish в режиме конструктора (Формы > Publish> Конструктор). Включим Мастер. Добавим кнопку на форму. В окне запустившегося Мастера выберем Работа с формой > Открыть форму. Нажимаем кноку Далее.

AccessVt35

Из окна доступных форм выбираем форму Output, нажимаем Далее и задаем название кнопки: Вывод данных для верстки.

В готовом виде это будет выглядеть так:

AccessVt36

Сохраняем результат и выходим из формы.

Свойства тэгированного файла

Откроем в Индизайне файл с таблицей, верстку которого надо автоматизировать.

(продолжение следует)