Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Передача данных запроса к БД из потока [D6, IB6.x, FireBird]


Страницы:   1 2 3

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]

это называется - "дай г., дай ложку"


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо