MySQL на локальном компьютере
Дата: 29.10.2011 | Комментариев: 0 | Просмотров: 7091
Программисты, работающие с базами данных, хорошо знают возможности MySQL-сервера. А возможности эти почти безграничны. На MySQL работает 90% сайтов в интернете. Связка PHP + MySQL не имеет равных по популярности. Поддержка хранимых процедур, триггеров, движки InnoDB и MyISAM и многое-многое другое... На крупных предприятиях работают серверы MySQL с огромными объемами данных.При написании небольших программ разработчики обычно игнорируют MySQL из-за необходимости установки сервера, разграничения прав пользователей и т.п. Но самое главное, из-за невозможности переноса программы на другой компьютер на котором не установлен MySQL. Говорят, что использование MySQL в маленьких проектах - стрельба из пушки по воробьям.
Но бывают программы, которым не нужен сервер. В программе работает локально один человек, но использует очень большие объемы данных. "Заменители" BDE типа Absolute DB, Accuraser, Turbo DB, EasyTable и прочие для таких целей слишком слабы. Они не расчитаны для больших объемов данных. SQLite имеет мало типов полей и слишком ограниченные возможности. Для подобных целей хорошо подходит Firebird Embedded server. Но если про настройку Firebird Embedded написана куча статей, то про MySQL Embedded информации нет вообще, не считая нескольких строк в справке компонентов MyDAC.
Можно ли написать программу с использованием MySQL, которая будет запускаться с флешки на ЛЮБОМ компьютере?
Что понадобится
1. Непосредственно IDE (я использую Delphi 2010)
2. Установленные в IDE компоненты Data Access Components for MySQL Developer Edition (MyDAC). Скачать их можно у нас.
3. Файл libmysqld.dll. Это и будет наш сервер. Скачать его можно у нас.
4. Из папки ранее установленного сервера MySQL следующие папки:
\share\charsets\ с файлами кодировок. Кодировки хранятся в файлах *.xml. Ненужные можно удалить для уменьшения веса.
\share\english\ с файлом errmsg.sys для сообщений об ошибках.
\data\mysql\ - это база данных mysql, в которой содержатся данные сервера, пользователи, зоны времени, хранимые процедуры, справка и т.д. Кроме того в папке \data\ будут храниться все базы данных.
Где взять эти папки? Из любого установленного ранее MySQL-сервера. Например, из установленного Денвера. Свою базу mysql я не могу выложить на сайт, т.к. производил в ней много изменений в настройках.
Внимание! На сайте Devart написано, что официально MySQL Embedded не поддерживается для MySQL версии 5.0. Они рекомендуют использовать версии 4.1, 5.1 и другие. Может быть сейчас что-то изменилось и с версией 5.0 все будет работать как положено, но я не знаю, не проверял.
Создание приложения
1. Запустите Delphi, создайте новый проект и сохраните его, например, в папке D:\Test.
2. Положите файл libmysqld.dll в папку с проектом (туда где будет exe-файл)
3. В папке проекта создайте папку data (D:\Test\data\) и скопируйте в нее папку mysql вместе с содержимым (D:\Test\data\mysql\)
4. В папке проекта создайте папку share и скопируйте в нее две папки charsets (D:\Test\share\charsets\) и english (D:\Test\share\english\) вместе с содержимым.
5. На форму проекта положите компоненты MyEmbConnection, MyQuery, DBGrid, DataSource и Button
(рис. 1).
Для наглядности я здесь не изменял имена компонентов, но вы никогда так не делайте. Давайте компонентам осмысленные имена.
6. В свойствах компонентов свяжите их
DBGrid1.DataSource => DataSource1;
DataSource1.DataSet => MyQuery1;
MyQuery1.Connection => MyEmbConnection1;
7. Создайте текстовый файл с таким текстом
CREATE DATABASE DB_TEST;
CREATE TABLE DB_TEST.TEST_TABLE (
В В `ID` int(11) NOT NULL AUTO_INCREMENT,
В В `NAME` varchar(50) DEFAULT NULL,
В В PRIMARY KEY (`ID`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=cp1251;
INSERT INTO DB_TEST.TEST_TABLE VALUES
В В (1, 'Запись 1'),
В В (2, 'Запись 2'),
В В (3, 'Запись 3'),
В В (4, 'Запись 4'),
В В (5, 'Запись 5');
8. Сохраните этот файл в папке проекта с именем abc.sql.
9. Установите следующие свойства компонента MyEmbConnection
LoginPromt = > False
BaseDir = > '.'
DataDir = > 'data'
Option-Charset = > 'cp1251'
10. Так как вы будете работать только с высокоскоростными таблицами MyISAM, таблицы InnoDB вам не понадобятся. Кликните два раза по компоненту MyEmbConnection и установите галочку в пункте Disable the InnoDB storage engine.
Рис. 2
Строка подключения должна выглядеть примерно так:
--basedir=.
--datadir=data
--skip-innodb
Увидеть ее можно кликнув по кнопке Advanced на закладке Params (Рис. 2).
11. Проверьте возможность соединения с сервером, установив свойство компонента
MyEmbConnection1.Connected = > True;
Если соединение установилось - все ОК. Верните свойство Connected в False, т.к. в скомпилированном приложении сервер не разрешит соединиться второй раз.
Для события onclick кнопки Button1 напишите следующий код:
procedure TfrmMain.Button1Click(Sender: TObject);
begin
В В with MyQuery1 do
В В begin
В В В В Close;
В В В В SQL.LoadFromFile('abc.sql');
В В В В ExecSQL;
В В В В Close;
В В В В SQL.Text := 'SELECT * FROM DB_TEST.TEST_TABLE';
В В В В Open;
В В end;
end;
Если все сделали правильно, в папке \data\ создалась папка базы данных \DB_TEST\ с файлами таблиц. Закройте скомпилированное приложение и установите свойство компонента
MyQuery1.DataBase = > 'DB_TEST';
Это сделано для того, чтобы в sql-запросах в дальнейшем обращаться непосредственно к таблице без указания базы данных.
(select * from Table вместо select * from Database.Table).
Рис. 3
Стоила ли овчинка выделки?
Давайте проверим для чего все это делалось.
Измените код кнопки Button1 на такой
procedure TfrmMain.Button1Click(Sender: TObject);
var
В В i: Integer;
begin
В В with MyQuery1 do
В В begin
В В В В Close;
В В В В SQL.Text := 'SELECT * FROM DB_TEST.TEST_TABLE';
В В В В Open;
В В В В DisableControls;
В В В В for i := 0 to 50000 do
В В В В begin
В В В В В В Insert;
В В В В В В FieldByName('name').AsString := 'Запись ' + inttostr(i);
В В В В В В Post;
В В В В end;
В В В В EnableControls;
В В end;
В В ShowMessage('Готово');
end;
Скомпилируйте приложение и выполните код. У меня добавление 50 000 записей заняло около 4-х секунд. Согласитесь, что для локальной БД это более чем хорошо.
Итак, вся мощь МySQL у вас в одной папке. Пишите, дерзайте...
Удачи.
Скачать исходник
Delphi_Coder
Октябрь, 2011
При перепечатке любых статей ссылка на сайт delphi-z.ru обязательна.
Все используемые на сайте статьи, файлы и логотипы компаний принадлежат их законным владельцам. Если вы являетесь правообладателем "MySQL на локальном компьютере" и не желаете, чтобы ваша информация находилась на нашем сайте, напишите нам и эта информация будет удалена.
Категория: Публикации » Публикации - Мои статьи
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.