MySQL и Delphi: с чего начать?
Что здесь используется:
Delphi 7
Direct
Mysql Objects v.1.1 for Delphi 1, 2, 3, 4, 5, 6 & 7
Я полагаю, что у вас уже установлен
Delphi и все работает замечательно. Чтобы база
MySQL была доступна из
Delphi, я рекомендую скачать и установить объекты, которые упростят работу с этой базой. На самом деле, в пакете
Delphi 7 уже есть некоторые компоненты, в закладке Internet, но те, которые я использую - намного удобнее.
Библиотека доступна по этому адресу:
http://svdpro.info/go.php?a=http://prdownloads.sourceforge.net/directsql/DirectMysqlObjects.zip?download
или демо версия:
http://svdpro.info/go.php?a=http://prdownloads.sourceforge.net/directsql/DemoObjectsWin.zip?download
Чтобы установить эти компоненты, вам нужно будет разархивировать ZIP файл в директорию {$Delphi}/lib/.
Чтобы использовать эти компоненты, добавьте интерфейсные коды:
uMySqlVio, uMysqlCT, uMysqlClient, uMysqlHelpers
Вот и все, что нужно для установки.
Содинение с базой
Надеюсь, у вас не возникло проблем с установкой и все работает отлично. Дальше я покажу вам, как подсоединяться к базе, как выполнять SQL запросы и как получать данные.
Для начала запустите Delphi и создайте новое приложение. Подключите интерфейсы uMySqlVio, uMysqlCT, uMysqlClient, uMysqlHelpers и сохраните проект.
Нам нужно использовать объект доступа к MySQL, поэтому в общей области на главной форме добавим следующее:
MySQLClient: TMySQLClient;
Еще нам понадобится один объект для выполнения SQL запросов:
MySQLResult: TMysqlResult;
Пишем код для подключения к базе и выполнения запроса. Двойной клик на главной форме и в процедуре OnCreate пишем:
MySQLClient := TMySQLClient.Create;
В процедуру OnDestroy добавляем такой код:
Код:
MySQLClient.Free;
if MySQLResult <> nil then
MySQLResult.Free;
Поместите новую кнопку в любое место формы, подпишите её 'Connect' и назовите её ButtonConnect.
Чтобы соединиться с базой, нам нужно определить такие параметры как: хост, порт, пользователь, пароль, UNIX сокет и имя базы данных.
Есть два способа: считать параметры из элементов ввода на форме или указать их по ходу выполнения программы.
В этом уроке я покажу вам оба варианта.
Длинный и плохой способ:
Код:
MySQLClient.Host := Edit1.Text;
MySQLClient.port := StrToInt(Edit2.text);
MySQLClient.user := Edit3.text;
MySQLClient.password := Edit4.text;
MySQLClient.UnixSocket := Edit5.Text;
MySQLClient.Db := Edit6.Text;
MySQLClient.UseNamedPipe := CheckBox1.Checked;
MySQLClient.UseSSL := CheckBox4.Checked;
MySQLClient.Compress := CheckBox8.Checked;
MySQLClient.TrySockets := CheckBox3.Checked;
if MySQLClient.Connect then
ShowMessage('connected ok!');
Мой любимый способ:
Код:
if FMysql.Connect(Edit1.Text, Edit3.Text, Edit4.Text, 'db', StrToInt(Edit2.text), '', false, 0) then ShowMessage('connected ok!');
Аргументы этой функции располагаются в таком порядке:
host, username, password, db, port, socket, try, sockets, client, flag
Сам запрос ничем не отличается от такого же, написанного на PhP.
Результат выполнения запроса присваивается переменной MySQLResult, а для выполнения используется объект MySQLClient. Функция выполнения запроса принимает три аргумента: сам SQL запрос, флаг - сохранять ли результат и переменную, куда будет записан флаг выполнения (true, false).
Код:
MySQLResult := MySQLClient.Query('SELECT * FROM admin_users WHERE username=''dummy_username'' and password=''dummy_pass''', True, OK);
Таким образом, строка кода, которую вы видите выше, присваивает результат выполнения запроса переменной MySQLResult. В запросе извлекается запись из таблицы admin_users. В логической переменной OK сохранен флаг выполнения, то есть, значение true свидетельствует об успешном выполнении, а false означает ошибку.
Теперь можно получить значение поля:
MySQLResult.FieldValueByName('username');
Как можно было догадаться, это скрипт проверки имени пользователя и пароля. Осталось только сделать проверку.
Я решил сделать это таким образом, что все проверяется в одном операторе IF, и конкретная причина не выдается:
Код:
if (MySQLResult.FieldValueByName('username') <> 'dummy_username') or (MySQLResult.FieldValueByName('password') <> 'dummy_pass') then
Здесь мы проверили жестко закодированное имя пользователя dummy_username с тем, которое возвратил запрос. Пароль проверяется таким же образом.
Это не лучший пример программирования, к тому же рекомендуется шифровать данные с помощью функции MD5. Кстати, для работы с ней, вам поможет ресурс www.torry.net. Это был всего лишь пример использования
Delphi!