Проектирование баз данных в среде OpenOffice.org Base/Программирование на OpenOffice.org Basic
Давайте рассмотрим способы написания и применения макросов на примере создания сложной формы "Продажи" disposal. Сначала разместим в форме все необходимые нам элементы управления.
![](http://upload.wikimedia.org/wikipedia/commons/thumb/4/42/OpenOffice.org_Base_form5.png/220px-OpenOffice.org_Base_form5.png)
Чтобы назначить некий макрос для обработки некого события, его необходимо сначала написать. Чтобы написать макрос нам необходимо зайти в менеджер макросов
Сервис → Макросы;→ Управление макросами;→ OpenOffice.org Basic
и перейти в режим редактирования.
![](http://upload.wikimedia.org/wikipedia/commons/thumb/d/d5/%D0%9C%D0%B0%D0%BA%D1%80%D0%BE%D1%81_OpenOffice.org_Basic_Macroses_Managment.png/220px-%D0%9C%D0%B0%D0%BA%D1%80%D0%BE%D1%81_OpenOffice.org_Basic_Macroses_Managment.png)
![](http://upload.wikimedia.org/wikipedia/commons/thumb/0/08/OpenOffice.org_Base_Macroses.png/220px-OpenOffice.org_Base_Macroses.png)
Напишем простенький код, чтобы мы просто могли понять, что он работает, например:
Sub Main
MsgBox "Программа работает"
EndSub
Пока этого достаточно, сохраняем нашу заготовку макроса.
![](http://upload.wikimedia.org/wikipedia/commons/thumb/1/17/OpenOffice.org_Base_Macros_Edit.png/220px-OpenOffice.org_Base_Macros_Edit.png)
Наш макрос будет запускаться при изменении значения элемента «Номер рейса». Для этого открываем окно свойств элемента (щелчок правой кнопкой мыши → Элемент управления), переходим на вкладку «События» и для события «Состояние изменено» назначаем наш макрос.
![](http://upload.wikimedia.org/wikipedia/commons/thumb/7/77/OpenOffice.org_Base_Macros_Action.png/220px-OpenOffice.org_Base_Macros_Action.png)
Сохраняем форму и проверяем работу макроса. При изменении элемента «Номер рейса» должно появится сообщение, о том что "Программа работает", как мы и прописали в теле нашего макроса.
Теперь необходимо переписать наш макрос так, чтобы он выполнял запрос к базе данных, брал информацию о типах салонов и показывал тип салона для выбранного самолета в текстовом поле. Код макроса будет выглядеть примерно так:
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
[править]Иногда необходимо определить с какой БД мы сейчас работаем. Определить путь к БД и имя файла из макроса можно следующим способом. Открыть xray, если вы просмотрите свойства объекта типа com.sun.star.comp.forms.ODatabaseForm, то увидите свойство URL, которое возвращает URL файла БД. Доступ к этому свойству и дескриптор текущего документа можно получить через CurrentComponent.[1]