В прошлой статье по работе с базой данных MySQL c использованием Denwer мы рассмотрели какие компоненты можно использоваться для этого, а также рассмотрели простую работу подключения к данной БД, кроме этого необходимые компоненты были приложены в данной статье. В этой статье я хотел бы немного продолжить разговор и немного усовершенствовать наш проект, добавив в него потоки, чтобы можно было подключаться к нашей БД через поток, все таки, некоторые хостинги отвечают на подключение очень медленно и чтобы не вводить в заблуждение нашего пользователя, когда будет происходить подключение к нашей БД, если будет указан неверное логин и пароль, то естественно программа без потока зависнет на время подключения, только после того, как получит ответ от сервера выдаст ошибку, что пароль неверный. Кроме добавления потока в нашу программу, еще хотел бы написать пару запросов к нашей таблице.
Итак, что нам потребуется, в данный момент нам потребуется БД, таблица в нашей БД ну и компоненты, а также некоторый набор данных в нашей. Итак давайте на форму установим следующие компоненты
- TMyConnection
- TMyQuery
«Свяжем» компонент TMyQuery в свойстве Connection - выберем компонент MyConnection1 (в моем случае). Далее сделаем подключение к нашей БД через поток. Данные для подключения у меня следующие
- Сервер – localhost
- Имя пользователя – test
- Пароль – test
- Имя БД – test
При этом, если Вы сейчас тестируете на Denwer’e, то не забывайте запустить сервер. У меня был объявлен следующий поток
Type
TMyThreadConnect=class(TThread)
public
flagConnect:boolean;
protected
procedure Execute;override;
procedure Connect;
end;
После этого заполним нашу процедуру Execute и Connect
procedure TMyThreadConnect.Execute;
begin
inherited;
Form1.MyConnection1.Server:='localhost';
Form1.MyConnection1.Username:='test';
Form1.MyConnection1.Password:='test';
Form1.MyConnection1.Database:='test';
Form1.MyConnection1.Connect;
if Form1.MyConnection1.Connected=True then
flagConnect:=True
else
flagConnect:=False;
Synchronize(Connect);
end;
procedure TMyThreadConnect.Connect;
begin
if flagConnect=True then
ShowMessage('Connect to Server');
end;
Теперь создадим наш поток
procedure TForm1.Button1Click(Sender: TObject);
var
ThreadConnect:TMyThreadConnect;
begin
try
ThreadConnect:=TMyThreadConnect.Create(False);
ThreadConnect.Resume;
except
on e:Exception do
end;
end;
Итак теперь, как я и говорил сделаем несколько запросов к нашей БД. Скажу одно, что принцип работы с данной БД одинаков, как мы и работали с Access с помощью запросов. Можно также установить на форму TDBGrid для отображения данных из нашей БД. Таблица я создал с названием test_table и со следующими полями
- id — auto_increment
- fio — TEXT
Запрос на добавления данных будет выглядеть следующим образом
procedure TForm1.Button3Click(Sender: TObject);
begin
MyQuery1.SQL.Clear;
MyQuery1.SQL.Add('INSERT test_table SET fio=''Иванов Иван Иванович''');
MyQuery1.Execute;
end;
Запрос на выборку данных по условию будет выглядеть следующим образом
procedure TForm1.Button4Click(Sender: TObject);
begin
MyQuery1.SQL.Clear;
MyQuery1.SQL.Add('SELECT * FROM test_table WHERE fio=''Иванов Иван Иванович''');
MyQuery1.Execute;
ShowMessage(IntToStr(MyQuery1.RecordCount));
end;
Как видите запросы везде одинаковые, по работе с MySQL с использованием Denwer я уделю еще — работа с Blob-полями и на этом закончим, так как все почти одинаковое.