Delphi. Работаем с MySQL
Дата: 13.10.2011 | Комментариев: 0 | Просмотров: 10822
В этой статье я расскажу как использовать БД MySQL при написании программ на Delphi.
Для этой цели нам нужно установить сам сервер MySQL.
Есть два способа:
1. Скачать инсталлятор MySQL с сайта производителя (скачайте и инсталируйте файл Windows (x86, 32-bit), MSI).
2. Скачать и установить Denwer (сайт Denwer здесь). Этот вариант отлично подходит тем, кто собирается писать программу, работающую не только из окошек Windows, но и через web-интерфейс. Такие программы обычно пишут на PHP и их очень удобно тестировать из Денвера, так как там уже установлен Apache.
Лично мне, больше нравится второй вариант. Я раньше писал программы такой структуры: серверная часть (это программа для администрирования БД, изменения настроек, параметров и т.п.) + клиентская часть (с ней работают десятки менеджеров, смотрят наличие товара на складе, расчитывают в программе стоимость товара и вносят остатки в БД). Все было бы хорошо, но была одна проблема - при изменении клиентской программы приходилось обновлять версии программы у всех менеджеров. Когда мне это надоело, я переписал клиентскую часть на PHP и "повесил" её на сервер. Теперь менеджеры заходят на сайт и работают прямо с сайта. К тому же, удобно сразу на сайте писать какие изменения в расчетах были сделаны и как им работать дальше.
Я не буду описывать процесс установки сервера на Windows. На эту тему сломано немало клавиш в интернете. Перейдем сразу к работе.
Сразу хочу сказать, что "Великий и Ужасный" PHPMyAdmin, который рекламируют и хвалят все подряд, для администрирования баз MySQL малопригоден. Им можно пользоваться если нет под рукой более удобной программы. Я бы рекомендовал HeidiSQL или какой-нибудь другой менеджер MySQL.
Так как эта статья предназначена начинающим, я опишу принцип подключения к БД пошагово.
Итак,
1. Запускаем сервер и создаем базу данных с названием "DB_test".
2. В этой БД создаем две таблицы с именами "Master_test" и "Detail_test".
3. В таблице "Master_test" создаем 2 поля: "ID" - автоинкремент, "Autor" - varchar(50).
4. В таблице "Detail_test" создаем 3 поля: "ID" - автоинкремент, "ID_autor" - int(11), "Books" - varchar(100).
Примечание:
а) автоинкрементное поле в любой таблице должно быть ВСЕГДА!.
б) использование типа поля varchar предпочтительнее, чем char, т.к. тип char всегда будет записывать 255 символов, забивая недостающие символы пробелами, а при выводе строки снова обрезать пробелы в конце. Тип varchar будет помнить только реальное количество символов.
а) автоинкрементное поле в любой таблице должно быть ВСЕГДА!.
б) использование типа поля varchar предпочтительнее, чем char, т.к. тип char всегда будет записывать 255 символов, забивая недостающие символы пробелами, а при выводе строки снова обрезать пробелы в конце. Тип varchar будет помнить только реальное количество символов.
Чтобы не создавать таблицы и поля вручную выполним вот такой sql-запрос
DROP TABLE IF EXISTS Detail_test;
CREATE TABLE `Detail_test` (
В В `ID` int(11) NOT NULL AUTO_INCREMENT,
В В `ID_autor` int(11) DEFAULT NULL,
В В `Books` varchar(100) DEFAULT NULL,
В В PRIMARY KEY (`ID`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=cp1251;
INSERT INTO Detail_test VALUES
В В (1, 1, 'Руслан и Людмила'),
В В (2, 1, 'Сказка о рабаке и рыбке'),
В В (3, 2, 'Три мушкетера'),
В В (4, 2, 'Изабелла Баварская');
DROP TABLE IF EXISTS Master_test;
CREATE TABLE `Master_test` (
В В `ID` int(11) NOT NULL AUTO_INCREMENT,
В В `Autor` varchar(50) DEFAULT NULL,
В В PRIMARY KEY (`ID`)
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=cp1251;
INSERT INTO Master_test VALUES
В В (1, 'А.С.Пушкин'),
В В (2, 'А.Дюма');
Теперь нужно определиться какими компонентами мы будем подключаться к MySQL из Delphi.
Вариантов много. Можно подключаться с помощью ADO, ZeosDBO и др. Я предпочитаю MyDAC (Data Access Components for MySQL). Это лучшие на сегодняшний день компоненты для MySQL. Не требуют дополнительных библиотек, самые безглючные и удобные в работе из всех существующих аналогов. Скачать эти компоненты в интернете не проблема. Можете поискать здесь на сайте. Мы будем рассматривать подключение к MySQL с помощью именно этих компонентов.
Запускаем Delphi, создаем новый проект и бросаем на форму следующие компоненты:
TMyConnection
TMyQuery - 2 компонента
TMyDataSource - 2 компонента
TDBGrid - 2 компонента
Сразу переименуем те компоненты, которые будут использоваться в коде:
MyConnection1 => MyDB
MyQuery1 => qMaster_test
MyQuery2 => qDetail_test
MyDataSource1 => dsqMaster_test
MyDataSource2 => dsqDetail_test
Кликаем два раза мышью по компоненту qMaster_test и в свойство SQL впишем
select * from Master_test order by autor
В свойство SQL компонента qDetail_test впишем
select * from Detail_test order by books
Установим следующие свойства компонентов:
qMaster_test.Connection:= MyDB;
qDetail_test.Connection:= MyDB;
dsqMaster_test.DataSet:=В В qMaster_test;
dsqDetail_test.DataSet:=В В qDetail_test;
DBGrid1.DataSource:= dsqMaster_test;В В
DBGrid2.DataSource:= dsqDetail_test;
qDetail_test.MasterSource:= qMaster_test;
qDetail_test.MasterFields:= 'ID';
Последняя установка свойства будет выглядеть так:
Все эти свойства не пишем в коде, а устанавливаем вручную в свойствах компонентов.
Далее щелкаем правой кнопкой мыши по компоненту qMaster_test, в выпадающем меню выбираем FieldsEditor (Редактор полей), по редакроку снова правой кнопкой мыши Add All Fields (Добавить Все Поля).
То же саме делаем с компонентом qDetail_test и двумя Grid-ами. Из Grid-ов можно удалить все поля кроме autor и books.
Для подключения к базе данных напишем такой код для OnCreate формы
procedure TForm1.FormCreate(Sender: TObject);
begin
В В В В MyDB.LoginPrompt := False;
В В В В MyDB.Port := 3306;
В В В В MyDB.Database := 'DB_test';
В В В В MyDB.Username := 'root';
В В В В MyDB.Password := '';
В В try
В В В В MyDB.Connected := True;
В В except
В В В В ShowMessage('Не удалось соединиться с базой данных');
В В В В Exit;
В В end;
В В qMaster_test.Open;
В В qDetail_test.Open;
end;
Компилируем приложение. Если все сделали правильно, то картинка будет примерно такая:
Можете попробовать изменять, добавлять и удалять записи.
Не забывайте что:
1. Перед удалением записи из родительской таблицы нужно сначала удалить все записи из дочерней.
2. Нельзя добавлять записи в дочернюю таблицу, если в родительской нет записей.
3. Нельзя выполнять Edit и Delete в таблице, если в ней нет записей.
... и много чего еще, но это тема для отдельного разговора.
1. Перед удалением записи из родительской таблицы нужно сначала удалить все записи из дочерней.
2. Нельзя добавлять записи в дочернюю таблицу, если в родительской нет записей.
3. Нельзя выполнять Edit и Delete в таблице, если в ней нет записей.
... и много чего еще, но это тема для отдельного разговора.
Проверку на удаление можно делать различными способами, например, написать такой код:
{Сделать недоступной кнопку "Удалить"}
Button_Delete.Enabled:= qDetail_test.RecordCount > 0;
или такой
{Ничего не делать, если таблица пуста}
qDetail_test.RecordCount < 1 then Exit else qDetail_test.Delete;
Думаю, смысл понятен.
Все. Маленькое приложение готово. Дальше все зависит от вашей фантазии...
Автор Delphi_Coder
Специально для delphi-z.ru.
Октябрь, 2011 г.
При перепечатке любых статей с сайта ссылка на сайт delphi-z.ru обязательна.
Все используемые на сайте статьи, файлы и логотипы компаний принадлежат их законным владельцам. Если вы являетесь правообладателем "Delphi. Работаем с MySQL" и не желаете, чтобы ваша информация находилась на нашем сайте, напишите нам и эта информация будет удалена.
Категория: Публикации » Публикации - Мои статьи
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.