Я делаю форма пользователя в Delphi для приложения отслеживания документов. Интересуюсь функционалом ввести новую запись (запись) и просмотреть список по ... (дата, название документа, идентификатор, ...).
Моя проблема в том, что я не знаю, как реализовать эти функции для нескольких пользователей. На данный момент у меня 5 пользователей. У каждого пользователя есть уникальный поля ввода данных (записи) (столбцы), и поля просмотра (столбцы) каждого пользователя также уникальны. Могло быть больше пользователей.
Итак, как реализовать эти функции для этой формы? Как назначить разные данные (поля) для каждого отдельного пользователя для ввода и просмотра? Вот чего я не понимаю. Это распределенная функциональность приложения? Если да, то как этого добиться?
Обратите внимание, что я не хочу статического назначения пользователя в коде приложения, например:
if (username='user1') then {
input();
view();
}
else if (username='user2') then {...}
...
потому что каждый раз, когда появляется новый пользователь, разработчик должен вернуться к коду приложения и жестко его запрограммировать. Это неэффективно и плохая реализация. Скорее, я хочу, чтобы это было динамично (если это правильный термин). Как этого добиться?
Примечание: Я использую инструмент dbExpress с СУБД MySQL с RAD Studio XE7 Architect.
@MartynA, не могли бы вы показать конкретный образец кода или дать ссылку на него? Я действительно не знаю, как это сделать.
Здесь, на SO, есть десятки примеров Delphi. Попробуйте поискать их.
Если я правильно понимаю, о чем вы спрашиваете, кажется, что вы не знакомы с идеей таблиц / наборов данных, которые работают в так называемых отношениях Master-Detail. Их очень легко настроить в Delphi.
Когда вы познакомитесь с отношениями M-> D, я думаю, вы поймете, что вам следовало спрашивать, как настроить их в своем приложении, а не о проблеме жесткого кодирования отдельных пользователей в вашей форме.
В вашем случае то, что вам сейчас не хватает, - это таблица с данными о пользователях. Назовем это таблицей Users. Обычно это будет содержать их имя, очевидно, и какой-то уникальный идентификатор (лучше всего это «Первичный ключ» в таблице базы данных пользователей), но НЕТ, пожалуйста, их пароль для доступа к базе данных, особенно не в виде обычного текста.
После создания таблицы Users вы можете создать сетку отображения (TDBGrid) и форму ввода / редактирования для нее.
Затем, если у вас его еще нет, вы можете настроить сетку и форму редактирования для документов пользователей (которые я буду называть таблицей документов).
Как только это будет сделано, главное, что осталось сделать, - это настроить в вашем проекте Delphi связь Master-Detail между вашей таблицей Users (мастер) и таблицей Documents (деталь).
Если вы предпочитаете, у вас может быть одна форма с двумя сетками, сеткой «Пользователи» и сеткой «Документы», и, прокручивая сетку «Пользователи», вы увидите, что в сетке «Документы» отображаются только записи их документов.
Детали того, как настроить Master-Detail, несколько различаются в зависимости от типа таблицы / набора данных, которые вы используете, поэтому вам нужно будет поискать в Интернете подробности того, как это сделать. В общих чертах, это вопрос подключения TDataSource к вашей таблице Users и установки свойства DataSource (или MasterSource) вашей таблицы Documents так, чтобы он указывал на Users TDataSource, а затем установки нескольких других свойств документов, зависящих от типа таблицы. Таблица.
Каждая редакция Delphi, задолго до D7, поставлялась с демонстрационным приложением «MastApp», которое иллюстрирует, как вы используете связь Master-Detail между несколькими таблицами. Я предлагаю вам взглянуть на MastApp для вашей версии Delphi, а затем изучить, как настроить отношения M-> D для типа набора данных Delphi, который вы фактически используете.
«разработчик должен вернуться к коду приложения и жестко его запрограммировать». Нисколько! Для этого нужно иметь в своей базе данных таблицу пользователей и их данные. Затем вы пишете код отслеживания документа для обработки пользователя, который является текущей записью в таблице Users. Вам вообще не следует требовать каких-либо условных тестов для идентификации пользователя в вашем коде.