Предисловие
Вот решил однажды написать приложение с помощью этой связки (Delphi + MySQL). Стандартными средствами пользоваться не хотелось и я отправился в Google на поиски, и через несколько часов поисков и чтений различных сайтов наткнулся на компоненту MySQL Control, написанной товарищем Виталием Лещенко, её я и выбрал. Хотя, также была найдена компонента ZEOSLib, более популярная и мощная по функционалу (Судя по отзывам), но желание опробовать компонент от отечественного производителя оказалось сильнее =) Поэтому ZEOSLib рассмотрим чуть ниже.
Установка и начало работы
Первым делом, после скачки компонента, разархивируем файл в папку {$Delphi}/lib/. Надеюсь с этим не у кого проблем не возникнет.
Теперь создадим новый проект в Delphi (Я использовал Delphi 7) и в раздел uses добавим: MySQL, MySQLClasses. А чуть ниже, в раздел private (или public или вообще в var, тут в зависимости от потребностей), добавим строчку:
Подготовка окончена.
Соединение с базой
Сейчас будем соединятся с БД, для этого добавьте на форму три кнопки и один 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, читайте выше.