Проектирование баз данных в среде OpenOffice.org Base/Программирование на OpenOffice.org Basic
Давайте рассмотрим способы написания и применения макросов на примере создания сложной формы "Продажи" 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
[править]Иногда необходимо определить с какой БД мы сейчас работаем. Определить путь к БД и имя файла из макроса можно следующим способом. Открыть xray, если вы просмотрите свойства объекта типа com.sun.star.comp.forms.ODatabaseForm, то увидите свойство URL, которое возвращает URL файла БД. Доступ к этому свойству и дескриптор текущего документа можно получить через CurrentComponent.[1]