ZeosDBO начало работы

01.07.2011
В этой небольшой заметке рассмотрим маленький примерчик, начала работы с компонентами ZeosDBO. А именно: подключение и небольшой запрос. Пример будет на основе БД MySQL

Подключаемся


Как устанавливать компоненты, было рассмотрено в предыдущей заметке (Установка компонентов ZeosDBO в Delphi7)
Первым делом добавим компонент ZConnection, он собственно и отвечает за подключение приложения к БД. Теперь приступим к его настройке:
//Имя сервера (ip адрес)

ZConnection1.HostName : String;
//Порт
ZConnection1.Port : Integer;
//Протокол (тип БД)
ZConnection1.Protocol : String;
//Имя БД
ZConnection1.Database : String;
//Имя пользователя
ZConnection1.User : String;
//Пароль
ZConnection1.Password : String;

Все комментарии даны в отрывке кода, теперь подключимся к MySQL установленной на локальном компьютере через стандартный порт 3306, к базе данных Example, стандартным пользователем root.
ZConnection1.HostName := 'localhost';

ZConnection1.Port := 3306;
ZConnection1.Protocol := 'mysql';
ZConnection1.Database := 'Example';
ZConnection1.User := 'root';
ZConnection1.Password := '';

Стоит отметить, раз мы подключаемся к MySQL значит в корне с нашей программой должны лежать библиотеки libmysql.dll. А лучший вариант, запихать эти библиотеки в папку WindowsSystem32.
Откуда их взять?
Самый простой вариант - скачать из интернета.
Или же при установке MySQL указываем что нам бы не помешало установить и динамические библиотеки.
Тоже самое касается, если вы будете подключаться к любой другой БД.

Запуск


Итак, у нас всё настроено, теперь осталось подключиться.
За это отвечает свойство Connected, для соединения установим его в true. А для отключения в false соответственно.
ZConnection1.Connected := true;

И если всё прошло нормально, то вы об этом сразу поймёте - отсутствием ошибок.

Запрос


Для запросов нам понадобится компонент ZQuery, закиним его на нашу форму.
Сразу же установим связь между ZQuery и ZConnection
ZQuery1.Connection := ZConnection;

Теперь собственно пишем сами запросы. За текст вопроса отвечает свойство SQL.Text, а за его выполнение ExecSQL.
Собственно, на последок небольшой пример запроса:
ZQuery1.SQL.Text := 'SEELECT * FROM `table`';

ZQuery1.ExecSQL;

Узнать количество выбранных записей, можно через свойство:
ZQuery1.RecordCount : Integer;

Извлечь значение из поля:
ZQuery1.FieldByName(const FildName: String);

Номер текущей записи:
ZQuery1.FetchRow : Integer;

Переход к следующей записи:
ZQuery1.Next;

Для своего удобства, я использую вот такие следующие функции.
Для вставки, удаления и обновления:
function TForm1.DBQuery(Query: string):boolean;

begin
try
ZQuery1.SQL.Text := Query;
ZQuery1.ExecSQL;
Result := True;
except
ShowMessage('Ошибка при выполнении запроса: "' + Query + '"');
Result := False;
end;
end;

Здесь в качестве аргумента функции передаём запрос, если всё прошло хорошо, функция вернёт true, и false в противном случае.
Пример:
Form1.DBQuery('INSERT INTO `table` (`pole1`, `pole2`) VALUES ("1", "2")');

Для считывания данных
function TForm1.DBSelect(query: string; OBJ: TZQuery; View_Err: integer = 1):boolean;

begin
try
OBJ.SQL.Text := query;
OBJ.Active := True;
if ((OBJ.RecordCount = 0) and (View_Err = 1)) then
begin
ShowMessage('База данных вернула пустой результат');
Result := False;
end
else
Result := True;
except
ShowMessage('Ошибка при выполнении запроса: "' + query + '"');
Result := False;
end;
end;

Здесь, у нас следующие параметры:
query - сам запрос;
OBJ - объект типа TZQuery, в который запишем результат;
View_Err - отображать или нет сообщение, если не выбрано не одной строки.
Пример:
if (Form1.DBSelect('SELECT `pole1` FROM `table` WHERE `pole2` = "2"', Form1.ZQuery1, 0) = false) then

Exit;

В данном случае если не выбрано не однйо строки, то ничего не произойдёт т.к. View_Err = 0, но если произойдет ошибка, выполнение программы приостановится.