В данном тексте напишем программу, которая будет подключаться к серверу и опрашивать таблицу с базами данных. Результаты запроса – список баз данных, будем отображать в выпадающий список TCombobox.
Как подключиться из Delphi к MySQL?
Для разработки этого примера, предполагаем, что мы уже хорошо работаем с самим сервером MySQL. Для этого можете прочитать мой цикл статей MySQL – первые шаги для новичков.
Создадим простейшее подключение из клиента Delphi. Разместим на форме следующие компоненты – несколько labeledEdit, кнопки Connect и Disconnect, SQLConnection1, StatusBar снизу и все это на вкладке PageControl, так как будем расширять программу, в следующих статьях.
Кнопку Connect обработаем таким образом
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
procedure TForm1.Button1Click(Sender: TObject); begin with sqlconnection1 do begin Drivername:='MySQL'; with params do begin clear; add('Hostname='+LabeledEdit1.Text); add('port='+LabeledEdit2.Text); add('User_name='+LabeledEdit3.Text); add('Password='+LabeledEdit4.Text); add('database='+LabeledEdit5.Text); end; try Connected:=true; if connected=true then statusbar1.Panels[0].Text:='Connected' else statusbar1.Panels[0].Text:='Could not connect '; except showmessage('Error'); statusbar1.Panels[0].Text:='Could not connect '; end; end; end; |
Кнопку Disconnected таким образом…
1 2 3 4 5 6 7 8 9 10 11 12 |
procedure TForm1.Button2Click(Sender: TObject); begin try sqlconnection1.Connected:=false; if sqlconnection1.connected=true then statusbar1.Panels[0].Text:='Connected' else statusbar1.Panels[0].Text:='Disconnected'; except showmessage('error'); end; end; |
Проверяем работу программы,нажав на Connect…
Видим в StatusBar, надпись Connected, значит всё подключилось…
Теперь попробуем cобирать информацию о списке баз данных, для этого сделаем следующие вещи
Как получить список баз данных MySQL и вывести его в Delphi?
Добавим компонент SimpleDataSet1 – в него будем собирать данные из запроса о базах данных, и изменим LabeledEdit для выбора базы данных на ComboBox, чтобы выводить в него данные.
Когда Вы проделаете все шаги, результат будет примерно таким…
Итак, поехали…
Для того, чтобы нам получить список БД, нам изначально нужно законнектиться к базе под именем mysql и сделать такой запрос (Более подробно об обсуждении как делать запрос здесь)
1 |
SELECT schema_name FROM information_schema.schemata |
То есть, если бы мы делали это из клиента mysql.exe, то получилось бы таким образом…
Но мы находимся в Delphi, поэтому, предлагаю обработать получение списка данных в момент FormCreate главной и пока единственной формы.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
procedure TForm1.FormCreate(Sender: TObject); var DB:TStringlist; // Это список, в который будем загружать данные из SimpleDataSet i:integer; begin /////////Автор кода Пантелеев Станислав, сайт digital-flame.ru //Стартовое подключение к БД with sqlconnection1 do begin Drivername:='MySQL'; with params do begin clear; add('Hostname=localhost'); add('port=3306'); add('User_name=root'); add('Password=masterkey'); add('database=mysql'); end; try connected:=true; except showmessage('error'); end; //with end; {Если всё нормально - подключились - начинаем собирать данные...} with simpledataset1 do //Настраиваем Simpledataset... begin DataSet.CommandType:=ctQuery; DataSet.CommandText:='SELECT schema_name FROM information_schema.schemata'; end; //Загружаем данные DB:=Tstringlist.Create; // Создали в памяти список SimpleDataSet1.Connection:=sqlconnection1; // подключаем simpledataset... if SimpleDataSet1.Active=false then SimpleDataSet1.Active:=true; SimpleDataSet1.DataSet.Active:=true; SimpleDataSet1.First; // Ставим курсор в начало while not SimpleDataSet1.Eof do begin DB.Add(SimpleDataSet1.FieldByName('schema_name').AsString); // Загрузили в DB одно значение, соответствующее курсору SimpleDataSet1.Next; // перевели курсор на следующую запись... end; for i := 0 to DB.Count-1 do combobox1.Items.Add(DB[i]); combobox1.ItemIndex:=0; DB.Free; // Удалили из памяти список sqlconnection1.Connected:=false; // Расконнектились... //form create end; |
Соответственно обработку кнопки Connect тоже пришлось изменить таким образом, внедрив в неё combobox…
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
procedure TForm1.Button1Click(Sender: TObject); begin with sqlconnection1 do begin if connected=true then connected:=false; Drivername:='MySQL'; with params do begin clear; add('Hostname='+LabeledEdit1.Text); add('port='+LabeledEdit2.Text); add('User_name='+LabeledEdit3.Text); add('Password='+LabeledEdit4.Text); add('database='+combobox1.Items[combobox1.ItemIndex]); end; try Connected:=true; if connected=true then statusbar1.Panels[0].Text:='Connected to '+combobox1.Items[combobox1.ItemIndex] except showmessage('Error'); statusbar1.Panels[0].Text:='Could not connect '; end; end; end; |
Ну и под конец, немного разукрасил программу, использовав Alpha Skins…
Теперь введём неправильное значение
Исходники
Удачи в Ваших проектах. С уважением, Пантелеев Станислав.