Проверка записи в DBGridEh

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
ntmk
Сообщения: 2
Зарегистрирован: 18 авг 2004, 14:18

Как можно сделать так чтобы при выходе из редактирования ячейки в DBGridEh или DBGrid, до посадки в базу можно было проверить что ввёл в ячейке пользователь?

Заранее спасибо!!
----------------------------------------
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Забудьте про гриды! Делайте это в обработчике BeforePost интересующего Вас набора данных (таблицы или запроса).

При обнаружении ошибки выводите сообшение и вызывайте процедуру Abort, чтобы сохранения не произошло.
Wano
Сообщения: 1
Зарегистрирован: 05 ноя 2004, 07:32
Контактная информация:

BeforePost не всегда помогает. Пример:
Я добавил строку в DBGrid. Стал поочередно редактировать Fields этой строки. Post происходит только тогда, когда я перемещусь на другой RecordSet. Итак, я отредактировал 3 Fields из 5. Перемещаюсь на другой RecordSet и получаю ошибку: "Не удается найти строку для обновления. Некоторые значения могли быть изменены со времени ее последнего чтения."
А если я после вставки строки изменяю ОДИН Field и перехожу на другой RecordSet, то ошибок не возникает.

Тут конечно, BeforePost можно применить и сказать пользователю, что "после того как вы добавили строку, нужно ввести одно поле данных, затем нажать Post, затем второе поле данных, затем опять Post...". Да еще обработчик загружать кодом.

Гораздо проще после введения пользователем данных, незаметно для него сделать Post. Это в случае применения DBNavigator.

Возможно существует способ попроще и рациональнее, подскажите.
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

TField.OnValidate для проверки правильности значения поля. Либо можно задать TField.CustomConstraint
А вообще, у меня была такая ошибка при работе с базой Access через ADO. Она происходит при рассогласовании свойств поля заданных в Access и в свойствах поля в Delphi.
Изображение
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

и получаю ошибку: "Не удается найти строку для обновления. Некоторые значения могли быть изменены со времени ее последнего чтения."
Эта ошибка означает следующее:
В ходе изменения данных было изменено ключевое поле и ядро (движок базы) не может сконструировать UPDATE-оператор, чтобы занести изменения в таблицу.

При работе с *.DB+BDE+TTable - такая ошибка почти нонсенс, так как BDE использует какие-то фишки самого парадокса, а вот если TTable заменить на TQuery то при работе с *DBF+BDE то вполне вероятно... Т.е. эта ошибка (что лоично) зависит также и от используемого движка, и от базы. В последний раз натыкался на эту ошибку лет 8-9 назад, когда пытался перейти с Paradox на MS-Jet(Access), а позже на IB.

Что касается EhLib, то сам его никогда не использовал. Если в EhLib строит какие-нибудь промежуточные запросы (например, если в DBGridEh есть.... ну, фильтры, например), то вполне вероятно, что такую ошибку мы получим даже при работе с Paradox.
Ответить