Как связать таблицы в libreoffice base

Обновлено: 19.04.2024

В opensource офисных пакетах OpenOffice, LibreOffice есть редко используемая и очень скупо документированная возможность — программирование, которая позволяет быстро разрабатывать приложения, аналогичные, например, приложениям Microsoft Access. Сегодня я сделаю небольшой обзор возможностей программирования OpenOffice, LibreOffice.

Вопрос: а зачем?

Я не буду сейчас влазить в исторические причины, т.к. у работников, причастных к автоматизации — это и руководители предприятий, и дистрибьюторы ERP-систем, и IT-службы внутри предприятия, и консалтинг — у всех свои причины (зачастую подкрепленные денежной выгодой) отстаивать именно свою точку зрения. Но я думаю, все согласятся с тем что в повседневной работе подразделений предприятий Excel и его бесплатный аналог Calc (из пакета OpenOffice, LibreOffice) используется очень широко. И уж если такое явление существует, то можно утверждать что это уже не случайность, а так сказать производственная необходимость, и уж точно не вина работников — а скорее недоработка автоматизаторов.

Пакет LibreOffice сейчас актуален в версии 6.2 которую можно получить на сайте разработчика.

Также пакет предустановлен на многих дистрибутивах Linux (иногда не предустановлен пакет Base, так как он сравнительно редко используется).

На этапе создания новой базы данных Base можно выбрать вариант работы со встроенной базой данных или присоединиться к серверу базы данных. То есть многопользовательская работа поддерживается. Для экспериментов можно выбрать любой из вариантов.

Редактор макросов открывается последовательным выбором пунктов меню Tools->Macros->Organize Macros->LibreOffice Basic.

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

Создадим самый простой макрос:


Далее создадим форму Forms->Create Form In Design View. И добавим в конструкторе формы элемент кнопка. После создания кнопки распахнем палитру свойств кнопки, нажав правую кнопку мыши и далее последовательно выбрав Control->Execute Action->Macro->Имя библиотеки->Hello.

Сохранив форму вызываем ее на выполнение и наблюдаем работу макроса. Или не наблюдаем. Все дело в защите которая в связи с участившимися вредоносными макросами отключает их работу по умолчанию.

Если тем вызовет хоть какой-то интерес готов продолжить более конкретными темами.

Как связать таблицы в базе данных LibreOffice Base

Всем привет, друзья! Мы продолжаем изучать программу LibreOffice Base, и в этом уроке мы научимся создавать связи между таблицами, расскажу как связать таблицы в базе данных LibreOffice Base. Чтобы создать связь между таблицами, необходимо перейти на вкладку «сервис» и выбрать пункт «связи». В данном окне нам нужно выбрать те таблицы, которые мы будем связывать. Для этого нужно дважды кликнуть по названию таблицы.

Как связать таблицы в базе данных LibreOffice Base

Давайте сейчас я добавлю таблицы «клиенты» и «заказы», остальные таблицы я добавлю чуть позже. Закроем данное окно, откроем таблицу «клиенты» и таблицу «заказы».

Как связать таблицы в базе данных LibreOffice Base


Как связать таблицы в базе данных LibreOffice Base

Как связать таблицы в базе данных LibreOffice Base

Напомню, что в прошлом уроке мы в таблицу «клиенты» добавили 2 записи, таблица «заказы» у нас пустая. Друзья, ссылка на предыдущий урок тут.

Чтобы связать данные таблицы, нужно ключевое поле «код клиента» таблицы «клиенты» перенести на поле «код заказчика» таблицы «заказы». И у нас автоматически появляется связь «один-ко-многим». Это означает, что один клиент может в разное время совершить несколько заказов. Данное поле со стороны «единички» также называется первичный ключ. Поле со стороны «многие» называется внешний ключ. Друзья, у меня уже был более подробный урок про ключевые поля и какие типы связи бывают между таблицами. Ссылка тут.

Как связать таблицы в базе данных LibreOffice Base

Чтобы удалить связь между таблицами, необходимо выделить связь, щелкнуть по ней и нажать кнопку DELETE.

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

Как связать таблицы в базе данных LibreOffice Base

В таком случае система не даст создать связь между таблицами, так как у нас в подчиненной таблице (а подчиненной таблицей у нас является таблица «заказы»), в этой подчиненной таблице указана запись с таким заказчиком, которого нет в главной таблице (главной таблицей у нас является таблица «клиенты»). Поэтому чтобы данной ошибки не возникало, мы здесь должны указать того заказчика, который хранится в таблице «клиенты». Давайте, сейчас поставим «код заказчика» 1, сохраняем внесенные изменения. Возвращаемся к связям, берем поле «код клиента» и соединяем его с «кодом заказчика». У нас снова появляется связь «один-ко-многим».

Как связать таблицы в базе данных LibreOffice Base

Чтобы настроить связи между таблицами дважды кликаем по связи. У нас появляется окно настройки связи, давайте пробежимся по всем опциям, которые доступны в этом окне.

Как связать таблицы в базе данных LibreOffice Base

Сначала остановимся на столбике «при обновлении». Предположим у нас стоит пункт «не изменять», что это значит? Давайте это окно сейчас закрою, предположим у меня есть «код клиента» (вот код клиента 1), который сделал заказ под номером 0. Я в какой-то момент хочу поменять код этому клиенту и поставить например 10. Попробую сохранить это изменение и система говорит, что мы не можем изменить «код клиента», так как у нас существует связь между таблицами «клиенты» и «заказы».

Как связать таблицы в базе данных LibreOffice Base

Закрываем эту ошибку, возвращаем код клиента 1, снова идем в свойства связи и давайте здесь поставим «обновить каскадно». В этом случае, если мы будем в главной таблице изменять значение ключевого поля, то значение связанного поля будет также меняться в подчиненной таблице.

Давайте, мы снова вернёмся в свойства связи и выберем пункт «Установить NULL», нажимаем ok. Сейчас я снова поменяю «код клиента», сохраним все внесенные изменения и далее, чтобы изменения отобразились в подчиненной таблице, нажимаю на вот эту кнопку «обновить». Теперь, когда у нас обновляется поле главной таблицы, в подчиненной таблице в связанном поле NULL или пустое значение.

Как связать таблицы в базе данных LibreOffice Base

Давайте сейчас мы здесь оставим «обновить каскадно» и быстренько пробежимся по столбцу «при удалении». Давайте сейчас оставим при удалении «не изменять», нажмем ok. Давайте, я сейчас таблицу «заказы» закрою, выберу клиента под номером 100, нажимаю DELETE, нажимаю «да», система ругается. Она говорит о том, что мы не можем удалить запись в главной таблице «клиенты» пока существует связанные записи в подчиненной таблице «заказы».

Как связать таблицы в базе данных LibreOffice Base


Как связать таблицы в базе данных LibreOffice Base

Как связать таблицы в базе данных LibreOffice Base

Давайте нажмем ok, дважды кликнем по связи, выберем «удалить каскадно». Давайте, я еще раз открою таблицу «заказы», видите, у нас сейчас есть 1 запись, где «код заказчика» 100. Закрываю эту таблицу, снова выбираю записи «код клиента» 100, нажимаю DELETE, нажимаю «да», у нас удалилась запись в главной таблице. Снова открываем таблицу «заказы» и, как вы видите, сейчас данная таблица пуста.

Как связать таблицы в базе данных LibreOffice Base


Как связать таблицы в базе данных LibreOffice Base

Как связать таблицы в базе данных LibreOffice Base

Снова возвращаемся в свойства связи, «установить NULL», нажимаем ok. Вводим нового клиента и вводим новый заказ, который совершал этот клиент (клиент у нас под номеру 102).

Как связать таблицы в базе данных LibreOffice Base

Так давайте, я сейчас таблицу «заказы» снова закрою, выберу клиента 102, нажму DELETE, да, снова открою таблицу «заказы» и, как вы видите, в данном случае у нас записи остаются, при этом в поле «код заказчика» у нас снова проставляется значение null. Надеюсь, это понятно.

Как связать таблицы в базе данных LibreOffice Base

Давайте мы сейчас закроем данные таблицы, вернемся в окно «конструктор связей». Чтобы добавить оставшийся таблицы в конструктор связей, мы нажимаем данную кнопку «добавить таблицы» и здесь выбираем таблицу «исполнители», «прайс-лист» и «состав заказа».

Как связать таблицы в базе данных LibreOffice Base

Далее располагаем таблицы на рабочей области, выбираем поле «код заказа» таблицы «заказы» и переносим его на поле «код заказа» «состав заказа». Давайте здесь выберем «обновить каскадно» и «удалить каскадно». «Код работы» также переносим на поле «код заказа», выбираем «обновить каскадно», «удалить каскадно», ok. Последняя связь «код исполнителя» переносим на «код исполнителя» «обновить каскадно», «установить Null», окей.

Как вы наверно уже обратили внимание, связывание таблиц в данной программе очень похоже на связывание таблиц в программе microsoft access. Друзья, вот такой вот урок получился, надеюсь он будет вам полезен.
В этом уроки мы разобрались как связать таблицы в базе данных LibreOffice Base.

Как создать таблицы в базе данных LibreOffice Base

Всем привет, друзья! Сегодня постараюсь подробно и, по возможности кратко рассказать как создать таблицы в базе данных LibreOffice Base.

Как создать таблицы в базе данных LibreOffice Base

Если у вас данной программы нет на вашем компьютере, вы сможете скачать ее с официального сайта Libreoffice. Здесь надо будет перейти на вкладку «загрузить» и выбрать необходимую версию данной программы. Преимущество Libreoffice перед microsoft office — этот пакет абсолютно бесплатен.

Давайте снова вернемся в программу Libreoffice.
Чтобы создать базу данных, нам нужно открыть приложение Base, перед нами открывается мастер создания базы данных, и на этом шаге мы либо создаем новый файл базы данных либо открываем ранее созданный файл. Давайте сейчас мы создадим новую базу данных.

Как создать таблицы в базе данных LibreOffice Base

Нажмем «далее» выбираем опцию «нет мы не хотим регистрировать базу данных в Libreoffice», ниже оставляем галку «открыть базу для редактирования». Нажимаем готово.

Как создать таблицы в базе данных LibreOffice Base

Далее мы должны выбрать место, где будет храниться наша база данных. Я сохраняю в моих документах и назову данную базу «ремонт компьютеров». Именно такая тема будет нашей создаваемой базы. Нажимаем «сохранить» и перед нами открывается окно программы Libreoffice Base.

Как создать таблицы в базе данных LibreOffice Base


Как создать таблицы в базе данных LibreOffice Base

Слева перечислены все основные объекты, которые мы сможем создать в этой программе. По аналогии с программой Microsoft Access в данной программе мы также можем создавать таблицы, запросы, формы и отчеты. То есть типовые объекты, с помощью которых мы будем работать с данными. Конкретно в этом уроке я расскажу как создать таблицы в базе данных LibreOffice Base.

Как создать таблицы в базе данных LibreOffice Base

В Libreoffice существуют два способа создания таблицы: это создание таблицы с помощью мастера и создание таблицы с помощью конструктора. В данной программе конструктор называется дизайн. Давайте, создадим таблицу с помощью дизайна. Кликаем по «Создать таблицу в режиме дизайна».

Как создать таблицы в базе данных LibreOffice Base

Если вы смотрели мои уроки, где я показываю, как работать в конструкторе таблиц в программе microsoft access, то внешне конструктор таблиц Аксеса и дизайн таблиц Libreoffice Base очень похожи. Да, друзья, я забыл сказать какую базу мы начнем создавать в данном уроке. Я остановился на теме «база данных организации по ремонту компьютеров», то есть мы создадим базу данных для хранения информации о выполнении ремонтных работ сотрудниками фирмы. Мы будем хранить информацию по клиентам, по исполнителям, заказам, также у нас будет храниться прайс-лист на выполнение ремонтных работ. Также мы будем иметь в виду, в одном заказе могут фигурировать несколько видов ремонтных работ. Давайте начнем создавать таблицу «Исполнители».

Как создать таблицы в базе данных LibreOffice Base


Как создать таблицы в базе данных LibreOffice Base

Первое поле у нас будет «код исполнителя» — это будет числовой тип поля. Кликаем по выпадающему списку и выбираем пункт «целое Integer». Если мы хотим, чтобы данное поле было полем типа «счетчик», в свойствах поля мы выбираем пункт «автозначение» и ставим его в положение «да». Тем самым, у нас будет автоматически заполняться поле «код исполнителя». Обращу ваше внимание, после того, как «код исполнителя» стал счетчиком, программа Libreoffice Base автоматически сделала его ключевым полем.
Давайте дальше у нас будет поле «фамилия» — это будет текстовое поле длина 30 символов. «Имя» — это будет также текст 30 символов. Здесь можно копировать поля таблицы. Щелкаем по зеленому треугольнику, нажимаем Ctrl+C, щелкаем ниже и нажимаем Ctrl+V. Копируется тип поля, но не копируются имя поля.

Как создать таблицы в базе данных LibreOffice Base


Как создать таблицы в базе данных LibreOffice Base

Libreoffice Base сразу говорит нам о том, что в одной таблице не может быть двух полей с одинаковыми именами. Давайте здесь напишем «отчество». И последнее поле здесь будет «процент вознаграждения». Тип поля будет «короткое целое SmallInt». Каждый исполнитель получает фиксированный процент вознаграждения от стоимости выполнения работы. Давайте, нажмем кнопку «сохранить» и назовем таблицу «исполнители». ok.

Давайте, сейчас мы конструктор таблиц закроем. Дважды щёлкнем по таблице «исполнители» и введем буквально одну-две записи в данную таблицу. Обратите внимание ,в Libreoffice Base счетчик идет с нуля, а если мы вспомним Microsoft Access, то там счетчик по умолчанию начинался с единицы. Давайте сейчас закроем данную таблицу и перейдем к следующей таблице.

Как создать таблицы в базе данных LibreOffice Base

Это таблица «Прайс работ». Снова кликаем «создать таблицу в режиме дизайна». Так, в этой таблице будет следующие поля: «Код работы» — это у нас будет числовой тип поля, целое Integer. Давайте, я вам сразу покажу, как сделать поле ключевым. Мы щелкаем правой кнопкой мыши по нужному полю и выбираем пункт «первичный ключ». Всё, у нас появляется ключ рядом с именем поля, соответственно, мы понимаем, что поле «код работы» является ключевым.
Кратко скажу, что ключевые поля в данной работе нам понадобятся для того, чтобы связать наши таблицы. Связывать таблицы мы будем уже в следующем уроке.
Следующем полем здесь будет «название работы». «Название» — это текст, длина 50 символов. Далее идет «стоимость работ». И стоимость работ, как вы наверное уже догадались, должен иметь денежный формат, но если в microsoft access по умолчанию в выпадающем списке у нас был тип поля «денежный», то здесь такого поля нет. Что нужно сделать в этом случае?

Как создать таблицы в базе данных LibreOffice Base

Давайте сейчас мы выберем тип «Число Numeric». Длину поставим 10, дробную часть (это количество знаков после запятой) поставим 2. Далее скроллим ниже, здесь есть пункт «пример формата», нажимаем кнопку с тремя точками и уже здесь мы выбираем формат «денежный». Давайте щёлкнем «денежный» и нажмем ok. Далее сохраняем внесенные изменения, назовем таблицу «прайс-лист», ok.

Как создать таблицы в базе данных LibreOffice Base

Далее закроем конструктор и откроем таблицу «прайс-лист», чтобы внести в нее несколько записей. «Код работы» у нас сейчас не счетчик, а просто числовое поле, которое мы должны заполнять. Давайте я снова вернусь в конструктор таблицы «прайс-лист», правой кнопкой пункт «правка» и здесь, где «код работы», я поставлю «автозначение» — да. Закроем конструктор, сохраняем все изменения. Сейчас я ввёл только несколько записей, больше записей мы будем вводить, когда будем работать с формами. Сейчас я закрою данное окно, сохраним все внесенные изменения.

Как создать таблицы в базе данных LibreOffice Base

Следующей таблицей, которую мы создадим будет таблица «Клиенты». Вводим следующие поля: «код клиента» — это будет целое, «автозначение» ставим «да». Далее идет «фамилия», «имя», «отчество» и «телефон». «Телефон» мы поставим число, это будет обязательное поле, длина 15.

Как создать таблицы в базе данных LibreOffice Base

Далее мы переходим в «пример формата» и нажимаем кнопку с тремя точками. В этом списке выбираем пункт «особый», здесь в «код формата» вставляем следующее выражение. Нажимаем ok.

Как создать таблицы в базе данных LibreOffice Base

Сохраняем внесенные изменения. Сохраняем таблицу как «клиенты», ok. Далее закрываем конструктор, открываем таблицу «клиенты» и вносим несколько записей. Маска ввода, здесь в отличие от microsoft access, где маска сразу выводилось при вводе значения в поле, здесь такой маски нет. Но допустим мы вводим телефон, заданный формат появляется в данном поле после ввода данных, давайте еще введем одного клиента.

Как создать таблицы в базе данных LibreOffice Base

Так, если вы ввели свои данные, закрываем данную таблицу и создаем следующую таблицу. Это таблица «заказы». Мы также переходим в конструктор таблицы. «Код заказа» целое, автозначение ставим «да». «Дата заказа» это тип дата, «обязательное поле» ставим «да». «Пример формата», кликаем по кнопке с тремя точками, смотрим какие здесь можно задать форматы. Для данного поля нас будет интересовать второй вариант, нажимаем ok.

Как создать таблицы в базе данных LibreOffice Base

Далее можем указать «время заказа». Здесь выберем тип поля «время» и «пример формата» у нас будет следующий. Это просто часы и минуты, ok.

Как создать таблицы в базе данных LibreOffice Base

Далее у нас будет идти поле «код заказчика», здесь мы выберем пункт «целое». Давайте сохраним данную таблицу как таблицу «заказы», ок. Пока данную таблицу мы заполнять не будем, вернемся к заполнению этой таблицы, когда будем работать с формами.

Последняя таблица, которую мы создадим в этом уроке, эта таблица «состав заказа». Идем в конструктор таблиц, здесь пишем «код заказа». «Код заказа» у нас будет «целое». И «код работы» это также будет тип поля «целое». Данная таблица будет промежуточной таблицей между таблицами «заказы» и «прайс-лист», так как мы знаем, что в одном заказе может выполняться несколько работ. В данном случае оба эти поля будут ключевыми, то есть в данной таблице у нас будет составной первичный ключ. Чтобы эти два поля одновременно были ключевыми, мы зажимаем клавишу CTRL и кликаем поочередно по «коду заказа» и «коду работы». Нажимаем правую кнопку мыши и выбираем пункт «первичный ключ». Третье поле в данной таблице будет «код исполнителя», тип поля тоже будет «целое». Сохраняем данную таблицу как «состав заказа» и закрываем конструктор таблиц.

Как создать таблицы в базе данных LibreOffice Base

Друзья, вот такой вот урок получился, и надеюсь теперь вы знаете как создать таблицы в базе данных LibreOffice Base.

С формами в OpenOffice Base произошла некоторая путаница. Дело в том, что в процессе эволюции программного обеспечения от офисного пакета к среде для работы с базами данных, оказалось, что Формы, Форма, Forms и Form — это немного не одно и то же. И Form — это не только Form. Поясню подробнее.

Когда Вы открываете базу данных OpenOffice Base в режиме редактирования, то видите в левой части экрана четыре закладки. В русифицированной версии это будет звучать как

  • Таблицы
  • Запросы
  • Формы
  • Отчеты

Примечание. Поскольку форма это фактически экземпляр OpenOffice Writer — приложение можно создавать без загрузки компонента OpenOffice Base — прямо в OpenOffice Writer.

Каждая Форма имеет коллекцию Forms объектов Form. Вначале эта коллекция пустая. Несмотря на это, Вы можете открывать и закрывать Форму. И даже выводить в ней текстовую информацию. И только при добавлении нового элемента управления (например Button) система создаст объект Form с именем по умолчанию Form, если Вы до этого времени не создали такой объект сами.

Создавать новые Form удобнее всего из Навигатора форм (на палитре изображается в виде компаса), который также можно вызвать из меню View|Toolbar|Form Navigation. Объекты Form создаются или на верхнем уровне в коллекции Forms, или подчиненные другому объекту Form. Это никак не отражается на внешнем виде Формы, но может быть полезными при задании связей между таблицами.

image

Тут надо отметить одну аномалию объекта Form. Этот объект является в первую очередь объектом, связанным с таблицей базы данных или с запросом SQL. Можно думать о Form как об объекте ResultSet (так оно и есть на самом деле). С другой стороны, Form является контейнером для элементов управления, подобно FORM в документе HTML (и это тоже правда).

Откройте только что созданную Форму в режиме редактирования (правая кнопка мыши|Edit). Создайте в ней новый объект Form с именем Form, или другим Вам понравившимся именем. В этом элементе Form создайте дочерний элемент Form.

C каждой Form нужно связать существующую таблицу базы данных, запрос или SQL-запрос. В подчиненной Form можно задать правила, чтобы отражались данные отфильтрованные по значению связанных полей в основной Form по типу Master/Slave. Для этого в редакторе свойств подчиненной Form нужно заполнить свойства link master fields и link slave fields.

Теперь в каждую из Form добавим по элементу Table Control, выбрав соответствующую Form в Навигаторе форм>. Элемент Table Control отсутствует в панели доступных элементов. Для отображения расширенного списка элементов нужно в палитре элементов активировать кнопку More Controls. После добавления элемента Table Control необходимо войти в режим редактирования этого элемента и добавить необходимые для отображения колонки таблицы (правая кнопка мыши -> Insert/Replace/Delete Column)

Второй тип часто встречающийся на практике тип связи между таблицами (после Master/Slave), и который мы рассмотрим — связь типа Справочник. Мы храним в таблице данных ключ объекта GUID, autoincrement, а в отображаемой таблице выводим его полное наименование, взятое из связанной таблицы-«справочника». Для этого есть удобный механизм. В визуальном Конструкторе таблицы добавляем колонку типа List Box. Если была уже создана колонка типа Numeric/Text, в которой отображается ключ (а не наименование), есть возможность изменить его тип на List Box (правая кнопка мыши|Replace With|List Box). Далее редактируем список свойств колонки. На закладке data свойству Тype of List Content присваиваем значение SQL. Запрос в свойствеList Content должен в первой колонке содержать отображаемое значение, а свойство Bound Field индекс колонки с ключевым полем (если считать, что первая колонка имеет индекс 0). То есть в подавляющем большинстве запросов это будет 1 для запросов типа


Пока что была описана работа в режиме конфигуратора без программирования. Добавим функциональности при помощи макросов OO Basic.

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


Свяжем эту процедуру с событием Key released текстового поля (на закладке event списка свойств элемента). Заметим, что это текстовое поле должно быть расположено в другой Form (не в той на которую накладывается фильтр), чтобы перезагрузка oForm.reload() не «обнуляло» его текущее значение, введенное с клавиатуры.

products
— id (целое, первичный ключ)
— name (строка)

orders
— id (целое, первичный ключ)
— productId (целое)
— count (целое)
— date (тип данных Дата)

При задании свойств колонки date обратите, пожалуйста, внимание на отмеченные на рисунке стрелками свойства, которые позволяют отображать данные в нужном формате и использовать выпадающий календарь для выбора конкретной даты.

image

Теперь прямо в таблице можно добавлять и изменять данные. До определенного момента это удобно, похоже на привычную работу клиента с табличным процессором. Но в какой-то момент начинаются проблемы, также характерные для работы с табличными процессорами. Данные можно изменить случайно, даже не заметив этого. А заметив невозможно откатить все как было. Места для новых колонок мало, и может образоваться неприятная горизонтальная прокрутка. Заголовки колонок также имеют ограничение по размеру (иначе не поместятся по горизонтали), и это не позволяет дать подробное описание данных.

В качестве полумеры можно рядом с таблицей разместить обычные поля для ввода данных (Text Control, Numeric Control и т.д.). В качестве источника данных задать соответствующие поля таблицы orders и все будет работать. При навигации по набору данных будут меняться данные в полях ввода. При изменении данных в полях ввода будут меняться данные в таблице базы данных. Но выглядеть это решение будет не очень красиво.

Чтобы вызвать на экран редактор Диалогов, необходимо выбрать в меню Tools->Macros->Organize Macros->LibreOffice Basic->Organizer->Dialog->New|Edit|Delete. Хотелось бы иметь более быстрый способ добраться до этого редактора. После чего откроется редактор диалога (увы, не самый удобный), в котором мы создадим поля с именами полей таблицы базы данных. Как Вы помните Диалоги не связываются автоматически с таблицами базы данных поэтому мы напишем макрос, который сделает это. И в качестве соглашения об именовании определим имена полей ввода и полей таблицы базы данных одинаковыми.

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

image

Далее, добавим в Диалог две кнопки. Имена кнопкам дадим произвольные, но начинающиеся с подчеркивания, чтобы отличить их от полей базы данных. Каждой кнопке в палитре свойств можно задать действие. Зададим одой кнопке действие OK — она закроет Диалог с подтверждением действия. А второй — Cancel — она закроет диалог без подтверждения действия.

Закроем редактор Диалогов, и вернемся в редактор Формы. Создадим кнопку, вызывающую диалог и назначим ей процедуру-обработчик Order_Edit, в которой будем заполнять Диалог из таблицы базы данных FromBaseToDialog(oForm, oDialog), и сохранять данные из Диалога таблицу базы данных FromDialogToBase(oDialog, oForm).


Предполагается, что Диалог был сохранен в библиотеке Standard под именем dialogOrder. Естественно, Вы можете выбрать другие имена. Имена контролов, начинающиеся с подчеркивания пропускаются и не обрабатываются. Также не обрабатываются имена, начинающиеся с Label, которые используются для текстовых заголовков полей.

Вызов oDialog.Execute() = 1 отображает Диалог внутри окна Формы и приостанавливает работу макроса до нажатия кнопки OK или Cancel. При нажатии на кнопку OK выполнится равенство возвращаемого значения единице.

Читайте также: