![]() |
|
|
![]()
|
|
| andrew_newman |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 29.1.2007 Репутация: нет Всего: нет |
Есть MDI форма с меню справочников, при нажатии на различные пункты меню, должны открываться соответствующие справочники/таблицы dbf (хочу использовать SQL запросы для отображения) в дочерних окнах. Вопрос состоит в том, как организовать на дочерней форме компоненты.
P.S. C SDI формами проблем не было: ставлю DBGRid, DataSource и Query, связываю все это и запросом отображаю в DBGrid нужную таблицу. А с MDI формой такой фокус не проходит (( |
|||
|
||||
| Bose |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1458 Регистрация: 5.3.2005 Где: Riga, Latvia Репутация: 9 Всего: 51 |
||||
|
||||
| Fighter |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 810 Регистрация: 5.1.2005 Репутация: нет Всего: 2 |
Я думаю здесь идет речь о том, где централизованно хранить всякие запросы, коннекты к базам и т.д. НУ, я так полагаю, здесь речь идет наверное о DataModule. Попробуй. НАсколько я понял - именно DataModule тебе в помощь.
|
|||
|
||||
| Vas |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 830 Регистрация: 29.6.2005 Где: Stavropol region Репутация: 23 Всего: 28 |
Для MDI DataModule лучше не использовать, а располагать компоненты на форме. Попробуйте расположить Query и DataSource в dataModule, привязать их к гриду на форме и открыть 2 экземпляра этой формы, при сменении указателя на одной форме в другой тоже указатель будет прыгать, что для MDI Не пригодно, смысл MDI теряется.
-------------------- И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин) |
|||
|
||||
| pseud |
|
||||
![]() Экспёрт Тыдыщ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1175 Регистрация: 18.5.2007 Где: Минск, Беларусь Репутация: 16 Всего: 40 |
смею предположить что ты работаешь с той глобальной переменной которую создает при создании формы Delphi
а так делать не стоит рекомендую динамическое создание форм
подробно смотри на форуме об этом - много раз обсуждалось -------------------- Испытание чужого терпения можно считать успешным, если оно лопнуло... |
||||
|
|||||
| Bose |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1458 Регистрация: 5.3.2005 Где: Riga, Latvia Репутация: 9 Всего: 51 |
Вовсе нет. Достаточно создавать соответствующий DataModule вместе с формой. Тогда у каждой MDI формы будет свой экземпляр Datamodule. |
|||
|
||||
| Deniz |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1251 Регистрация: 16.10.2004 Где: Новый Уренгой Репутация: 8 Всего: 44 |
... и свой Connection и т.д. Можно еще несколько приложений запускать -------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
|||
|
||||
| Bose |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1458 Регистрация: 5.3.2005 Где: Riga, Latvia Репутация: 9 Всего: 51 |
Можно и так делать... Если такой подход и производительность устраивает. Говорят же, что медики научились гланды через задний проход удалять. Вообще, же Connection лучше размещать на отдельном DataModule. И этот Datamodule создавать при старте/коннекте. |
|||
|
||||
| pseud |
|
|||
![]() Экспёрт Тыдыщ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1175 Регистрация: 18.5.2007 Где: Минск, Беларусь Репутация: 16 Всего: 40 |
легко запутаться кого куда подключать detasource -> dataset dataset -> connection grid -> datasource IMHO раз уж отдельной форме нужен отдельный датамодуль, то лучше эти detasource dataset и т.д. закинуть на эту отдельную форму и не использовать датамодуль ессно коннекшн длжен быть в приложении только один (хотя есть исключения) -------------------- Испытание чужого терпения можно считать успешным, если оно лопнуло... |
|||
|
||||
| Fighter |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 810 Регистрация: 5.1.2005 Репутация: нет Всего: 2 |
А вообще, можно, например, в DataModule хранить AdoConnection. А в самих формах, например, прописать процедурку GetQuery, которая будет динамически создавать Query, связывать с Connection и загружать туда текст запроса (чтобы в коде не мусорить, сам текст запроса можно во внешнем файле хранить). И саму Query хранить как отдельную переменную в этой форме, т.е. аля компонент. Или еще проще можно, вместо того чтобы хранить переменную, лучше просто кинуть компонент AdoQuery и связывать его с соединением через уже знакомую процедуру GetQuery.
|
|||
|
||||
| Vas |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 830 Регистрация: 29.6.2005 Где: Stavropol region Репутация: 23 Всего: 28 |
Что-то на удаление гланд сильно смахивает -------------------- И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин) |
|||
|
||||
| Esperito |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 2.9.2007 Репутация: 2 Всего: 3 |
DataModule в приложении должен быть один. На нём должен лежать Connection (он же Database), т.к. он отвечает за подключение к таблице. А у каждого динамически созданного MDI Child должен быть свой Table или Query (плюс всякие DataSource и DBGrid), и они должны быть подключены к Connection, т.к. они отвечают за подключение к одной таблице (или подмножеству таблиц) одной и той же БД.
|
|||
|
||||
| Deniz |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1251 Регистрация: 16.10.2004 Где: Новый Уренгой Репутация: 8 Всего: 44 |
Вот так решил пошутить а тут ...
ИМХО, Connection должен быть один на каждую БД(если софт работает с несколькими), иначе запускаешь приложение а оно 20 соединений сделала с одной БД. Вот интересно будет если на сервере по лицензиям только 100 коннектов Объясните мне какой плюс дает несколько Connection к одной БД? -------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
|||
|
||||
| Bose |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1458 Регистрация: 5.3.2005 Где: Riga, Latvia Репутация: 9 Всего: 51 |
Не должен. Никто никому ничего не должен. В некоторых случаях(простейших) твой вариант будет удобен. В других случаях подобный подход станет вернейшим способом навести в коде страшнейший бардак. Всё зависит от задачи. Извини, я не впилил, что то была шутка. Насколько я знаю - никакого. Сплошные минусы. |
|||
|
||||
| Esperito |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 2.9.2007 Репутация: 2 Всего: 3 |
Я во фразе "На нём должен лежать Connection (он же Database), т.к. он отвечает за подключение к таблице" ошибся. Там вместо слова "таблица" должно быть слово "БД". То есть 1 БД = 1 Connection.
2 Bose: пожалуйста, опиши эти случаи. |
|||
|
||||
![]()
|
| Правила форума "Delphi: Базы данных и репортинг" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |