| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > Автогенерация форм и объектов |
| Автор: zloyshprot 15.1.2010, 20:04 | ||
| Всем здравствуйте! Значится пишу я программу, оболочку для работы с базами данных. Есть четкая задача, с заданными структурами баз данных, но вот захотелось попробовать сделать универсальности... Собственно делаю я и все меньше мне нравится что я делаю. Собственно я хотел бы чтобы мне сказали насколько это коряво и что так делать нельзя. Или наоборот =) Вот кусок кода: Изначально на форме есть объект TADOConnection и TPageControl. Все остальное генерится после подключения к базе. Программа расчитана на одновременную работу со сколько угодным кол-вом тейблов. Собственно кол-во объектов TTabSheet, TDBGrid, TDataSource, TADOTable генерятся под кол-во тейблов в базе. Так же уже есть монструозная функция добавления записей через кнопочку вызывающую AddForm.ShowModal();. Естественно форма тоже автогенерится, добавляет поля по количеству столбцов тейбла и тд...
Еще раз вопрос - это все бред или не совсем? |
| Автор: Лапоть 15.1.2010, 21:44 |
Вот и реализуй именно поставленную задачу. Универсальный станок типа ДБЕхплорер хорош в качестве учебного примера - и не более того. ЗЫ - коннектиться в FormCreate() - не есть хорошо (ИМХО). Юзер может просто случайно клацнуть по иконке программы... У тебя может быть одна таблица рабочая и к ней - ещё 27 таблиц-словариков. Наклепаешь ты 28 страниц, а работать с рабочей таблицей не сможешь. Это не бред. Это классические грабли. Таки лет .... тому назад я и сам на них наступил. Удачи тебе! |
| Автор: zloyshprot 15.1.2010, 22:10 | ||
| Спасибо за критику =) Я бодро взялся за реализацию такой универсальности, но чем дальше писал, тем больше понимал, что мне оно незачем. Расцениваю я сейчас всю проделанную работу как хороший опыт и откатываюсь до более статичной версии. Я не совсем понял, что имелось ввиду здесь:
Вобщем, спасибо =) |
| Автор: vikaz 15.1.2010, 22:39 |
| Сейчас сам пишу программу, похожий проект! Сначала, с дуру, тоже хотел использовать несколько DBGrid, но потом понял, что это гиблое дело и сделал все на связке TTabControl + DBGridEh. При том, что программа может иметь сколь угодно закладок! При переходе на новую закладку (компонента TTabControl имеет только один лист, а при переключении на другую вкладку генерит событие с номером вкладки) просто перерисовываю DBGridEh и заполняю его! Получается шустро, проверял на Acer Aspire One. ЗЫ. На изображении видно, как все отображается при проектировании и как в запущенной программе! |
| Автор: zloyshprot 16.1.2010, 00:22 | ||||
Здорово, спасибо за столь полезную информацию. Можно поподробнее? Это будет что-то типа
на переключении вкладки? |
| Автор: zloyshprot 16.1.2010, 01:36 | ||
Первый набросок:
|
| Автор: vikaz 16.1.2010, 08:18 | ||
Все верно! А если так переписать твой код:
Так будет правильнее!!!! |
| Автор: zloyshprot 16.1.2010, 12:11 | ||||
Здорово, про switch я забыл совсем... А я вот прикидываю, а если пользователю понадобится найти, например, имя в одной таблице, переключится на другую и найти это же имя, а потом вернуться в прошлую и внести изменения. Ведь после переключений таблицы будут перерисовываться и результаты поиска сбрасываться. Единственно что я придумал, это создать под каждую таблицу String, в который, при переключении, будет записываться значение AdoTable->Filter и, при переключении обратно на таб, будет это значение восстанавливать. Или есть более вразумительные варианты? |
| Автор: zloyshprot 16.1.2010, 20:05 | ||||
| Столкнулся проблемой Редактирование осуществляется в форме, вызванной по
На FormAdd1 событие на onButtonClick:
Если при редактировании никакие данные не изменены, то получаю ошибку: "Не удается найти строку для обновления. Некоторые значения могли быть изменены со времени ее последнего чтения" И что-то никак не могу понять... Почему? |