Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
БАЗЫ ДАННЫХ. курсовая на OpenOffice.doc
Скачиваний:
16
Добавлен:
23.11.2018
Размер:
1.75 Mб
Скачать

Универсальная форма для запросов на изменение данных

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

Создаем таблицу «commandsSQL», с колонками «Код» (целое, первичный ключ) и «strSQL» (Текст 1024 символа). Создаем форму, используя, мастер создания форм. Открываем форму в режиме изменения, задаем тип текста для текстового поля «Многострочный», добавляем кнопку «Выполнить», задаем обработчик события нажатия этой кнопки – процедуру «OnBtnExec»

'----------------------------------------------------------------------------

Sub OnBtnExec(oEvent)

'Выполняет запрос, заданный в поле txtSQL

'соответствующие всем студентам текущей группы

oForm = oEvent.Source.getModel().getParent()

oCon=oForm.ActiveConnection 'объект для доступа к базе данных

sSQL=oForm.getByName("txtstrSQL").text

oStatement=oCon.CreateStatement() 'объект для выполнения запросов

oStatement.executeQuery(sSQL) 'выполняем запрос

oCon.getTables().refresh()'Оповещаем OpenOffice об изменении базы

End Sub

'----------------------------------------------------------------------------

Внимание! Если ваш запрос создает или удаляет таблицу, после его выполнения необходимо переключиться на главное окно, в левом выбрать режим «Таблицы», затем выполнить из меню «вид» команду «обновить таблицы». Еще одно замечание. Прежде, чем выполнять запрос, сохраните запись, после выполнения запроса это сделать не удастся. Как с этим бороться, пока не знаю.

Выполнение параметрических запросов

Когда одну одно и то же SQL выражение надо выполнить много раз с разными параметрами, желательно вместо «CreateStatement()» использовать «PrepareStatement()».

При этом в SQL выражении на месте изменяемых параметров ставятся символы «?», а значения параметров задаются непосредственно перед выполнением запроса с помощью функций «SetString, SetInt, SetDouble»

'----------------------------------------------------------------------------

Sub OnBtnRnd(oEvent)

'добавляет в таблицу M1 случайные числа

'Перед вызовом этой функции необходимо удалить все данные из таблицы

Dim i as Integer

Dim j as Integer

Dim m as Double

oForm = oEvent.Source.getModel().getParent()

oCon=oForm.ActiveConnection 'объект для доступа к базе данных

sSQL="insert into ""M1"" (""i"",""j"",""M"") values (?,?,?)"

oStatement = oCon.PrepareStatement(sSQL)

Randomize

for i=1 to 3

for j=1 to 3

oStatement.SetInt(1,i)

oStatement.SetInt(2,j)

oStatement.SetDouble(3,20.0*Rnd-10.0)

oStatement.ExecuteUpdate()

next j

next i

End Sub

'----------------------------------------------------------------------------

Выполнение запросов на выборку данных

Функция «executeQuery» возвращает объект «выборка». Для перехода на первую и последующие записи выборки следует вызывать функцию «next()». Эта функция заодно возвращает «false» если записей больше нет. Внимание, даже если в выборке ровно одна запись, все равно надо вызвать функцию «next()».

Данные из текущей записи можно получить с помощью функций «getString, getInt, getDouble». В качестве параметра передается индекс колонки (считая с 1).

'----------------------------------------------------------------------------

Sub OnBtnShowSelRes(oEvent)

'Выводит в MessageBox список ФИО студентов с зачетками

oForm = oEvent.Source.getModel().getParent()

oCon=oForm.ActiveConnection 'объект для доступа к базе данных

strSQL="SELECT ""ФИО"",""№зачетки"" from ""студент"""

oStatement=oCon.CreateStatement() 'объект для выполнения запросов

oResult=oStatement.executeQuery(strSQL) 'выполняем запрос

s="Номера зачеток:"+Chr(10)

Do While oResult.next()

s=s+oResult.getString(1)+" - "+oResult.getString(2)+Chr(10)

Loop

MsgBox(s)

End Sub

'----------------------------------------------------------------------------

Запросы на выборку данных так же можно делать с использованием «PrepareStatement»

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]