Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 22.08.2009, 16:04
Andrey53 Andrey53 вне форума
Прохожий
 
Регистрация: 02.06.2009
Сообщения: 20
Репутация: 12
По умолчанию Подключение к БД через поток

Всем здравствуйте, вот короче возникла такая проблема, что при подключении к MySql программа зависает на некоторое время, а после того как подключится - отвисает и работает норм. Но вот мне надо, чтобы она не зависала, эффект чтобы был такой, как например используешь IdHTTP и IdAntiFreeze, мне подсказали сделать это дело через потоки, но в поток я не силен, вот тут с ними разбираюсь по тиху, но пока не сильно хороший результат. Так вот может есть какой-то другой вариант, если есть подскажите, если тока через потоки, то поправьте, что я уже использую.

Код:
 TNewThread = class(TThread)
 public
  procedure DoConnectMySql;
 protected
  procedure Execute; override;
 end;

procedure TNewThread.DoConnectMySql;
begin
   Form2.MyConnection1.Server:='host';
   Form2.MyConnection1.Username:='user';
   Form2.MyConnection1.Password:='pass';
   Form2.MyConnection1.Database:='BD';
   Form2.MyConnection1.Connect;
end;

procedure TNewThread.Execute;
begin
  inherited;
   Synchronize(DoConnectMySql);
end;

И вот как мне по нажатию на кнопку "Подключиться" сделать, чтобы программа не зависала.
З.Ы. Как уже писал в потоках полный ноль, так что сильно не пинать, а если можно чуток разъяснить

Последний раз редактировалось Andrey53, 22.08.2009 в 16:14.
Ответить с цитированием
  #2  
Старый 23.08.2009, 14:27
Andrey53 Andrey53 вне форума
Прохожий
 
Регистрация: 02.06.2009
Сообщения: 20
Репутация: 12
По умолчанию

Ну может кто-то работал уже с потоками и мне все таки помогут?
Ответить с цитированием
  #3  
Старый 23.08.2009, 19:29
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Ну я работал с потоками, проблема в том что тот код что ты указал - бред. Не проще ли на время подключения к БД заменить курсор у программы на "часики", тогда пользователю будет ясно что программа не зависла, еще не плохо было бы на время подключения выводить некое статус-сообщение.
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #4  
Старый 24.08.2009, 08:43
Andrey53 Andrey53 вне форума
Прохожий
 
Регистрация: 02.06.2009
Сообщения: 20
Репутация: 12
По умолчанию

Возможно, что бред, так как я писал, что я с потоками вообще не работал и вот что-то намудрил и все. А насчет того, чтобы сделать часики - это понятно, но мне хотелось бы сделать чуток по-другому, то есть сделать имитацию подключения, например какую-нибудь анимацию, ну или даже с ProgressBar. Но как я уже говорил, при подключении форма полностью зависает и ничего не дает сделать, не передвинуть, ни ProgressBar не видно, а с часиками, ещё не опытный пользователь подумает, что ещё програ вообще зависла. А насчет сообщения, то тоже само, оно появляется и пока прога не подключиться, то сообщение тоже не отвиснет

Последний раз редактировалось Andrey53, 24.08.2009 в 08:46.
Ответить с цитированием
  #5  
Старый 24.08.2009, 09:13
roamer roamer вне форума
Активный
 
Регистрация: 15.04.2009
Сообщения: 369
Репутация: 93
По умолчанию

Если это нужно только для Пользователя и устраивает анимация в качестве иммитации реального процесса, то может быть вполне хватило бы TAnimate ...
Ответить с цитированием
  #6  
Старый 24.08.2009, 09:47
Andrey53 Andrey53 вне форума
Прохожий
 
Регистрация: 02.06.2009
Сообщения: 20
Репутация: 12
По умолчанию

Имитация идет правильная, то есть пока не подключиться анимация будет идти, также могу сделать с ProgressBar, то есть будет уже реальное подключение, а анимацию использую так как красивее, но смысл не в том, что использовать или TAnimate или ProgressBar или TRxAnimate, смысл в том, чтобы я не использовал окно программы подключения зависает и не видно как проигрывается анимация, не видно как ProgressBar меняет позицию, точно такой же результат как использовать IdHttp без idAntifreeze. Мне сказали, чтобы форма не зависала, просто вынести подключение в отдельный поток, но так как я уже 10 раз писал, что в потоках не силен, вот разбираюсь, но пока без результатно и собственно пришел за помощью сюда, а вопрос здесь совсем не стоит о том с помощью чего можно сделать имитацию загрузки или подключения.

Последний раз редактировалось Andrey53, 24.08.2009 в 09:50.
Ответить с цитированием
  #7  
Старый 25.08.2009, 19:51
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Ну и сунь свой прогресс-бар в поток
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #8  
Старый 26.08.2009, 12:01
Andrey53 Andrey53 вне форума
Прохожий
 
Регистрация: 02.06.2009
Сообщения: 20
Репутация: 12
По умолчанию

Ох спасибо ОГРОМНОЕ за помощь, точно это же надо сунуть в поток, пойду в свой бредовый код с потоками сувать ProgressBar.
Ответить с цитированием
  #9  
Старый 26.08.2009, 12:02
Andrey53 Andrey53 вне форума
Прохожий
 
Регистрация: 02.06.2009
Сообщения: 20
Репутация: 12
По умолчанию

Я вообще-то думал, что кто-то поправит тот же мой код, который БРЕДовый, ну или чуток объяснит как работать с потоками, тем более есть кто уже работал, можно было БРЕДовый код изменить или подсказать как правильно

Последний раз редактировалось Andrey53, 26.08.2009 в 12:04.
Ответить с цитированием
  #10  
Старый 30.08.2009, 06:57
mskvkin mskvkin вне форума
Новичок
 
Регистрация: 31.08.2008
Сообщения: 99
Репутация: 10
По умолчанию

Когда я такое делал я брал и создавал новую форму на ней писал типа программа подключается к бд у формы в событие:

Код:
procedure TForm2.FormCreate(Sender: TObject);
begin
  FormStyle:=fsStayOnTop;
end;

у компонента через который подключаешь:

Код:
procedure TDM1.UniConnection1BeforeConnect(Sender: TObject);
begin
Application.ProcessMessages;
  Form2.Visible:=True;
end;

procedure TDM1.UniConnection1AfterConnect(Sender: TObject);
begin
  Application.ProcessMessages;
  Form2.Visible:=False;
end;

procedure TDM1.UniConnection1Error(Sender: TObject; E: EDAError;
  var Fail: Boolean);
begin
  Application.ProcessMessages;
  Form2.Visible:=False;
end;

после чего у тебя не будет вида как будто приложение повисло такое же пропиши у компонента Table или Query в зависимости от того через что ты подключаешься.
Ответить с цитированием
  #11  
Старый 30.08.2009, 06:59
mskvkin mskvkin вне форума
Новичок
 
Регистрация: 31.08.2008
Сообщения: 99
Репутация: 10
По умолчанию

А зачем ты делал вот это объясни:
Цитата:
Сообщение от Andrey53
Код:
 TNewThread = class(TThread)
 public
  procedure DoConnectMySql;
 protected
  procedure Execute; override;
 end;

procedure TNewThread.Execute;
begin
  inherited;
   Synchronize(DoConnectMySql);
end;
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:00.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter