|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Подключение к БД через поток
Всем здравствуйте, вот короче возникла такая проблема, что при подключении к 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
|
|||
|
|||
Ну может кто-то работал уже с потоками и мне все таки помогут?
|
#3
|
||||
|
||||
Ну я работал с потоками, проблема в том что тот код что ты указал - бред. Не проще ли на время подключения к БД заменить курсор у программы на "часики", тогда пользователю будет ясно что программа не зависла, еще не плохо было бы на время подключения выводить некое статус-сообщение.
Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#4
|
|||
|
|||
Возможно, что бред, так как я писал, что я с потоками вообще не работал и вот что-то намудрил и все. А насчет того, чтобы сделать часики - это понятно, но мне хотелось бы сделать чуток по-другому, то есть сделать имитацию подключения, например какую-нибудь анимацию, ну или даже с ProgressBar. Но как я уже говорил, при подключении форма полностью зависает и ничего не дает сделать, не передвинуть, ни ProgressBar не видно, а с часиками, ещё не опытный пользователь подумает, что ещё програ вообще зависла. А насчет сообщения, то тоже само, оно появляется и пока прога не подключиться, то сообщение тоже не отвиснет
Последний раз редактировалось Andrey53, 24.08.2009 в 08:46. |
#5
|
|||
|
|||
Если это нужно только для Пользователя и устраивает анимация в качестве иммитации реального процесса, то может быть вполне хватило бы TAnimate ...
|
#6
|
|||
|
|||
Имитация идет правильная, то есть пока не подключиться анимация будет идти, также могу сделать с ProgressBar, то есть будет уже реальное подключение, а анимацию использую так как красивее, но смысл не в том, что использовать или TAnimate или ProgressBar или TRxAnimate, смысл в том, чтобы я не использовал окно программы подключения зависает и не видно как проигрывается анимация, не видно как ProgressBar меняет позицию, точно такой же результат как использовать IdHttp без idAntifreeze. Мне сказали, чтобы форма не зависала, просто вынести подключение в отдельный поток, но так как я уже 10 раз писал, что в потоках не силен, вот разбираюсь, но пока без результатно и собственно пришел за помощью сюда, а вопрос здесь совсем не стоит о том с помощью чего можно сделать имитацию загрузки или подключения.
Последний раз редактировалось Andrey53, 24.08.2009 в 09:50. |
#7
|
||||
|
||||
Ну и сунь свой прогресс-бар в поток
Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#8
|
|||
|
|||
Ох спасибо ОГРОМНОЕ за помощь, точно это же надо сунуть в поток, пойду в свой бредовый код с потоками сувать ProgressBar.
|
#9
|
|||
|
|||
Я вообще-то думал, что кто-то поправит тот же мой код, который БРЕДовый, ну или чуток объяснит как работать с потоками, тем более есть кто уже работал, можно было БРЕДовый код изменить или подсказать как правильно
Последний раз редактировалось Andrey53, 26.08.2009 в 12:04. |
#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
|
|||
|
|||
А зачем ты делал вот это объясни:
Цитата:
|