Поиск:

Ответ в темуСоздание новой темы Создание опроса
> MDI форма и SQL запрос, MDI форма и SQL запрос 
:(
    Опции темы
andrew_newman
Дата 2.10.2007, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 29.1.2007

Репутация: нет
Всего: нет



Есть MDI форма с меню справочников, при нажатии на различные пункты меню, должны открываться соответствующие справочники/таблицы dbf (хочу использовать SQL запросы для отображения) в дочерних окнах. Вопрос состоит в том, как организовать на дочерней форме компоненты.

P.S. C SDI формами проблем не было: ставлю DBGRid, DataSource и Query, связываю все это и запросом отображаю в DBGrid нужную таблицу. А с MDI формой такой фокус не проходит ((
PM MAIL ICQ   Вверх
Bose
Дата 2.10.2007, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 9
Всего: 51



Цитата(andrew_newman @  2.10.2007,  14:36 Найти цитируемый пост)
C SDI формами проблем не было: ставлю DBGRid, DataSource и Query, связываю все это и запросом отображаю в DBGrid нужную таблицу. А с MDI формой такой фокус не проходит 

Должен проходить. Ты что-то путаешь. 
PM MAIL WWW Skype   Вверх
Fighter
Дата 2.10.2007, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 810
Регистрация: 5.1.2005

Репутация: нет
Всего: 2



Я думаю здесь идет речь о том, где централизованно хранить всякие запросы, коннекты к базам и т.д. НУ, я так полагаю, здесь речь идет наверное о DataModule. Попробуй. НАсколько я понял - именно DataModule тебе в помощь. 
PM MAIL   Вверх
Vas
Дата 3.10.2007, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

Репутация: 23
Всего: 28



Для MDI DataModule лучше не использовать, а располагать компоненты на форме. Попробуйте расположить Query и DataSource в dataModule, привязать их к гриду на форме и открыть 2 экземпляра этой формы, при сменении указателя на одной форме в другой тоже указатель будет прыгать, что для MDI Не пригодно, смысл MDI теряется. 


--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
pseud
Дата 3.10.2007, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

Репутация: 16
Всего: 40



Цитата(andrew_newman @  2.10.2007,  14:36 Найти цитируемый пост)
P.S. C SDI формами проблем не было: ставлю DBGRid, DataSource и Query, связываю все это и запросом отображаю в DBGrid нужную таблицу. А с MDI формой такой фокус не проходит ((

смею предположить что ты работаешь с той глобальной переменной которую создает при создании формы Delphi
Код

Form1: TForm1

а так делать не стоит
рекомендую динамическое создание форм

Код

procedure
var
  dlg: TForm1;
begin
  dlg := TForm1.Create(Self);
  dlg.Show;
end;


подробно смотри на форуме об этом - много раз обсуждалось


--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
Bose
Дата 3.10.2007, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 9
Всего: 51



Цитата(Vas @  3.10.2007,  09:51 Найти цитируемый пост)
Для MDI DataModule лучше не использовать, а располагать компоненты на форме. Попробуйте расположить Query и DataSource в dataModule, привязать их к гриду на форме и открыть 2 экземпляра этой формы, при сменении указателя на одной форме в другой тоже указатель будет прыгать, что для MDI Не пригодно, смысл MDI теряется. 

Вовсе нет. Достаточно создавать соответствующий DataModule вместе с формой. Тогда у каждой MDI формы будет свой экземпляр Datamodule. 
PM MAIL WWW Skype   Вверх
Deniz
Дата 3.10.2007, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 8
Всего: 44



Цитата(Bose @  3.10.2007,  14:28 Найти цитируемый пост)
Вовсе нет. Достаточно создавать соответствующий DataModule вместе с формой. Тогда у каждой MDI формы будет свой экземпляр Datamodule.  

... и свой Connection и т.д.
Можно еще несколько приложений запускать  smile


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
Bose
Дата 3.10.2007, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 9
Всего: 51



Цитата(Deniz @  3.10.2007,  11:44 Найти цитируемый пост)
... и свой Connection и т.д.
Можно еще несколько приложений запускать

Можно и так делать... Если такой подход и производительность устраивает.  Говорят же, что медики научились гланды через задний проход удалять. 

Вообще, же Connection лучше размещать на отдельном DataModule. И этот Datamodule создавать при старте/коннекте. 
PM MAIL WWW Skype   Вверх
pseud
Дата 3.10.2007, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

Репутация: 16
Всего: 40



Цитата(Bose @  3.10.2007,  11:28 Найти цитируемый пост)
Вовсе нет. Достаточно создавать соответствующий DataModule вместе с формой. Тогда у каждой MDI формы будет свой экземпляр Datamodule. 


легко запутаться кого куда подключать
detasource -> dataset
dataset -> connection
grid -> datasource

IMHO раз уж отдельной форме нужен отдельный датамодуль, то лучше эти detasource dataset и т.д. закинуть на эту отдельную форму и не использовать датамодуль
ессно коннекшн длжен быть в приложении только один (хотя есть исключения)


--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
Fighter
Дата 3.10.2007, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 810
Регистрация: 5.1.2005

Репутация: нет
Всего: 2



А вообще, можно, например, в DataModule хранить AdoConnection. А в самих формах, например, прописать процедурку GetQuery, которая будет динамически создавать Query, связывать с Connection и загружать туда текст запроса (чтобы в коде не мусорить, сам текст запроса можно во внешнем файле хранить). И саму Query хранить как отдельную переменную в этой форме, т.е. аля компонент. Или еще проще можно, вместо того чтобы хранить переменную, лучше просто кинуть компонент AdoQuery и связывать его с соединением через уже знакомую процедуру GetQuery. 
PM MAIL   Вверх
Vas
Дата 3.10.2007, 18:06 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

Репутация: 23
Всего: 28



Цитата(Bose @  3.10.2007,  11:28 Найти цитируемый пост)
Вовсе нет. Достаточно создавать соответствующий DataModule вместе с формой. Тогда у каждой MDI формы будет свой экземпляр Datamodule.  

Что-то на удаление гланд сильно смахивает smile 


--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
Esperito
Дата 3.10.2007, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 2.9.2007

Репутация: 2
Всего: 3



DataModule в приложении должен быть один. На нём должен лежать Connection (он же Database), т.к. он отвечает за подключение к таблице. А у каждого динамически созданного MDI Child должен быть свой Table или Query (плюс всякие DataSource и DBGrid), и они должны быть подключены к Connection, т.к. они отвечают за подключение к одной таблице (или подмножеству таблиц) одной и той же БД.
PM MAIL   Вверх
Deniz
Дата 4.10.2007, 05:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 8
Всего: 44



Вот так решил пошутить а тут ... 
ИМХО, Connection должен быть один на каждую БД(если софт работает с несколькими), иначе запускаешь приложение а оно 20 соединений сделала с одной БД. Вот интересно будет если на сервере по лицензиям только 100 коннектов  smile 5 пользователей работают, остальные курят, и никак понять не могут почему их не пускают.
Объясните мне какой плюс дает несколько Connection к одной БД?  smile 


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
Bose
Дата 4.10.2007, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 9
Всего: 51



Цитата(Esperito @  3.10.2007,  20:45 Найти цитируемый пост)
DataModule в приложении должен быть один. На нём должен лежать Connection (он же Database), т.к. он отвечает за подключение к таблице. А у каждого динамически созданного MDI Child должен быть свой Table или Query (плюс всякие DataSource и DBGrid), и они должны быть подключены к Connection, т.к. они отвечают за подключение к одной таблице (или подмножеству таблиц) одной и той же БД.

Не должен. Никто никому ничего не должен. В некоторых случаях(простейших) твой вариант будет удобен. В других случаях подобный подход станет вернейшим способом навести в коде страшнейший бардак. Всё зависит от задачи. 

Цитата(Deniz @  4.10.2007,  05:09 Найти цитируемый пост)
Вот так решил пошутить а тут ... 

Извини, я не впилил, что то была шутка.

Цитата(Deniz @  4.10.2007,  05:09 Найти цитируемый пост)
Объясните мне какой плюс дает несколько Connection к одной БД?

Насколько я знаю - никакого. Сплошные минусы. 





PM MAIL WWW Skype   Вверх
Esperito
Дата 4.10.2007, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 2.9.2007

Репутация: 2
Всего: 3



Я во фразе "На нём должен лежать Connection (он же Database), т.к. он отвечает за подключение к таблице" ошибся. Там вместо слова "таблица" должно быть слово "БД". То есть 1 БД = 1 Connection.

2 Bose: пожалуйста, опиши эти случаи.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0559 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.