Основные методы компонента Query.
Close |
Закрывает соединение с базой данных, переводя свойство Active в False. При изменении запроса в свойстве SQL сначала надо закрыть соединение. |
GetFieldNames |
Список имен полей таблицы, связанной с Query, который загружается в переменную типа TStrinds. Например: Query1.GetFieldNames(Combobox1) |
Open |
открывает соединение с базой данных и выполняет запрос SQL, если этот запрос содержит оператор Select |
Для осуществления любого другого запроса, кроме Select используется метод ExecSQL. Неизвестный запрос, сформированный в переменной ssql типа строка, можно выполнить с помощью следующих операторов: try Query1.Close; Query1.SQL.Clear; Query1.SQL.Add(ssql); Query.Open; … except on EDataBaseError do Query1.ExecSQL; end;
Работа с базами данных в сети. При работе с базами данных в сети используются компоненты DataBase и StoredProc (хранимая процедура). Компонент DataBase автоматически вставляется Delphi в любое приложение работающее с базами данных. Он решает следующие задачи: Создание связи с удаленным сервером Регистрацию пользователя при первом обращении к серверу создание локальных псевдонимов приложений Управление транзакциями Определение уровня изоляции транзакций Хранимые процедуры используются для того, чтобы использовать мощности сервера для решения каких-то задач, например поиска записей, удовлетворяющих заданному условию, и пересылки клиенту только результатов. Хранимые процедуры пишутся на языке сервера. //Select Dep Отдел, count (*) Всего_сотрудников FROM Pers Group By Dep procedure TForm1.CBDepChange(Sender: TObject); begin With Query1 do begin Close; Params[0].AsString:=CBDep.Text; Open; end; end;
28 Форматы SQL-команды добавления, удаления, изменения записей. Методы выполнения SQL- команд управления данными.
Использование языка SQL в Delphi Представляю краткую справочную информацию по использованию языка SQL в среде программирования Delphi. Для использования в программе команд языка SQL необходимо поместить на форму объект TQuery. Назовем его MyQuery. А поместив на форму объекты TDBGrid и TDataSource и связав все три объекта между собой, получим возможность видеть в объекте TDBGrid результаты SQL запросов. Добавление записи в таблицу Добавление записи в таблицу посредством SQL запроса выполняется следующим способом: with MyQuery do begin Active:=False; SQL.Clear; SQL.Add('INSERT INTO "'+Tbl+'"'); SQL.Add('VALUES ('+val1+', '+val2+', "'+val3+'")'); ExecSQL; end; Здесь val1, val2 - добавляемое значение целого или вещественного типа; val3 - добавляемое значение строкового типа. Последовательность расположения добавляемых значений в тексте запроса важна и должна соответствовать порядку следования полей таблицы.
Запрос SQL для удаления записей из таблицы Для удаления записей из таблицы tbl значения поля fld которых равны val используется следующий код: with MyQuery do begin Active:=False; SQL.Clear; SQL.Add('DELETE'); SQL.Add('FROM "'+Tbl+'"'); SQL.Add('WHERE '+Fld+' = "'+Val+'"'); ExecSQL; end; Запрос SQL для изменения записей в таблице Принцип работы запроса аналогичен запросу на удаление, необходимо лишь указать updFld - обновляемое поле и updVal - новое значение для этого поля. Пример запроса: with MyQuery do begin Active:=False; SQL.Clear; SQL.Add('UPDATE "'+Tbl+'"'); SQL.Add('SET '+UpdFld+' = "'+UpdVal+'"'); SQL.Add('WHERE '+Fld+' = "'+Val+'"'); ExecSQL; end; 29 Понятие и назначение хранимой процедуры, триггера и генератора. Хранимые процедуры Хранимая процедура представляет собой подпрограмму, расположенную на сервере и вызываемую из приложения клиента. Использование этих объектов увеличивает скорость доступа к БД по следующим причинам:
Еще одним преимуществом при обращении к хранимым процедурам является то, что будучи общими для всех приложений-клиентов, они реализуют единые для них правила работы с БД. Для выполнения процедуры, хранимой на сервере, в приложении используется компонент StoredProc. Создание и удаление хранимых процедур Хранимая процедура создается инструкцией create procedure СИмя процедуры> [(ССписок входных параметров>)] [returns (ССписок выходных параметров>)] as сТело процедуры> После имени процедуры идет необязательный список входных параметров, с помощью которых из приложения в процедуру передаются исходные данные. В свою очередь, список выходных параметров, с помощью которых в приложения передаются результаты выполнения процедуры, указывается после описателя returns. Для каждого параметра указываются его имя и тип (через пробел), разделителем параметров в списке служит запятая. ССписок параметров> = [СИмя параметра!> стип параметра!>,] [СИмя napaMeTpaN> стип napaMeTpaN>] При задании имен процедур и параметров (как и других объектов) для удобства целесообразно использовать мнемонические правила. Например, имя процедуры можно начинать с префикса р (от Procedure), имя входного параметра — с ip (от Input Parameter), а имя выходного параметра — с ор (от Output Parameter). При использовании параметра в выражениях тела процедуры перед его именем нужно указывать двоеточие (:). Тело процедуры состоит из двух частей — описательной и исполнительной — и имеет следующий формат: [собъявление переменных>] begin сИнструкция> [сИнструкция>] end В описательной части объявляются переменные, используемые внутри процедуры. Эти переменные являются локальными и по окончании работы процедуры теряют свои значения. В исполнительной части располагаются инструкции, выполняющие необходимые действия. Как и в языке Pascal, инструкции располагаются между ключевыми словами begin и end. В теле процедуры должна содержаться как минимум одна инструкция. Созданную хранимую процедуру можно удалить или изменить. Удаляется процедура инструкцией DROP PROCEDURE СИмя процедуры> Изменение процедуры выполняется инструкцией alter procedure, имеющей такой же формат, как и инструкция create procedure. После выполнения инструкции alter procedure предыдущее описание хранимой процедуры с указанным именем заменяется на новое описание. Создание и изменение триггера Создание триггера выполняется инструкцией create trigger, имеющей формат: CREATE TRIGGER СИмя триггера> FOR СИмя таблицы> [ACTIVE | INACTIVE] {BEFORE | AFTER} {UPDATE | INSERT | DELETE} [POSITION СЧисло>] AS сТело триггера> Описатели active и inactive определяют активность триггера сразу после его создания. По умолчанию действует active, и созданный триггер активен, т. е. при наступлении соответствующего события будет выполняться. Если триггер неактивен, то при наступлении соответствующего события он не вызывается. Ранее созданный триггер можно активизировать или, наоборот, деактивизировать. Описатели before и after задают момент начала выполнения триггера до или после наступления соответствующего события, связанного с изменением записей. Описатели update, insert и delete определяют, при наступлении какого события вызывается триггер — при редактировании, добавлении или удалении записей соответственно. Для одного события можно создать несколько триггеров, каждый из которых будет автоматически выполнен (если находится в активном состоянии). При наличии нескольких триггеров порядок их вызова (выполнения) определяет число, указанное в операнде position. Триггеры выполняются в порядке возрастания этих чисел. Созданный триггер можно удалить или изменить. Удаляется триггер инструкцией DROP TRIGGER СИмя триггера> Изменение триггера выполняется инструкцией alter trigger, формат которой не отличается от формата инструкции создания триггера. После выполнения инструкции alter trigger предыдущее описание триггера с указанным именем заменяется на новое. Программирование триггера аналогично программированию хранимой процедуры, для чего используется специальный язык, позволяющий также создавать хранимые процедуры.
ГЕНЕРАТОР |
Напомним, что, в отличие от базы данных Paradox, для таблиц InterBase отсутствует автоинкрементный тип, обеспечивающий автоматическую установку уникальных значений. Поэтому для обеспечения уникальности значений ключевых столбцов совместно с триггерами используются генераторы. Генератор возвращает уникальное целочисленное значение.
С помощью языка SQL-сервера можно создать генератор и установить для него начальное значение. Генератор создается следующией инструкцией:
CREATE GENERATOR СИмя генератора>; Начальное значение задается инструкцией:
SET GENERATOR СИмя генератора> ТО сНачальное значение>;
Начальное значение представляет собой целое число, начиная с которого формируется числовой ряд.
Обращение к созданному генератору выполняется с помощью функции
GEN_ID (СИмя генераторам-, <Шаг>) ;
Эта функция возвращает значение, увеличенное на целочисленный шаг относительно предыдущего значения генератора.
( Замечание ^
После определения начального значения генератора изменять его нельзя. Также нельзя изменять шаг. Невыполнение этого правила приведет к тому, что генератор может повторно возвратить уже имеющееся значение со всеми вытекающими последствиями.
Пример создания генератора:
CREATE GENERATOR GenStore; SET GENERATOR GenStore TO 1;
Здесь создается генератор GenStore, имеющий начальное значение 1. Пример обращения к этому генератору приведен в предыдущем разделе —
GEN_ID(GenStore, 1).
30 Структура хранимой процедуры.
текст процедуры (триггера) можно вставлять комментарии. Для ограничения комментариев используются символы /* и */.
В язык хранимых процедур включены инструкции:
объявления переменных;
присваивания;
условные;
составные;
цикла;
выбора записи;
выбора нескольких записей (набора данных);
возврата значений;
выхода из процедуры;
вызова процедуры;
посылки сообщения.
Инструкции должны заканчиваться точкой с запятой (кроме составной инструкции). Инструкция объявления переменных имеет следующий формат:
DECLARE VARIABLE СИмя переменной> сТип переменной>;
Допустимыми типами для переменных являются типы столбцов InterBase, например, VARCHAR ИЛИ DATE.
Переменные являются локальными и действуют с момента входа в процедуру до момента выхода из нее. Например, в командах
DECLARE VARIABLE Number INTEGER; DECLARE VARIABLE NewString VARCHAR(10); DECLARE VARIABLE WorkDate DATE;
объявляются три переменных Number, NewString и WorkDate целого типа, 1 Itiia "строка" и "дата" соответственно.
Инструкция присваивания предназначена для установки значения переменной и имеет вид
<Имя переменной> = сВыражение>;
При выполнении этой инструкции вычисляется значение выражения и присваивается переменной, имя которой задано в левой части инструкции. Можно указывать имена локальных переменных и выходных параметров, перед именем выходного параметра двоеточие не ставится. Переменная и выражение должны иметь совместимые типы, в противном случае при выполнении процедуры возникает ошибка. В качестве операндов выражения можно использовать значения, имена переменных и параметров, встроенные и пользовательские функции, а также вызовы генераторов.
Так, в примере
DECLARE VARIABLE n INTEGER; DECLARE VARIABLE s VARCHAR(30);
n = 17;
s = UPPER(s);
целочисленной переменной n присваивается значение 17, а символы строки s переводятся в верхний регистр.