Всем привет, когда я рассматривал тему, про то, как можно работать с 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.


Хочу заметить, что в настоящее время очень часто в строительстве стала применяться китайская фанера, что не просто так. Во-первых, довольно качественно ее изготавливают, во-вторых, подходит во многих видах строительных работ, ну а в-третьих, что в настоящее время очень главное, стоит довольно не больших денег.


Метки: , , , , , ,




К записи “Подключение к MySQL через ADO” оставлено комментариев: 41.

  1. Novichok:

    Здравствуйте Андрей
    А вы не подскажите, как ставит в ADO пароль в базу и как с ним работать

    • Andrey53:

      Вам для какой БД? для MySQL, то Вы создаете просто пользователя и пароль к нему, без него никак Вы не подключитесь, для БД MS Access, в самой СУБД необходимо ставить, а программно могу показать как использовать, только необходимо знать для какой СУБД!!!

  2. Денис:

    Я так понимаю, что речь идет про MySql, хотя тоже самое будет справедливо (почти) и для других серверов.

    Если MySql установлен локально, то по умолчанию имя для входа: root, без пароля. На сервере вы можете создать пользователя для какой то отдельной базы и использовать для подключения его. Процедура создания пользователя зависит от сервера который вы используете (MySql, MS Sql, …).

  3. Novichok:

    acces су поставил пароль но Microsoft jet 4.0 не хочет подключится
    подробно объясните, пожалуйста и программно как можно обращаться с ним

    а ёще DbGride есть dgmultiselect я хочу
    несколько записей в таблице, чтобы потом производить с ними какие-либо действия. Совершенно неважно, что потом с ними буду делать, печатать или удалять, важно то, что мне их надо как-то запомнить объясните, пожалуйста самый простой вариант

  4. коля:

    не могу подключиться к mysql которая на сервере, доступ открыт

    • Andrey:

      что конкретно не получается? может у Вас пользователь не создан, База не создана, не даны какие-то права для пользователя, пароль не верный

  5. Ahmad:

    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.

  6. woodhead:

    Спасибо, работает.
    Вопрос: нужно ли после «ShowMessage(IntToStr(RecordCount));» писать «Active:=False;»? Например, если на форме несколько компонентов ADOQuery, то эта строчка, наверное, лишней не будет?

    • Andrey:

      Activate нужен для того, чтобы активировать сам запрос, если Вы ему поставите false то он не будет выполняться, это в принципе не обязательно делать, просто не забывать потом его активировать

  7. woodhead:

    Здравствуйте, Андрей. Столкнулся с проблемой работы с 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 простейшие, без всяких трехэтажных вложений и проч. Почему так случилось, что эти запросы где-то накапливаются? И за какое время эти запросы считаются? Как обнулить счетчик этих запросов? Или он сам обнулится?

    • Andrey:

      Так может в ежесекундно с каждого клиента выполняет огромное количество запросов?

      • woodhead:

        16382/15/60=18 запросов/сек — разве это много? Вся проблема в том, что они накапливаются. Пока никак не могу добиться, чтобы счетчик запросов не увеличивался.

        • Andrey:

          можно тогда лучше посмотреть на стороне сервера, что за запросы там накапливаются

          • woodhead:

            Ну, пришлось тестировать на локальном компьютере, но не суть, т.к. вылезала та же самая ошибка. В логах MySQL постоянно в запросах присутствовало PREPARE (подготовка запроса) и EXECUTE (выполнение запроса), но совсем не было DEALLOCATE (удаление запроса). Как я понял, чтобы сделать DEALLOCATE, нужно использовать хранимые процедуры на стороне БД. Или использовать статические запросы к БД, тогда запросы на сервере накапливаться не будут, а будут сразу выполняться. Собственно, так и сделал. Все запросы перевел в статический вид, и проблема исчезла. А запросы с параметрами я использовал по незнанию их особенностей. Но ничего, после 3 суток курения мануалов и интернета стал в этом вопросе чуть продвинутей.

          • Andrey:

            Отлично, теперь кто сталкнется с такой еще проблемой, тоже буду знать ответ

  8. woodhead:

    Жаль, нельзя отредактировать сообщение. Хотел поблагодарить вас за ответ на сообщение от 21.10.2012.

  9. McLotos:

    Добрый вечер. Спасибо за статью, оказалась очень полезной, вот только один момент немного напрягает, нельзя ли сделать чтобы подключение к серверу проводилось не по «заданным ранее параметрам», а например через форму, т.е. ввёл юзверь данные в форму для подключения, прога его и законектила, в таком случае готовый проект можно будет ставить не только на сервере но и вообще где угодно, главное чтобы сеть была (WAN/LAN не важно)

    • Andrey:

      А Вы посмотрите строку в свойстве ConnectionString компонента TADOConnection там и должны задаваться все параметры подключения

  10. McLotos:

    А будет урок по подключению к MySQL через dbexpress -> TSQLConnection?
    а то просто у меня через неё сделано, и не могу понять на что она ругается, думал может будет такой урок и как раз разберусь со своей проблемой

  11. McLotos:

    А как сделать чтобы параметры подключения к БД брались не из строки, а из формы?
    Ну в 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

  12. […] я, можно было бы попробовать, как я подключался к MySQL подключиться через ODBC, но я почему-то не захотел, а просто сказал себе, зачем, […]

  13. Acidrain:

    Добрый вечер!
    Сделал все, как было описано в вашем посте, но столкнулся с проблемой. При выводе данных в DBGrid вместо текста выводиться (memo).В чем проблема и как её решить?

  14. Dag:

    Здравствуйте, не подскажете как в Дельфи подключить локальную базу MySql?

    • Andrey:

      вот так как и есть, сервер нужен и все, база, пользователь и пароль, локальный сервер localhost или 127.0.0.1

  15. Алексей:

    Здравствуйте. Спасибо за статью.
    Вроде все делаю так как написано, но при изменении свойства Active у qry1 (TADOQuery) на True получаю ошибку «Source character set not supported by client».

  16. Aleksey:

    Есть программа написанная на Delphi, она соединяется с бд в Mysql для добавление данных. При переносе Mysql на новый комп соединиться не выходит. ODBC Driver 3.51 установил как и на старом компе (настроил как показано у вас), Mysql последний ставил. База данных и пользователь (со всеми привилегиями) созданы. На старом компе в Источнике данных ODBC вообще пусто было. В чем может быть проблема?

  17. MANA:

    Здравствуйте, у меня такой вопрос. Можно ли подключиться из через делфи к бд(MySql)через сеть которая находиться на хостинге? Если не сложно объясните, кучу всего перерыл, но толком ничего не нашел. Дело в том что я хочу написать приложение для IOS, через Delphi XE4, через компонент FireDac так и не смог разобраться как это сделать. Заранее благодарен.

  18. Алексей:

    Доброго времени суток!У меня установлен Oracle MySQL и Delphi 7. Делал все по инструкции Вашей, но все равно не хочет подключаться. В чем может быть проблема?
    Заранее признателен.

    P.S. Выдает ошибку синтаксиса SQL при попытке в object inspector для элемента ADOQuery в поле Active выставить True

  19. Аноним:

    Здраствуйте Андрей ! Я установил коннектор но оно у меня на создание нового источнике не выходит ?!

Оставить комментарий на Andrey

Вы можете использовать следующие теги:

*