exotic whip

Все ленты — последние статьи

Delphi + MySQL

Delphi + MySQL 

25.05.2010

Предисловие

 


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

 

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


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

1
MySQL: IMySQL;


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

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


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

1
2
3
4
5
6
7
8
9
10
11
12
13
procedure TForm1.Button1Click(Sender: TObject);
<br>begin
<br>    MySQL := TMySQL.Create;
<br>    MySQL.Host := 'localhost';
<br>    MySQL.Port := 3306;
<br>    MySQL.User := 'root';
<br>    MySQL.Password := '';
<br>    MySQL.Database := 'test';
<br>    if MySQL.Connect then
<br>        Label1.Caption  := 'MySQL Connection Ok'
<br>    else
<br>        Label1.Caption  := MySQL.ErrorMessage;
<br>end;


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

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


Для второй кнопки тоже создаём событие OnClick и добавляем в неё следующий код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
procedure TForm1.Button2Click(Sender: TObject);
<br>var
<br>    Query: IMySQLQuery;
<br>begin
<br>    //Запрос
<br>    Query := MySQL.Query('SELECT `username` FROM `userlist` WHERE `id` = 1');
<br>    //Если произошла ошибка
<br>    if Query = nil then
<br>    begin
<br>        Label1.Caption  := MySQL.ErrorMessage;
<br>        Exit;
<br>    end;
<br>    //Выбираем первую запись
<br>    Query.RecordCount := 1;
<br>    //Выводим имя пользователя
<br>    Label1.Caption := Query.ValueByName['username'];
<br>end;


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

1
2
While Query.FetchRow do
<br>    Label1.Caption := Label1.Caption + #13 + Query.ValueByName['username'];


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

Запись


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

1
2
3
4
5
6
7
procedure TForm1.Button3Click(Sender: TObject);
<br>    if not MySQL.ExecSQL('INSERT INTO `userlist` (name, id) VALUES ("Новый пользователь", "5")') then
<br>    begin
<br>        Label1.Caption  := MySQL.ErrorMessage;
<br>        Exit;
<br>    end;
<br>end;


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

 

 АВТОР УТЕРЯН БЫЛ, НО СОЗДАЛ БЛОГ , я загрузил исходники на сервер под файлами  vit_MySQLConsole.rar, vit_MySQL.rar

 

В далеком 2007 году мною был написана Delphi компанента для работы с СУБД MySQL. Тогда же я выложил ее на своем сайте. Однако с тех пор сайт несколько раз переписывался и некоторый контент к сожалению был утерян. Я считал что компанента тоже потеряна…

Однако, сегодня, по просьбам трудящихся, я таки порылся в архиве старых исходников и нашел ее.

Если она еще кому-то нужна, то вот она.  (я загрузил исходники на сервер под файлами  vit_MySQLConsole.rar, vit_MySQL.rar)

А вот здесь можно найти MySQL консоль.

Eugene

Виталий, здравствуйте!

К сожалению не получается скачать файл MySQL.rar, подскажите как это можно сделать, или по-возможности отправьте мне этот файл на e-mail. Заранее благодарю.

alexey

Здравствуйте 

Всётаки есть компонента для delphi 7 или как поправить

  public type

Вот на эту строчку

Andrey Helldar

Юзаю Delphi 7. Заменил в файле &to на _to. Компонент все-равно не встает. Ругается на:

  TMySQLCustomDataSet = class(TComponent)

  public type

Вот на эту строчку

omickron

Отличный класс, спасибо.

Заметка. Если при попытке установить визуальный компонент, который будет использовать libmysql.dll, будет возникать ошибка IDE:

=====

Can't load package *packname*. 

Неверная попытка доступа к адресу памяти.

=====

попробуйте заменить libmysql.dll на библиотеку другой версии.

У меня аналогичная проблема была с версией 5.0.41.

kiligin

пользуюсь твоей компонентой, за что большое спасибо!

в случае чего у меня есть версия компонент 1.1 MySQL и MySQLClasses

AccrosS

Добрый день, возможно ли с помощью вашего компонента записывать данные в поле типа Blob?

AccrosS

blob я уже искал =) Однако с этим "подготовить строку" так и не смог разобраться =/

AccrosS

Я так и думал, записать в строку это не трудно, но появлется трабл с непечатными символами, из-за которых записать эти данные трудновато, не говоря уже о том что там могут быть разные ковычки о_О

Виталий Лещенко

Компонент был написан в более поздней версии. & позволяет в качестве переменной использовать зарегистрированное слово to.

Для компиляции в Delphi 7 просто замените &to на что-нибудь другое. Например _to.

Виталий Лещенко

Да, это возможно. Однако предварительно надо подготовить строку. Поищите *blob* в исходниках…

Виталий Лещенко

Алгоритм работы примерно такой: бинарные данные конвертируются в строку, затем эта строка передается в качестве параметра для sql запроса.

Виталий Лещенко

У TMySQLCustomDataSet Есть 2 метода:

function BinaryToString(const p: Pointer; size: Integer): string;
procedure StringToBinary(const s: String; p: Pointer; out size: Integer);
С помощью которых можно работать с бинарными данными. Эти методы предназначены как раз для того, чтобы не было проблем с непечатаемыми символами.
 

Виталий Лещенко

Компонент был написан на delphi 2005 или выше. Для того, чтобы он собрался в delphi 7 надо немного переделывать.

qwerty

Привет.

Пытаюсь добавить MySQL Control компонент, скачанный по представленной ссылке, а IDE (Delphi 7)при компиляции выдает, что "&" недопустимый символ в параметре to некоторых функций. 

Никто не подскажет как решить проблему? 

Алексей_Ko / 03.04.2014 / 14:34

Добрый день.

Извинитее за глупые вопросы.

Пользуюсь Вашим трудом давно, но только ДОБАВЛЕНИЕ, УДАЛЕНИЕ, ОЧИСТКА записей.

А вот тут встал вопрос о чтении данных. возникла ошибка.

При запросе: query_result := MySQL.Query('select * from rzd  '); выдает ошибку. Скорее всего не может прочитать строку, т.к.

при запросе: query_result := MySQL.Query('select kod1 from rzd  '); все работает.

А вот при : query_result := MySQL.Query('select kod4,kod1 from rzd  '); показывает только первое значение.

Если в запросе дольше 3 колонок, то ошибка.

Что может быть не так?

Виталий Лещенко / 03.04.2014 / 14:40

Если честно, то я уже лет 5 Delphi не запускал. Сейчас моя основная деятельность связана с C#.

Поэтому я понятия не имею почему что-то начало глючить. Исходники открыты, попроуйте подебажить.

Алексей_Ko / 03.04.2014 / 14:56

Спасибо.

Алексей_Ko / 04.04.2014 / 5:58

День добрый.

МОЖЕТ КОМУ И ПОМОГУ С MySQL.

Данные компонент:  MySQL, MySQLClasses немного доработал (да простит меня их Хозяин).

Но! Есть огромное НО. Сегодня 04.04.20014г., Все ID не работают с этими "модулями" (по коду SELECT*FROM), кроме старого Delphi 7.

Не работает на XE5, 2010,2007, читайте выше.

Оставить комментарий могут только зарегистрированные пользователи.

Войдите на сайт или зарегистрируйтесь, чтобы оставить комментарий.