|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
20.10.2010, 12:59 | #1 |
Форумчанин
Регистрация: 01.09.2009
Сообщений: 151
|
field required but not supplied - firebird
Здравствуйте.
Не могу понять с какой стороны подступисться к такой проблеме: в firebird-базе данных есть таблица SUBSCRIBER_TBL. У неё задан первичный ключ по полю ID_ с которым связан соответствующий генератор через триггер BEFORE_INSERT. Набор данных этой таблицы отображается в DBGridEh из TZQuery (ZEOS). Проблема заключается в том, что я не могу добавить новую запись в таблицу при помощи DBGridEh (т.е. при помощи курсора). Происходит вот что: после того как у новой записи заполняю требуемые значения (NAME_ и PHONE_) жму Enter (т.е. вызываю Post для моего набора данных) и вылетает сообщение "field ID_ required but not supplied" и запись не добавляется. Хотя если я делаю то же самое в IBExpert-е, то новая запись нормально добавляется. Подскажите, плз, из-за чего может возникнуть эта проблема (DBGridEh или TZQuery), и как её можно решить. Или хотя бы где копать? |
20.10.2010, 14:14 | #2 |
Форумчанин
Регистрация: 26.07.2009
Сообщений: 216
|
Проблема из-за того, что отправляя новую запись на сервер TZQuery не имеет и не передает значения ID_. Его парсер, "зная", что это значение требуется, но не обнаружив такового в запросе выдает ошибку.
Такое происходит только если добавление записи делается в гриде на форме. В IBDataset, например, чтобы обойти эту проблему существует свойство GeneratorField, где указывается какое поле из таблицы имеет автоинкремент и с каким шагом. Это позволяет Dataset'у самому сгенерировать очередное значение новой записи и отправить его с запросом. Может быть в TZQuery (или других компонентах, работающих с БД) тоже подобное есть. Наверняка разработчики Zeos знают об этой проблеме. Если же нет, то пути два. Первый написать ХП, которая доставляет на клиента значение текущего ID нужной таблицы (опросив генератор, в какой позиции у него находится ID). Клиент увеличивает это значение на тот шаг, который задан в генераторе и посылает это значение вместе со значениями всех полей. При этом придется в гриде добавить совсем не нужное поле для значений ID_. Второй - бросить редактировать таблицу в гриде. Оставить ее только для отображения данных. Есть, правда, и третий. Генерировать уникальные значение самому, а не поручать это генераторам. P.S. Не очень понятно зачем в этом случае нужен ZEOS, когда для Firebird в Дельфи есть штатные компоненты IBX. Последний раз редактировалось Karabash; 20.10.2010 в 14:20. |
20.10.2010, 14:19 | #3 |
Форумчанин
Регистрация: 01.09.2009
Сообщений: 151
|
Отвечаю сам себе
Оказывается, что TZQuery, когда создаёт набор полей, то для полей, которые помечены как NOT NULL выставляет св-во Required равным True. А когда он выполняет обновление, порверяет, что бы Required было не равно True. Обойти эту штуку можно 2-мя способами: 1. Создать поля вручную и нужным полям выстовить Required := False. 2. Каждый раз после загрузки набора данных указывать нужному полю Required := False P.S. Пока писал ответ нашлись ещё два варианта Последний раз редактировалось Greek9000; 20.10.2010 в 14:21. |
20.10.2010, 14:32 | #4 |
Форумчанин
Регистрация: 26.07.2009
Сообщений: 216
|
Не знаю какие еще нашлись варианты, но первые два из серии: "от лома нет приема".
Зачем же в полях таблицы БД устанавливать NOT NULL, если эта проверка отключается на клиенте (пусть даже у "нужных" полей)? |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Field not found | New_One1603 | БД в Delphi | 3 | 11.04.2011 23:42 |
LValue required | _-Re@l-_ | Общие вопросы C/C++ | 18 | 25.09.2010 15:20 |
в чём причина ошибки - mysql_num_rows(): supplied argument is not a valid | vedro-compota | PHP | 6 | 23.09.2010 16:12 |
mysql_free_result(): supplied argument is not a valid MySQL result resource in | lbkzhf | SQL, базы данных | 1 | 30.07.2010 16:46 |
Field not found | Alkatras | БД в Delphi | 9 | 26.05.2010 06:51 |