krecha |
Отправлено: 29.07.2004, 21:30 |
|
Не зарегистрирован
|
Пользователь вводит строку заведомо находящуюся в базе днных. Как можно получить (расрзнать то что он ввёл) эту строку? |
|
olegenty |
Отправлено: 30.07.2004, 06:49 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
фоновым запросом поискать в соответствующем поле. других вариантов нет, по-моему.
|
|
AVC |
Отправлено: 30.07.2004, 08:08 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
Согласен с olegenty. Только поиском по базе. В исключительном случае (с таким запросом работает только один пользователь и ВСЕ записи находятся на стороне клиента) можно искать по DataSet.
Обычно это является правилом целостности и возлагается на сервер БД (constraint, trigger или unique index) |
|
olegenty |
Отправлено: 30.07.2004, 08:57 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
целостность-то возлагается, но вот простой аргумент заказчика:
- зачем мне вводить ВСЕ поля, и после попытки записи видеть сообщение об ошибке, если после ввода значения в данное поле УЖЕ известно, что запись не пройдёт (или мне нужна дополнительная информация).
приходится писать всякие CheckFieldExists и т.д. :-)
думаю, все с этим сталкивались. да и пользователь-заказчик в этом случае прав.
|
|
AVC |
Отправлено: 30.07.2004, 09:21 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
Во первых я не против фонового запроса.
Во вторых
QUOTE | зачем мне вводить ВСЕ поля, и после попытки записи видеть сообщение об ошибке, если после ввода значения в данное поле УЖЕ известно, что запись не пройдёт |
Я стараюсь централизировать бизнес правила на сервере и освобождать от сложных проверок клиента. Это позволят легко перенастраивать систему без обновления клиентов. Поэтому только сервер является высшим арбитром по допустимости данных и только он может отвергнуть запрос. Если запрос отвергнут я обычно возвращаюсь в режим редактирования для исправления ошибок.
У меня хватит фантазии придумать ситуацию, когда фоновый запрос будет выполняться минуты или больше.
Такие проверки как правило нужны в справочниках т.е. простых таблицах типа ID, Name а там и повторить ввод не зазорно. В сложных таблицах уникальность одного поля обычно роли не играет.
Ни когда не использую типа CheckFieldExists.
|
|
olegenty |
Отправлено: 30.07.2004, 09:27 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
насчёт вернуть поля для редактирования — я не подумал, это ты безоговорочно прав. а насчёт Check... вопрос интерфейса пользователя, который хочет видеть заказчик. другого способа вытягивать дополнительную инфу (история изменения конструкторской документации по коду изделия) я не нашел...
|
|
AVC |
Отправлено: 30.07.2004, 09:38 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
QUOTE |
насчёт Check... другого способа вытягивать дополнительную инфу (история изменения конструкторской документации по коду изделия) я не нашел...
|
Не совсем понял (совсем не понял) связь проверки поля с дополнительной информацией о записи. Поделись проблеммой — может найдется решение. |
|
olegenty |
Отправлено: 30.07.2004, 12:14 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
да всё просто: в общем случае это процедура, возвращающая указатель на TDataSet, который получается по запросу с параметром. Пользователю модально показывается окно с этим DataSet, и предлагается
1. перейти на работу с уже имеющейся записью
2. продолжить работу
3. прийти к выводу, что он вообще не прав, и глобально выйти в окно списка-перечня конструкторских изделий.
|
|
AVC |
Отправлено: 30.07.2004, 13:00 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
Теперь ясно. Я бы делал по примерно такой же схеме, но возвращал бы не DataSet а PrimaryKey. Тогда (в моих соглашениях)
newID == oldID — продолжаем работу;
newID != oldID — переходим к старой записи;
newID == 0 — отказ от редактирования, шаг назад. |
|
olegenty |
Отправлено: 02.08.2004, 14:38 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
я так и делаю, но позже, после выбора записи из вернувшегося датасета.
|
|
AVC |
Отправлено: 02.08.2004, 16:15 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
А я DataSet'ы размещаю на формах поэтому после закрытия дочерней формы DataSet'а уже нет. |
|
olegenty |
Отправлено: 03.08.2004, 07:07 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
ну и у меня так. датасеты показываются модально, а по факту закрытия формы, валятся вместе с формой. ))
|
|