Как использовать Данные осведомленные средства управления “правильно”?

Я хотел бы спросить опытных пользователей, если Вы предпочитаете использовать данные осведомленные средства управления, чтобы добавить, вставить, удалить и отредактировать данные в DB, или Вы одобряете, чтобы сделать это вручную.

Я разработал некоторые приложения DB, в которых ради "удобной для пользователя политики" я сталкиваюсь со сложной сетью событий таблицы (afterinsert, afteredit, после... и beforeedit, beforeinsert, прежде...). После этого это была довольно противная работа для отладки приложения.

Зная об этом риске (позже другим приложением) я старался избегать этой проблемы, таким образом, я заплатил повышенное внимание для написания кода хорошо, читаемый и всесторонний. Это казалось всем хорошо с начала, но поскольку я должен был обработать некоторый материал предварительной обработки прежде, чем отправить и загрузить данные и т.д., я сталкиваюсь с теми же проблемами снова, "медленно и неизбежно". Когда-то я не мог использовать средства управления информационным обеспечением так или иначе, и что, казалось, было "прохладной" функцией DAControl вначале, это обратилось к препятствию на конце. Я "должен был" записать специальную стандартную программу для средств управления non-dataaware для поведения как информационное обеспечение. Затем я спросил меня, с какой стати я должен использовать средства управления информационным обеспечением? Это лучше к найденной архитектуре приложения на средствах управления non-dataaware? Это требует, чтобы больше времени написало защищенный от ошибки код, конечно, но делает это ценность его? Я не знаю...

Я несколько раз происходил со мной, как принесенный несчастье: рай на начинающемся аде на конце...

Я не знаю, если я использую неправильный метод для записи программы DB, если существует некоторая стандартная обычная практика, как продолжить двигаться. Или если это - типичная проблема всем?

Спасибо за советы и Ваши события

13
задан mjn 27 March 2010 в 14:55
поделиться

4 ответа

Секрет должен заключаться в автоматизации параметров DataSet, вы можете создать элемент управления, который склеивает наборы данных вместе в режиме ведущий-ведомый, просто определяя связи между ними. Конечно, такой контроль должен быть снабжен параметрами формы каким-то другим обобщенным способом. В этом случае при вызове формы с идентификатором сущности все наборы данных будут заполнены в правильном порядке и позволят автоматически обновлять данные в базе данных провайдером.

Как правило, лучше, чтобы DataSets были точным представлением таблиц с необязательными вычисляемыми полями (fkInternalCalc иногда работает лучше, поскольку он обновляется с изменением строки, а не изменением поля), привязанными к элементам управления с поддержкой данных. Элементы управления с учетом данных являются наиболее оптимальным подходом и менее подвержены ошибкам. Как и во всех аспектах, из этого есть исключения.

Если вам нужно написать слишком много склеивающих функций, проблема, вероятно, в шаблоне проектирования, а не в VCL.

0
ответ дан 2 December 2019 в 02:05
поделиться

Я написал приложения, которые использовали компоненты, поддерживающие данные, против компонентов в стиле TTable, и приложения, которые использовали компоненты, не поддерживающие данные.

В наши дни я предпочитаю использовать компоненты, поддерживающие данные, но с TClientDataSets, а не с компонентами в стиле TTable.

Используя TClientDataSet, мне не нужно заставлять структуру пользовательского интерфейса имитировать структуру моей базы данных. Он достаточно гибкий, чтобы заполнить его данными из нескольких таблиц, а затем, когда вы применяете обновления обратно в базу данных, вы можете вручную добавлять / удалять / обновлять записи по своему усмотрению.

5
ответ дан 2 December 2019 в 02:05
поделиться

Часто я использую элементы управления с учетом данных, связанные с таблицей в памяти (kbmMemTable), которая заполняется из запроса.

Я вижу следующие преимущества:

  1. У меня есть полный контроль над всеми вставками / обновлениями / сообщениями / изменениями в базе данных.
  2. Не нужно беспокоиться о том, что пользователь оставит запись в режиме обновления (потенциально блокируя других пользователей)
  3. Я уже упоминал о полном контроле над всеми вставками / обновлениями / публикациями / редактированием?

Использование таблицы в памяти является так просто, как:

dataset.sql.add('select a.field,b.field from a,b');
dataset.open;
inMemoryTable.loadfromdataset(dataset);
inMemoryTable.checkpoint;

А затем «разрешая» обратно в базу данных, вам предоставляется доступ к исходным и новым данным для каждого поля в каждой записи (аналогично триггеру) - вы можете легко провести транзакцию и разрешить полное редактирование за миллисекунды - даже если конечному пользователю потребовалось 30 минут, чтобы заполнить элементы управления данными.

0
ответ дан 2 December 2019 в 02:05
поделиться

Рассматривали ли вы преобразователь O / R для Delphi, например tiOPF или hcOPF ?

Это отделит логику бизнес-домена от уровня базы данных. Для больших и устаревших систем часто даже добавляют еще один уровень, « Anti Corruption Layer », который защищает модель от изменений в структуре базы данных.

0
ответ дан 2 December 2019 в 02:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: