Проектирование баз данных в среде OpenOffice.org Base/Программирование на OpenOffice.org Basic

Давайте рассмотрим способы написания и применения макросов на примере создания сложной формы "Продажи" disposal. Сначала разместим в форме все необходимые нам элементы управления.

Форма для таблицы «Продажи» — disposal

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

Сервис  Макросы; Управление макросами; OpenOffice.org Basic

и перейти в режим редактирования.

Менеджер макросов
Открытие менеджера макросов

Напишем простенький код, чтобы мы просто могли понять, что он работает, например:

 Sub Main
 MsgBox "Программа работает"
 EndSub

Пока этого достаточно, сохраняем нашу заготовку макроса.

Редактирование макроса

Наш макрос будет запускаться при изменении значения элемента «Номер рейса». Для этого открываем окно свойств элемента (щелчок правой кнопкой мыши → Элемент управления), переходим на вкладку «События» и для события «Состояние изменено» назначаем наш макрос.

Привязываем макрос к событию

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

Теперь необходимо переписать наш макрос так, чтобы он выполнял запрос к базе данных, брал информацию о типах салонов и показывал тип салона для выбранного самолета в текстовом поле. Код макроса будет выглядеть примерно так:

Sub Salons1

Dim Doc As Object
Dim Form As Object
Dim ListFlights As Object
Dim TextSaloon As Object
Dim CodeSaloon As Object

Doc = StarDesktop.CurrentComponent
Form = Doc.DrawPage.Forms.GetByIndex(0)
ListFlights = Form.getByName("ListFN")
TextSaloon = Form.getByName("Text3")
CodeSaloon = Form.getByName("Text4")

'============================
'Описание и код берем из базы
'============================

Dim RowSet As Object

Dim M As String
Dim My As String
Dim SQL As String
Dim MySQL As String

'Возвращает код типа салона и его название
M = "SELECT ap.type, st.name FROM airplanes AS ap, salon_types AS st WHERE st.type = ap.type AND ap.bnum IN (SELECT bnum FROM flights WHERE flight_num ="
My = M+ListFlights.Text
SQL = ")"
MySQL = My+SQL

'подключился к базе данных
	RowSet = createUnoService("com.sun.star.sdb.RowSet")
    	RowSet.DataSourceName = "air"
    	RowSet.User = "air"
    	RowSet.Password = ""
'сформировал запрос SELECT
	RowSet.Command = MySQL
'выполнил его и получил данные
	RowSet.execute()
    
RowSet.first()
TextSaloon.Text=rowSet.getString(2)
RowSet.first()
CodeSaloon.Value=rowSet.getString(1)

End Sub

Сохраняем макрос и проверяем работоспособность в форме.

Иногда необходимо определить с какой БД мы сейчас работаем. Определить путь к БД и имя файла из макроса можно следующим способом. Открыть xray, если вы просмотрите свойства объекта типа com.sun.star.comp.forms.ODatabaseForm, то увидите свойство URL, которое возвращает URL файла БД. Доступ к этому свойству и дескриптор текущего документа можно получить через CurrentComponent.[1]

Примечания

править