Работа с записями из Delphi

Для того, чтобы работать с данными непосредственно из Delphi, использовался язык SQL – структурированный язык запросов. С помощью SQL можно добавлять, удалять, редактировать поля, выбирать из них определенные данные и т. д.

Но, для начала сделаем одну очень нужную вещь: чтобы клиенты, пришедшие первыми, получили покупку первыми, необходимо отсортировать нашу таблицу по датам. Делается это следующим образом:

client_query.Sort:='Date_query';

client_query в нашем случае – TDBTable, свойство объекта Sort позволяет сортировать данные по полям.

Чтобы добавить запись в нашу таблицу, необходимо набрать следующий код:

//sql-запрос на добавление значений в БД

//из соображений безопасности отключаем компонент запросов

ADOQuery1.Active:=false;

ADOQuery1.SQL.Clear;

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

with adoquery1 do begin

parameters[0].Value:=tx_fio.Text;

parameters[1].Value:=tx_product.Text;

parameters[2].Value:=strtoint(tx_value.Text);

parameters[3].Value:=d_qu.Date;

end;

//вставляем параметры в БД

ADOQuery1.SQL.Text := 'INSERT INTO client_query_table (FIO_client, Product_name, Date_query, Query_value) VALUES (:fio, :product, :date_q, :p_value)';

ADOQuery1.ExecSQL;

//обновляем компонент таблицы

form1.client_query.Active:=false;

form1.client_query.Active:=true;

Чтобы объяснить все вышеуказанное, обратимся еще и к комментариям. TADOQuery1 – это объект TADOQuery для работы с SQL-запросами. Чтобы можно было оперировать с переменными, которые мы передаем из программы в БД, необходимо создать несколько типизированных переменных.

TParameters – это упорядоченный массив параметров и обращаться к ним можно по индексам, которые начинаются с нуля. Как видно из листинга, каждому параметру присваивается свойство .Text.

На рисунке выше хорошо заметно, что все параметры типизированы, чтобы избежать потом ошибки при расчетах.

Один из параметров – дата – берется не из компонента TEdit, как можно заметить, прочитав листинг, а из компонента TMonthCalendar. С помощью этого компонента можно указать любую дату и через свойство объекта TMonthCalendar.Date присвоить параметру.

Собственно запросы происходят через свойство TADOQuery.SQL. Это свойство, естественно, должно содержать инструкции языка SQL во избежание ошибки. Поэтому, сначала мы отключаем компонент TADOQuery и посредством свойства TADOQuery.SQL.Text заполняем компонент инструкциями. В отличие от основной ветки SQL, в Delphi SQL не ставится точек с запятой в конце строчек.

Нужно обратить внимание, что при добавлении записи используется инструкция INSERT INTO. После INTO указывается имя таблицы, куда мы посылаем наши данные, а в скобках – последовательно поля (можно и без скобок, но если вы посылаете меньше параметров, чем нужно, программа выдаст исключение при отсутствии явного указания). Зачем явно указываются поля? Ключевое поле является автоматическим счетчиком, поэтому не заполняется при работе с БД. А тогда SQL должен передать запрос на добавление не 4-х полей, а 5-ти, что совершенно ни к чему После VALUESв скобках, также последовательно, указываются посылаемые нами параметры. Они указываются через двоеточие и через запятые.

Свойство ExecSQL TADOQuery позволяет запустить инструкции SQL. Таким образом, программа берет данные из параметров TADOQuery.Parameters(при необходимости их даже можно обработать), и при помощи инструкций SQL вставляет в необходимую таблицу.

Команды SQL:

Согласно общепринятому стилю программирования, операторы (и другие зарезервированные слова) в SQL всегда следует писать прописными буквами

Операторы SQL делятся на:

· операторы определения данных (Data Definition Language, DDL)

CREATE создает объект БД (саму базу, таблицу, представление, пользователя и т. д.)

ALTER изменяет объект

DROP удаляет объект

· операторы манипуляции данными (Data Manipulation Language, DML)

SELECT считывает данные, удовлетворяющие заданным условиям

INSERT добавляет новые данные

UPDATE изменяет существующие данные

DELETE удаляет данные

· операторы определения доступа к данным (Data Control Language, DCL)

GRANT предоставляет пользователю (группе) разрешения на определенные операции с объектом

REVOKE отзывает ранее выданные разрешения

DENY задает запрет, имеющий приоритет над разрешением

· операторы управления транзакциями (Transaction Control Language, TCL)

COMMIT применяет транзакцию.

ROLLBACK откатывает все изменения, сделанные в контексте текущей транзакции.

SAVEPOINT делит транзакцию на более мелкие участки.

 

Добавление инструкций производится не только через свойство SQL.Text, но и через SQL.Add. Так можно добавлять инструкции построчно, однако, чтобы избежать ошибок при выполнении ExecSQL, лучше пользоваться свойством SQL.Text.

В SQL ни в коем случае не должны использоваться зарезервированные слова: такие слова как value, if хоть и не приведут к исключению (что даже страшнее: программа не работает, ошибок не выдается), но инструкция не сработает.

При нажатии на кнопку «Рассчитать показатели…»будет показано диалоговое окно с расчетами по формулам теории массового обслуживания. При вводе формул использовался стандартный синтаксис Pascal.