Delphi + MySQL

25.05.2010

Предисловие


Вот решил однажды написать приложение с помощью этой связки (Delphi + MySQL). Стандартными средствами пользоваться не хотелось и я отправился в Google на поиски, и через несколько часов поисков и чтений различных сайтов наткнулся на компоненту MySQL Control, написанной товарищем Виталием Лещенко, её я и выбрал. Хотя, также была найдена компонента ZEOSLib, более популярная и мощная по функционалу (Судя по отзывам), но желание опробовать компонент от отечественного производителя оказалось сильнее =) Поэтому ZEOSLib рассмотрим чуть ниже.

Установка и начало работы


Первым делом, после скачки компонента, разархивируем файл в папку {$Delphi}/lib/. Надеюсь с этим не у кого проблем не возникнет.
Теперь создадим новый проект в Delphi (Я использовал Delphi 7) и в раздел uses добавим: MySQL, MySQLClasses. А чуть ниже, в раздел private (или public или вообще в var, тут в зависимости от потребностей), добавим строчку:
MySQL: IMySQL;

Подготовка окончена.

Соединение с базой


Сейчас будем соединятся с БД, для этого добавьте на форму три кнопки и один Label. Первую кнопку назовём "Подключение", вторую "Считываем", а третью "Записываем" соответственно.
Создайте событие OnClick для первой кнопки и введите туда следующий код
procedure TForm1.Button1Click(Sender: TObject);

begin
MySQL := TMySQL.Create;
MySQL.Host := 'localhost';
MySQL.Port := 3306;
MySQL.User := 'root';
MySQL.Password := '';
MySQL.Database := 'test';
if MySQL.Connect then
Label1.Caption := 'MySQL Connection Ok'
else
Label1.Caption := MySQL.ErrorMessage;
end;

Как вы уже могли догадаться, данный код производит подключение к базе данных `test`, если подключение прошло успешно, то в Label1 появиться надпись - 'MySQL Connection Ok', в противном случае в Label мы увидим описание ошибки, по которой сможем устранить оную, а если не сможем, то Гугл нам поможет =)

Первый запрос


Для второй кнопки тоже создаём событие OnClick и добавляем в неё следующий код:
procedure TForm1.Button2Click(Sender: TObject);

var
Query: IMySQLQuery;
begin
//Запрос
Query := MySQL.Query('SELECT `username` FROM `userlist` WHERE `id` = 1');
//Если произошла ошибка
if Query = nil then
begin
Label1.Caption := MySQL.ErrorMessage;
Exit;
end;
//Выбираем первую запись
Query.RecordCount := 1;
//Выводим имя пользователя
Label1.Caption := Query.ValueByName['username'];
end;

Тут мы формируем запрос к таблице `userlist`, из которой выбираем имя (username) всех пользователей у которых значение в поле `id` равно 1.
Если всё прошло успешно, то в Label мы увидим имя пользователя с id равном единице.
Если же у нас много пользователей с id = 1, тогда последнюю строчку в процедуре заменим на:
While Query.FetchRow do

Label1.Caption := Label1.Caption + #13 + Query.ValueByName['username'];

Здесь мы перебираем все записи подошедшие под наш критерий (`id` = 1), и выводим их построчно в Label.

Запись


При нажатии на эту кнопку у нас будет добавляться новая запись в БД, содержащая в себе имя пользователя (Новый пользователь) и id равное 5.
procedure TForm1.Button3Click(Sender: TObject);

if not MySQL.ExecSQL('INSERT INTO `userlist` (name, id) VALUES ("Новый пользователь", "5")') then
begin
Label1.Caption := MySQL.ErrorMessage;
Exit;
end;
end;

Если в запросе есть ошибка то в Label выведется сообщение об этом. Аналогично происходит и обновление записи.
На этом пожалуй мы окончим знакомство с этим компонентом. Единственной проблемой у меня было то, что я не смог записать данные в поле типа BLOB...хотя может плохо пытался...А вот с ZEOSLib это было не сложно.