Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
all_lab.doc
Скачиваний:
56
Добавлен:
14.11.2019
Размер:
1.42 Mб
Скачать

4. Компонент adQuery

Этот компонент служит для выполнения запросов на языке SQL. Если выполняемый запрос возвращает какие-либо данные, то они будут храниться в этом компоненте.

Чтобы выполнить запрос есть две команды:

  • ADQuery1.ExecSQL - применяется, если запрос ничего не возвращает.

  • ADQuery1.Active := true - применяется, если после его выполнения необходимо получить доступ к результатам запроса.

Сам текст SQL-запроса можно вписывать, работая с ADQuery1.SQL как с переменной типа TStrings, но есть более удобный способ, который выгодно применять, если необходимо выполнять один и тот же запрос, но с разными параметрами. Если дважды щелкнуть по компоненту, откроется окошко AnyDAC Query Editor, в котором нам понадобятся две закладки:

1) SQL - собственно сам запрос. Здесь можно вместо изменяемых значений вставлять в текст имена параметров. Перед именем параметра надо обязательно ставить знак : (двоеточие). Эти параметры тут же появляются на закладке Parameters.

2) Parameters - раздел описания параметров. У каждого параметра необходимо выбрать:

  • ParamType - это тип параметра (входной, выходной и т.д.);

  • DataType -тип данных этого параметра

Например простейший запрос можно записать так:

select * from classes where class_num=3

или с использованием параметра так:

select * from classes where class_num=:param1

при этом в коде надо будет присвоить этому параметру свое значение:

ADQuery1.Active:=false;

ADQuery1.Params[0].AsInteger:=3;

ADQuery1.Active:=true;

в этом примере для обращения к параметру используется его индекс, но также к параметру можно обращаться и по его имени:

ADQuery1.Params.ParamByName(’param1’).AsInteger:=3;

Примечание: после нажатия кнопки OK, если вам будет необходимо что-либо изменить придется удалить этот компонент и создать новый такой же, потому что, если редактировать уже существующий запрос возникает ошибка, и придется выгрузить Delphi с помощью Диспетчера задач.

P.S. почаще сохраняйте свой проект.

Добавление строк в таблицу

ADQuery.SQL:

insert into <table> (<field1>,<field2>,…)

values (:param1,:param2,…)

Кнопка «добавить»:

ADQuery.Params.Items[0].AsInteger:=strtoint(edit5.Text);

ADQuery.Params.Items[1].AsString:=edit6.Text;

……………………………………………………………..

ADQuery.Params.Items[n].AsString:=ComboBox.Text;

ADQuery1.ExecSQL;

ADTable1.Refresh;

Изменение данных

Допустим надо перевести всех учеников в следующий класс.

ADQuery.SQL:

update classes

set class_num=:num1

where class_num=:num2

Кнопка «перевести»:

procedure TForm1.Button14Click(Sender: TObject);

var i:integer;

y,m,d:word;

begin

for i:=11 downto 1 do

begin

DecodeDate(now,y,m,d);

if i=11 then ADQuery12.ParamByName('num1').AsInteger:=y

else ADQuery12.ParamByName('num1').AsInteger:=i+1;

ADQuery12.ParamByName('num2').AsInteger:=i;

ADQuery12.ExecSQL;

end;

init;

end;

Удаление строк из таблицы

Специальная процедура, удаляющая выделенную строку компонента ADTable.

procedure TForm1.del_rec(var adtable: TADTable);

var table,table_id:string;

id:integer;

begin

DelQuery1.SQL.Clear;

table:=adtable.TableName;//имя тблицы

table_id:=adtable.FieldDefs.Items[0].Name;//имя ключа

//(работает только если ключ – первое поле в таблице)

id:=adtable.Fields.Fields[0].AsInteger;//значение 1-го поля в таблице

DelQuery1.SQL.Append('delete from ' + table);

DelQuery1.SQL.Append('where ' + table_id + ' = ' + inttostr(id));

DelQuery1.ExecSQL;

DelQuery1.SQL.Clear;

adtable.Refresh;

end;

В обработчике кнопки «Удалить» надо всего лишь вызвать эту процедуру, указав нужный компонент в качестве параметра, например:

del_rec(ADTable1);

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