Всем привет, когда я рассматривал тему, про то, как можно работать с MySQL в Delphi, то в ней я приводил название компонентов, через которые осуществлялся доступ к БД и таблицам БД. Данный компонент, для доступа к MySQL, который я упоминал раньше, носит название — MyDAC. Если честно, то я не вкурсе развивается он сейчас, доступен ли он для новых версий Delphi, но зато я знаю, что компоненты ADO, уже установлены почти во всех версиях Delphi и что с помощью них, можно осуществлять доступ к БД MySQL. Один, у них, есть небольшой минус, то, что не все драйверы БД установлены сразу, некоторые приходится искать и устанавливать самому, вручную. Но, легче, ведь, скачать драйвер БД, чем компонент, который возможно не станет на Вашу версию Delphi, тем более, еще может быть и платный.
Так вот, в этой статье, я хотел бы рассказать, как можно подключиться к БД MySQL, через стандартные компоненты ADO. Destkop-оболочки для управления MySQL у меня не установлено, поэтому я буду использовать denwer и создавать таблицы, БД, пользователей, через phpmyadmin.
Ну что, поехали. Для начала, нам потребуется драйвер ODBC, для доступа к MySQL - MySQL Connector ODBC. Я, скачал версию 5.1.7. Скачать, можно тут. После установки данного драйвера, мы формируем наш проект, на форме у меня следующие компоненты:
- TADOConnection
- TADOQuery
- TButton
Теперь давайте настроим наше подключение к MySQL. Выделяем компонент TADOConnection, далее открываем диалоговое окно свойства ConnectionString (можно и строковым значением подключить), после этого мы нажимаем на кнопку Build…, и после чего появляется следующее окно:
В данном окне выбираем драйвер — Microsoft OLE DB Provider for ODBC Drivers, в этом же окне нажимаем кнопку Далее>>. В следующей вкладке устанавливаем указатель на Использовать строку соединения и нажимаем кнопку Сборка, после чего появиться окно:
В данном окне необходимо указать путь к файлу настроек подключения к БД MySQL, но если у нас данного файла еще нету, то мы просто-напросто его создадим. В данном окне нажимаем на кнопку Создать, после чего появиться окно:
В данном окне выбираем MySQL ODBC Driver, то есть тот, который мы и устанавливали. После чего нажимаем на кнопку Далее> и в новом окне нажимаем кнопку Обзор и указываем путь для сохранения нашего файла настроек (не забываем ему также задать имя, имя файла настроек). После чего нажимаем на кнопку Готово и появиться окно подключения к БД MySQL:
Естественно в данном окне необходимо заполнить свои данные, в строчке TCP/IP Server можно указать также локальный адрес 127.0.0.1, а при нажатии на кнопку Test проверить подключение к Вашей БД.
Не забывайте, что у Вас сервер MySQL уже в это время должен быть включен, в моем случае работает denwer
После этого, как все настроено, во всех окнах нажимаем кнопку Ок. Все, теперь нам лишь остается проверить подключение, а точнее выполнить какой-нибудь запрос к нашей БД. Для этого выделяем компонент TADOQuery, в свойстве Connection выбираем TADOConnection, а на событие OnClick нашей кнопки пишем следующий код:
procedure TForm1.btn1Click(Sender: TObject);
begin
try
with qry1 do
begin
SQL.Clear;
SQL.Add('SELECT * FROM testtable');
Active:=True;
ShowMessage(IntToStr(RecordCount));
end;
except
on e:Exception do
end;
end;
Теперь просто можете работать, как и с обычной БД, как мы и работали, например с БД MS Access. Главное всегда, чтобы был путь к файлу настроек подключения к MySQL.
В следующей статье, мы рассмотрим, как можно работать с Blob-полями СУБД MySQL.
Хочу заметить, что в настоящее время очень часто в строительстве стала применяться китайская фанера, что не просто так. Во-первых, довольно качественно ее изготавливают, во-вторых, подходит во многих видах строительных работ, ну а в-третьих, что в настоящее время очень главное, стоит довольно не больших денег.
Похожие записи
Метки: Ado, ADoconnection, AdoQuery, mysql, TADOConnection, TADOQuery, БД
К записи “Подключение к MySQL через ADO” оставлено комментариев: 45.
Оставить комментарий
Здравствуйте Андрей
А вы не подскажите, как ставит в ADO пароль в базу и как с ним работать
Вам для какой БД? для MySQL, то Вы создаете просто пользователя и пароль к нему, без него никак Вы не подключитесь, для БД MS Access, в самой СУБД необходимо ставить, а программно могу показать как использовать, только необходимо знать для какой СУБД!!!
Я так понимаю, что речь идет про MySql, хотя тоже самое будет справедливо (почти) и для других серверов.
Если MySql установлен локально, то по умолчанию имя для входа: root, без пароля. На сервере вы можете создать пользователя для какой то отдельной базы и использовать для подключения его. Процедура создания пользователя зависит от сервера который вы используете (MySql, MS Sql, …).
acces су поставил пароль но Microsoft jet 4.0 не хочет подключится
подробно объясните, пожалуйста и программно как можно обращаться с ним
а ёще DbGride есть dgmultiselect я хочу
несколько записей в таблице, чтобы потом производить с ними какие-либо действия. Совершенно неважно, что потом с ними буду делать, печатать или удалять, важно то, что мне их надо как-то запомнить объясните, пожалуйста самый простой вариант
на выходных объясню
не могу подключиться к mysql которая на сервере, доступ открыт
что конкретно не получается? может у Вас пользователь не создан, База не создана, не даны какие-то права для пользователя, пароль не верный
Hi.
Thank you very much for this post.
This is a best solution for my question:
«How can connect mysql database from delphi?»
It’s very excelent.
Hi
Alles is geschreven in het artikel, kunt u meer
https://zaokomtek.ru/?p=330
https://zaokomtek.ru/?p=325
Спасибо, работает.
Вопрос: нужно ли после «ShowMessage(IntToStr(RecordCount));» писать «Active:=False;»? Например, если на форме несколько компонентов ADOQuery, то эта строчка, наверное, лишней не будет?
Activate нужен для того, чтобы активировать сам запрос, если Вы ему поставите false то он не будет выполняться, это в принципе не обязательно делать, просто не забывать потом его активировать
Здравствуйте, Андрей. Столкнулся с проблемой работы с MySQL из Дельфи. Вот проблема:
Пишу программу в Delphi с использованием БД MySQL на удаленном сервере.
Для запросов использую ADOQuery.
Решил провести тестирование работы программы с повышенной нагрузкой. Обновление данных сделал ежесекундное, еще и запустил 8 программ одновременно.
После некоторого времени работы (минут 15 от силы) получил во всех запущенных приложениях этой программы следующую ошибку:
Can’t create more than max_prepared_stmt_count statements (current value: 16382)
В интернете нарыл, что
max_prepared_stmt_count — определяет максимальное количество разрешенных динамических запросов. Значение по-умолчанию — 16 382, возможные значения — от 0 до 1 000 000.
Собственно, вопрос. Как сделать так, чтобы не превышать это значение? Запросы SQL простейшие, без всяких трехэтажных вложений и проч. Почему так случилось, что эти запросы где-то накапливаются? И за какое время эти запросы считаются? Как обнулить счетчик этих запросов? Или он сам обнулится?
Так может в ежесекундно с каждого клиента выполняет огромное количество запросов?
16382/15/60=18 запросов/сек — разве это много? Вся проблема в том, что они накапливаются. Пока никак не могу добиться, чтобы счетчик запросов не увеличивался.
можно тогда лучше посмотреть на стороне сервера, что за запросы там накапливаются
Ну, пришлось тестировать на локальном компьютере, но не суть, т.к. вылезала та же самая ошибка. В логах MySQL постоянно в запросах присутствовало PREPARE (подготовка запроса) и EXECUTE (выполнение запроса), но совсем не было DEALLOCATE (удаление запроса). Как я понял, чтобы сделать DEALLOCATE, нужно использовать хранимые процедуры на стороне БД. Или использовать статические запросы к БД, тогда запросы на сервере накапливаться не будут, а будут сразу выполняться. Собственно, так и сделал. Все запросы перевел в статический вид, и проблема исчезла. А запросы с параметрами я использовал по незнанию их особенностей. Но ничего, после 3 суток курения мануалов и интернета стал в этом вопросе чуть продвинутей.
Отлично, теперь кто сталкнется с такой еще проблемой, тоже буду знать ответ
Жаль, нельзя отредактировать сообщение. Хотел поблагодарить вас за ответ на сообщение от 21.10.2012.
Добрый вечер. Спасибо за статью, оказалась очень полезной, вот только один момент немного напрягает, нельзя ли сделать чтобы подключение к серверу проводилось не по «заданным ранее параметрам», а например через форму, т.е. ввёл юзверь данные в форму для подключения, прога его и законектила, в таком случае готовый проект можно будет ставить не только на сервере но и вообще где угодно, главное чтобы сеть была (WAN/LAN не важно)
А Вы посмотрите строку в свойстве ConnectionString компонента TADOConnection там и должны задаваться все параметры подключения
А будет урок по подключению к MySQL через dbexpress -> TSQLConnection?
а то просто у меня через неё сделано, и не могу понять на что она ругается, думал может будет такой урок и как раз разберусь со своей проблемой
К сожалению такого урока не будет, по крайней мере в ближайшее время
А как сделать чтобы параметры подключения к БД брались не из строки, а из формы?
Ну в TSQLConnection я делал обычно так
procedure TForm1.bConnectClick(Sender: TObject);
var
SQLConnector:TSQLConnection;
begin
SQLConnector:= TSQLConnection.Create(nil);
SQLConnector.DriverName := ‘dbxmysql';
SQLConnector.GetDriverFunc := ‘getSQLDriverMYSQL50′;
SQLConnector.LibraryName := ‘dbxopenmysql50.dll';
SQLConnector.VendorLib := ‘libmysql.dll';
SQLConnector.Params.Append(‘Database=’ + eBase.Text);
SQLConnector.Params.Append(‘UserName=’ + eUser.Text);
SQLConnector.Params.Append(‘Password=’ + ePass.Text);
SQLConnector.Params.Append(‘HostName=’ + eHost.Text);
SQLConnector.Open;
// … do stuff
//SQLConnector.Free;
end;
e* это edit
с Dbexpress врятли что подскажу Вам
[…] я, можно было бы попробовать, как я подключался к MySQL подключиться через ODBC, но я почему-то не захотел, а просто сказал себе, зачем, […]
Добрый вечер!
Сделал все, как было описано в вашем посте, но столкнулся с проблемой. При выводе данных в DBGrid вместо текста выводиться (memo).В чем проблема и как её решить?
Здравствуйте, не подскажете как в Дельфи подключить локальную базу MySql?
вот так как и есть, сервер нужен и все, база, пользователь и пароль, локальный сервер localhost или 127.0.0.1
Здравствуйте. Спасибо за статью.
Вроде все делаю так как написано, но при изменении свойства Active у qry1 (TADOQuery) на True получаю ошибку «Source character set not supported by client».
Сегодня проделал это на виртуальной машине, там все работает…
а какая операционка у Вас и на виртуальной машине?
Основная Windows 7, на виртуальной Windows XP
Если честно, не знаю, так как я это тестировал на Delphi 7+Windows XP
Все заработало после переустановки Windows 7. Видимо в моем случае с драйверами подключения что-то было напутано.
Есть программа написанная на Delphi, она соединяется с бд в Mysql для добавление данных. При переносе Mysql на новый комп соединиться не выходит. ODBC Driver 3.51 установил как и на старом компе (настроил как показано у вас), Mysql последний ставил. База данных и пользователь (со всеми привилегиями) созданы. На старом компе в Источнике данных ODBC вообще пусто было. В чем может быть проблема?
ну а ошибку хоть какую-нибудь пишет?
Ошибка соединения с сервером.
You get a lot of respect from me for writing these helpful artislec.
Здравствуйте, у меня такой вопрос. Можно ли подключиться из через делфи к бд(MySql)через сеть которая находиться на хостинге? Если не сложно объясните, кучу всего перерыл, но толком ничего не нашел. Дело в том что я хочу написать приложение для IOS, через Delphi XE4, через компонент FireDac так и не смог разобраться как это сделать. Заранее благодарен.
Доброго времени суток!У меня установлен Oracle MySQL и Delphi 7. Делал все по инструкции Вашей, но все равно не хочет подключаться. В чем может быть проблема?
Заранее признателен.
P.S. Выдает ошибку синтаксиса SQL при попытке в object inspector для элемента ADOQuery в поле Active выставить True
Здраствуйте Андрей ! Я установил коннектор но оно у меня на создание нового источнике не выходит ?!
Китайская фанера — самый интересный момент:)
Ну кому как!
Доброго вам денег.
Строка:
Provider=MSDASQL.1;Persist Security Info=False;Extended Properties=»Driver=MySQL ODBC 5.2 Unicode Driver;SERVER=localhost;UID=root;DATABASE=db-name;PORT=3306″ — это всё работает, но вот как сделать клиента?
Что-то вроде:
Provider=MSDASQL.1;Persist Security Info=False;Extended Properties=»Driver=MySQL ODBC 5.2 Unicode Driver;SERVER=192.168.0.1;UID=root;DATABASE=db-name;PORT=3306″
Не совсем понял вопроса?