![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Передача данных запроса к БД из потока [D6, IB6.x, FireBird]
galexis © (2004-09-06 13:46:00)Пытаюсь работать с потоками (TThread). В потоке выполняется запрос к БД FireBird. А что делать с набором данных после этого не знаю. Как передать их в основной поток? Сейчас провожу эксперименты с SendMessage, но думаю что это не выход, да и с ним у меня пока еще ничего не вышло. Приложение у меня MDI, а поток создается из дочернего окна. Как обратиться к элементу редактирования TEdit, который расположен в таком окне?
Помогите разобраться пожалуйста.
Reindeer Moss Eater (2004-09-06 15:49:00) [41]Никуда наборы данных не передаются.
Они остаются там где были созданы.
Вплоть до закрытия и деструктора.
galexis (2004-09-06 15:48:00) [42]
> Reindeer Moss Eater ©
Ну задача у меня стоит как передать набор данных из вторичного потока в основной. А уж все остальное это попутно.
Reindeer Moss Eater (2004-09-06 15:47:00) [43]вот если только его расположить на MainForm.
Он там один, а MDI Child'ов - много.
Как делить будем?
galexis (2004-09-06 15:46:00) [44]
> Romkin ©
Пока еще до меня не дошло в полной мере, то что вы предложили. Но, по моему, если я расположу TClientDataset на моей форме FindForm, я и к этому компоненту не смогу обратиться. вот если только его расположить на MainForm.
Reindeer Moss Eater (2004-09-06 15:43:00) [45]Дык у тебя вопрос про то как найти экземпляр формы.
При чем здесь вся предыдущая канитель со вторичными потоками?
К делу не относящаяся.
galexis (2004-09-06 15:41:00) [46]
> Reindeer Moss Eater ©
Разница в том, что нельзя обратиться к TDBGrid обычным образом, т.е. нельзя написать FindForm.DBGrid1.DataSource.
Форма создается в процессе работы приложения и не имеет имени, к ней можно обратиться как MainForm.MDIChildren[0] Как обратиться при этом к конкретному компоненту, а мне надо DBGrid я не знаю. Точнее знаю. Надо сделать его активным и обращаться к нему как MainForm.MDIChildren[0].ActiveControl. Но это не очень хорошо.
Reindeer Moss Eater (2004-09-06 15:31:00) [47]Это понятно, а если TDBGrid находится на форме FindForm, которая MDIChild?
А какая разница где именно она "находится"?
Romkin (2004-09-06 15:29:00) [48]Элегантный выход - TClientDataset. Удивлены? Все просто, в Execute потока создавайте модуль данных с T...Query и TDatasetProvider (именно в execute ;) ). Делайте, что угодно. Потом просто передайте данные из провайдера в TClientDataSet на форме (эссно в Syncronize). И все. У вас есть набор данных, с которым вы можете делать все. Уже в основном потоке :))
galexis (2004-09-06 15:16:00) [49]
> Reindeer Moss Eater ©
Это понятно, а если TDBGrid находится на форме FindForm, которая MDIChild?
Reindeer Moss Eater (2004-09-06 14:58:00) [50]TDataSource + TDBGrid
galexis (2004-09-06 14:43:00) [51]Могу вот так сообщение переслать
SendMessage(MainForm.MDIChildren[0].ActiveControl.Handle,WM_SETTEXT,0,Integer(PChar(cnt)));
Но это не выход. А как можно передать набор данных и поместить его в DBGrid?
galexis (2004-09-06 14:29:00) [52]>Карелин Артем © Вот к edit1212.text я и не могу обратиться.
galexis (2004-09-06 14:28:00) [53]
> Digitman ©
Не могу обратиться к элементу TEditиз потока, ну например надо написать
FindForm.Edit1.Test:=...; Но Форма FindForm у меня MDIChild, т.е. к ней надо обращаться как
MainForm.MDIChildren[0]. А как обратиться к элементу Edit1 на ней?
Карелин Артем (2004-09-06 14:15:00) [54]Не надо сообщения мучать. Пиши просто edit1212.text:=запрос.поле1.какстрока в методе, который будешь вызывать посредством Synchronize
Digitman (2004-09-06 14:13:00) [55]
> сообщение передается непосредственно в основной поток, а
> я к нему и обратится не могу, форма то дочерняя
???
galexis (2004-09-06 14:05:00) [56]
> Карелин Артем ©
Где бы прочитать в интернте про это. У меня есть распечатка главы "Создание многопоточных приложений" из какой то книги. В данный момент как раз открыта на Synchronize. С примером, где сообщение передается непосредственно в основной поток, а я к нему и обратится не могу, форма то дочерняя
Карелин Артем (2004-09-06 13:51:00) [57]Разберись с основами синхронизации потоков. Конкретно Synchronize