Все бесплатно
    Все ссылки на файлы, расположенные на страницах сайта, добавлены пользователями и доступны для бесплатного скачивания. За содержание этих файлов администрация сайта ответственности не несет.



Вопросы
  Сохранить документ Word как RTF на DELPHI
   Категория: Файловая система
  Как получить дату создания файла
   Категория: Файловая система
  Упаковать BD Accuracer
   Категория: Базы данных
  Как соединить несколько файлов в один
   Категория: Текст и строки
  Определить МАС-адрес карты
   Категория: Интернет и Сети
  Компоненты CoolBar и ControlBar
   Категория: Компоненты
  Округление времени до 5 мин
   Категория: Базы данных
  Получить список запущенных приложений
   Категория: Приложение

Публикации: Мои статьи

Delphi. Работаем с MySQL

Дата: 13.10.2011 | Комментариев: 0 | Просмотров: 10697
Delphi. Работаем с MySQL


В этой статье я расскажу как использовать БД 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 будет помнить только реальное количество символов.


Чтобы не создавать таблицы и поля вручную выполним вот такой 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. Работаем с MySQL


Запускаем Delphi, создаем новый проект и бросаем на форму следующие компоненты:

TMyConnection
TMyQuery - 2 компонента
TMyDataSource - 2 компонента
TDBGrid - 2 компонента

Delphi. Работаем с MySQL


Сразу переименуем те компоненты, которые будут использоваться в коде:

MyConnection1 => MyDB
MyQuery1 => qMaster_test
MyQuery2 => qDetail_test
MyDataSource1 => dsqMaster_test
MyDataSource2 => dsqDetail_test

Кликаем два раза мышью по компоненту qMaster_test и в свойство SQL впишем

select * from Master_test order by autor


Delphi. Работаем с MySQL


В свойство 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';

Последняя установка свойства будет выглядеть так:

Delphi. Работаем с MySQL


Все эти свойства не пишем в коде, а устанавливаем вручную в свойствах компонентов.

Далее щелкаем правой кнопкой мыши по компоненту qMaster_test, в выпадающем меню выбираем FieldsEditor (Редактор полей), по редакроку снова правой кнопкой мыши Add All Fields (Добавить Все Поля).

Delphi. Работаем с MySQL


То же саме делаем с компонентом 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;


Компилируем приложение. Если все сделали правильно, то картинка будет примерно такая:

Delphi. Работаем с MySQL


Можете попробовать изменять, добавлять и удалять записи.

Не забывайте что:
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" и не желаете, чтобы ваша информация находилась на нашем сайте, напишите нам и эта информация будет удалена.

Теги: мои статьи, SQL

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
  • Serge
  • Дата: 13 декабря 2011 18:40
  • 0 комментариев
  • 0 публикаций
Спасибо. Просто и доступно. Приятно осозновать что Delphi живет.
  • Serge
  • Дата: 18 декабря 2011 08:29
  • 0 комментариев
  • 0 публикаций
Добавлю, что для корректного отображения кирилицы в таблице необходимо присвоить свойству Оptions.Charset компонента TMyConnection значение cp1251
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.