Я хотел бы спросить опытных пользователей, если Вы предпочитаете использовать данные осведомленные средства управления, чтобы добавить, вставить, удалить и отредактировать данные в DB, или Вы одобряете, чтобы сделать это вручную.
Я разработал некоторые приложения DB, в которых ради "удобной для пользователя политики" я сталкиваюсь со сложной сетью событий таблицы (afterinsert, afteredit, после... и beforeedit, beforeinsert, прежде...). После этого это была довольно противная работа для отладки приложения.
Зная об этом риске (позже другим приложением) я старался избегать этой проблемы, таким образом, я заплатил повышенное внимание для написания кода хорошо, читаемый и всесторонний. Это казалось всем хорошо с начала, но поскольку я должен был обработать некоторый материал предварительной обработки прежде, чем отправить и загрузить данные и т.д., я сталкиваюсь с теми же проблемами снова, "медленно и неизбежно". Когда-то я не мог использовать средства управления информационным обеспечением так или иначе, и что, казалось, было "прохладной" функцией DAControl вначале, это обратилось к препятствию на конце. Я "должен был" записать специальную стандартную программу для средств управления non-dataaware для поведения как информационное обеспечение. Затем я спросил меня, с какой стати я должен использовать средства управления информационным обеспечением? Это лучше к найденной архитектуре приложения на средствах управления non-dataaware? Это требует, чтобы больше времени написало защищенный от ошибки код, конечно, но делает это ценность его? Я не знаю...
Я несколько раз происходил со мной, как принесенный несчастье: рай на начинающемся аде на конце...
Я не знаю, если я использую неправильный метод для записи программы DB, если существует некоторая стандартная обычная практика, как продолжить двигаться. Или если это - типичная проблема всем?
Спасибо за советы и Ваши события
Секрет должен заключаться в автоматизации параметров DataSet, вы можете создать элемент управления, который склеивает наборы данных вместе в режиме ведущий-ведомый, просто определяя связи между ними. Конечно, такой контроль должен быть снабжен параметрами формы каким-то другим обобщенным способом. В этом случае при вызове формы с идентификатором сущности все наборы данных будут заполнены в правильном порядке и позволят автоматически обновлять данные в базе данных провайдером.
Как правило, лучше, чтобы DataSets были точным представлением таблиц с необязательными вычисляемыми полями (fkInternalCalc иногда работает лучше, поскольку он обновляется с изменением строки, а не изменением поля), привязанными к элементам управления с поддержкой данных. Элементы управления с учетом данных являются наиболее оптимальным подходом и менее подвержены ошибкам. Как и во всех аспектах, из этого есть исключения.
Если вам нужно написать слишком много склеивающих функций, проблема, вероятно, в шаблоне проектирования, а не в VCL.
Я написал приложения, которые использовали компоненты, поддерживающие данные, против компонентов в стиле TTable, и приложения, которые использовали компоненты, не поддерживающие данные.
В наши дни я предпочитаю использовать компоненты, поддерживающие данные, но с TClientDataSets, а не с компонентами в стиле TTable.
Используя TClientDataSet, мне не нужно заставлять структуру пользовательского интерфейса имитировать структуру моей базы данных. Он достаточно гибкий, чтобы заполнить его данными из нескольких таблиц, а затем, когда вы применяете обновления обратно в базу данных, вы можете вручную добавлять / удалять / обновлять записи по своему усмотрению.
Часто я использую элементы управления с учетом данных, связанные с таблицей в памяти (kbmMemTable), которая заполняется из запроса.
Я вижу следующие преимущества:
Использование таблицы в памяти является так просто, как:
dataset.sql.add('select a.field,b.field from a,b');
dataset.open;
inMemoryTable.loadfromdataset(dataset);
inMemoryTable.checkpoint;
А затем «разрешая» обратно в базу данных, вам предоставляется доступ к исходным и новым данным для каждого поля в каждой записи (аналогично триггеру) - вы можете легко провести транзакцию и разрешить полное редактирование за миллисекунды - даже если конечному пользователю потребовалось 30 минут, чтобы заполнить элементы управления данными.
Рассматривали ли вы преобразователь O / R для Delphi, например tiOPF или hcOPF ?
Это отделит логику бизнес-домена от уровня базы данных. Для больших и устаревших систем часто даже добавляют еще один уровень, « Anti Corruption Layer », который защищает модель от изменений в структуре базы данных.