![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Передача данных запроса к БД из потока [D6, IB6.x, FireBird]
galexis © (2004-09-06 13:46:00)Пытаюсь работать с потоками (TThread). В потоке выполняется запрос к БД FireBird. А что делать с набором данных после этого не знаю. Как передать их в основной поток? Сейчас провожу эксперименты с SendMessage, но думаю что это не выход, да и с ним у меня пока еще ничего не вышло. Приложение у меня MDI, а поток создается из дочернего окна. Как обратиться к элементу редактирования TEdit, который расположен в таком окне?
Помогите разобраться пожалуйста.
galexis (2004-09-08 12:41:00) [1]С предыдущим вопросом спарвился, может и не очень хорошо, да ладно. Добавил в DBGrid требуемые поля и сделал их свойство Visible:=False.
Теперь появился еще вопрос. При запуске программы компонент IBDatabase требует пароль. Пользователь вводит пароль, открывается соединение и программа работает. Для вторичного потока нужно свое соединение. Хотел взять параметры из основного, но не могу получить пароль. Как это сделать? Можно ли узнать в программе какой пароль ввел польователь?
galexis (2004-09-08 10:55:00) [2]Часть программы переделал. Поток запускается, данные пересылаются в DbGrid. При желании кнопкой отмена можно отменить поиск. Но в старой версии программы после того как отобранные по запросу данные отображались в DBGrid, пользователь при желании мог посмотреть более подробную информацию щелкнув два раза на записи в DBGrid. После чего формировался новый запрос с условием по полю ID из IBQuery, которое (ID) в DBQuery не отображалось. А сейчас у меня нет IBQuery, из которого я бы мог взять это поле, есть только DataSource. Как поступить?
Анонимщик (2004-09-07 14:54:00) [3]> Значение генератора проверяй, конечно, но только смотри,
> чтобы кто-нибудь другой в то же время тот же запрос не запустил
Об этом я как то и не подумал. И как же быть?
Корректного решения нет. Можно попытаться прибить поток, но гаранти нет.
Кстати, там в коде стоит FreeOnTerminate := false;
Почему не true? У меня конечно на компе памяти много, но вот у пользователей не много.
Поставь true, тебе в этом никто помешать не может.
Правда, что теперь моя программа не будет работать под 98?
Неправда.
И всетаки почему быстрее стал выполнятся запрос? FB стоит на сервере, ему то ведь все равно из какого потока ему послан запрос.
ibase.ru - читай о IB вообще и транзакциях в частности
galexis (2004-09-07 12:42:00) [4]И всетаки почему быстрее стал выполнятся запрос? FB стоит на сервере, ему то ведь все равно из какого потока ему послан запрос.
galexis (2004-09-07 12:40:00) [5]
> Анонимщик © (07.09.04 11:31) [52]
> Значение генератора проверяй, конечно, но только смотри,
> чтобы кто-нибудь другой в то же время тот же запрос не запустил
Об этом я как то и не подумал. И как же быть?
Кстати, там в коде стоитFreeOnTerminate := false;
Почему не true? У меня конечно на компе памяти много, но вот у пользователей не много. Правда, что теперь моя программа не будет работать под 98?
Анонимщик (2004-09-07 11:31:00) [6]Ну вы посмотрите как он буквально за день на глазах прямо вырос.
galexis
Значение генератора проверяй, конечно, но только смотри, чтобы кто-нибудь другой в то же время тот же запрос не запустил. А вот почему выполняется быстрее - попробуй сам догадаться.
galexis (2004-09-07 11:03:00) [7]
> Digitman © (07.09.04 10:32) [47]
По кнопке Отмена запущу еще один запрос в еще одном потоке, который будет менять значения предварительно созданного генератора. В основном запросе будет проверка на значение этого генератора
Rule (2004-09-07 10:49:00) [8]Digitman © (07.09.04 10:46) [49]
Ну шош сделаешь, настроение сегодня хорошее :)
Digitman (2004-09-07 10:46:00) [9]
> Rule © (07.09.04 10:42) [48]
тебе-то смешно, а автору "жениться")
Rule (2004-09-07 10:42:00) [10]Digitman © (07.09.04 10:32) [47]
Application.terminate :))))
Digitman (2004-09-07 10:32:00) [11]
> была возможность нажать кнопку отмена в процессе выполнения
> запроса
и что ты намерен делать в обработчике нажатия кнопки Отмена ?
galexis (2004-09-07 10:04:00) [12]Столкнулся с приятной загадкой. Запрос во вторичном потоке выполняется раз в 10 быстрее чем в основном. Т.е. раньше у меня запрос выполнялся в основном потоке около 2 минут, а сейчас по моему секунд за 20 справился. К чему бы это?
galexis (2004-09-07 09:54:00) [13]
> Анонимщик © (06.09.04 18:02) [44]
Я в принципе понял как работать с потоками и что это за штука. Сейчас буду адаптировать код к своей программе, многое переделать придется. Может и ошибки тогда найдутся. А затеяно это все для того, чтобы клиентское приложение не замирало и была возможность нажать кнопку отмена в процессе выполнения запроса.
Анонимщик (2004-09-06 18:02:00) [14]Это тебе так только кажется. Я там специально сделал две ошибки. Будь готов к AccessViolation.
galexis (2004-09-06 17:58:00) [15]Анонимщик ©
Работает ведь все! Спасибо огромное!
galexis (2004-09-06 17:54:00) [16]Хорошо, что мы в разных городах (я надеюсь). А то вот так с работы выйдешь и убьют :)
Всем спасибо. Где еще о потоках за один день столько узнаешь. Может это еще кому нибудь пригодится.
Анонимщик (2004-09-06 17:37:00) [17][39] galexis © (06.09.04 17:29)
> Анонимщик ©
А как передавать параметры БД, которые nil?
Я не знаю.
Reindeer Moss Eater (2004-09-06 17:33:00) [18]Усыпите его кто-нибудь уже.
galexis (2004-09-06 17:29:00) [19]
> Анонимщик ©
А как передавать параметры БД, которые nil?
Digitman (2004-09-06 17:20:00) [20]это называется - "дай г., дай ложку"