Как работать с базами MySQL из приложений на Delphi
Работать с MySQL так же просто как и с другими базами данных, отличие лишь в организации соединения с сетевыми БД. Я использую для этого компоненты MySQL Data Access Components (MyDAC) for Delphi, а именно версию DevArt MyDAC 8.4.11 Pro Full. Компоненты есть практически для каждой версии Delphi — от шестой до современных продуктов Embarcadero — Delphi XE 2 и т.д
Они легко устанавливаются и после установки мы можем их увидеть на вкладке MyDAC. Выбираем такой набор компонентов для работы с таблицами: MyConnection — обеспечивает соединение с базой данных, MyQuery — управляет SQL запросами к серверным таблицам, MyDataSource — получает набор данных, DBGrid — отображает набор данных. Т.е. устанавливаем классическую связку DBGrid1.DataSource:=MyDataSource1, MyDataSource1.Dataset:=MyQuery1, MyQuery1.Connection:=MyConnection1
В графике получается вот такая картина:
Настройка соединения с сервером производится в окошке Connect, которое появляется когда вы вносите данные в поля Username,Server,Password или Database компонента MyConnection1.
Соединение устанавливается переводом свойства MyConnection1.Connected в True. Можно делать это либо программно, либо в инспекторе объектов. Когда настройки будут созданы, они появятся в строке MyConnection1.ConnectString.
Обычно настройки сервера я делаю программно, как в примере ниже (вместо параметров написал их название). Обработчик кнопки для выбора данных из таблицы такой:
procedure TForm1.Button1Click(Sender: TObject); begin MyConnection1.Disconnect; MyConnection1.Close; MyConnection1.ConnectString:='User ID=ПОЛЬЗОВАТЕЛЬ;Password=ПАРОЛЬ;Data Source=СЕРВЕР;Database=БАЗАДАННЫХ'; MyConnection1.Connect; MyConnection1.Open; MyQuery1.Close; MyQuery1.SQL.Clear; MyQuery1.SQL.add('SELECT * FROM mails'); //выборка из таблицы mails MyQuery1.Open; end; |
После чего DBGrid заполнится набором данных.
Когда из ConnectString что-то неправильно, например адрес сервера, в таких случаях проверка идет очень медленно. Подскажите как с этим можно бороться?