
- •Разработка баз данных средствами MySql
- •Содержание
- •Введение
- •1. Основы работы в субд MySql
- •Системы управления базами данных
- •Основные характеристики MySql
- •Команда create database
- •Работа с таблицами
- •Синтаксис команды create table
- •Удаление таблиц
- •Синтаксис команды drop table
- •Типы данных
- •Числовые данные
- •Строковые данные
- •Календарные данные
- •Тип данных null
- •Выбор типа данных
- •1 Вариант.
- •2 Вариант.
- •3 Вариант.
- •2. Работа с таблицами. Ввод, извлечение, поиск и удаление данных Запись данных в таблицы
- •Заполните таблицу employee_data 5-10 записями. Запрос данных из таблицы MySql
- •Выборка данных с помощью условий
- •Операторы больше и меньше
- •Поиск текстовых данных по шаблону
- •Предложение group by и having
- •Удаление записей из таблицы
- •Задание 1
- •Задание 2
- •Задание 3
- •3. Логические операции в MySql
- •Операторы in и between
- •Упорядочивание данных
- •Ограничение количества извлекаемых данных
- •Извлечение подмножеств
- •Ключевое слово distinct
- •Изменение записей
- •Задание 1
- •Задание 2
- •Задание 3
- •Вычисление среднего значения
- •Именование столбцов
- •Подсчет числа записей
- •Группировка данных
- •5. Математические функции в MySql. Строковые функции. Работа с датой Математические функции MySql
- •Строковые функции
- •Ascii(строка)
- •Concat(строка1, строка2, ...)
- •Особенности типа данных Date
- •Операции с датами
- •Определение диапазонов
- •Использование Date для сортировки данных
- •Выбор данных с помощью Date
- •Текущие даты
- •Тип столбца Null
- •Задание 1
- •Задание 2
- •Задание 3
- •6. Переменные и временные таблицы. Многотабличные запросы
- •7. Вложенные запросы в MySql
- •8. Хранимые процедуры и функции
- •9. Курсоры в MySql. Представления. Конструкции управления потоком данных
- •10. Анализ и моделирование предметной области
- •1. Выбор и текстовое описание предметной области
- •2. Разработка концептуальной er-модели предметной области
- •3. Определение функциональных требований
- •11. Проектирование базы данных
- •1. Создание логической реляционной модели базы данных
- •2. Нормализация логической реляционной модели базы данных
- •1Нф (Первая Нормальная Форма)
- •2Нф (Вторая Нормальная Форма)
- •3Нф (Третья Нормальная Форма)
- •12. Проектирование физической модели бд и ее реализация
- •1. Создание физической модели базы данных
- •2. Реализация физической модели базы данных в коде
- •13. Наполнение и тестирование бд
- •1. Наполнение базы данных
- •2. Тестирование базы данных
- •14. Создание приложения к бд в среде delphi 7, с использованием AnyDac framework 1.7.0
- •1. Начало работы
- •2. Связь с таблицами
- •3. Отображение таблицы на форме
- •4. Компонент adQuery
- •5. Экспорт данных в Excel
- •6. Работа с внешними ключами
- •Рекомендуемая литература
- •Разработка баз данных средствами MySql
- •460844, Г. Оренбург, ул. Советская, 19
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);