Форум: "Базы";
Текущий архив: 2004.12.26;
Скачать: [xml.tar.bz2];
ВнизDBGrid, Lookup Field, "Non-nullable column cannot be updated..." Найти похожие ветки
← →
Clone (2004-11-24 14:22) [0]Пустячок, вроде, а обидно: Настроил LookUp поле в выборке, редактирую через Grid, все ОК.
НО: если просто руками стираю значение в LookUp столбце (то бишь очищаю ссылку на LookUp DataSet), то получаю EOle Exception вида:
"Non-nullable column cannot be updated to Null".
А мне бы надо получить не Null, а просто пустую строку. А не выходит...
PS: В LookUp DataSet"е есть запись вида: id=0, desc="" - т.е. именно определение пустой ссылки.
Если выбирать ее из выпадающего списка, то ОК, а вот руками - никак. М.б. где забыл какой "крыжык" проставить в Obj. Insp. а?
← →
Sandman25 © (2004-11-24 14:32) [1]Required у TField True?
← →
Clone (2004-11-24 14:38) [2]Yes!
← →
Sandman25 © (2004-11-24 14:42) [3]Можно попробовать поставить обработчик TIntegerField.OnSetText:
if Text = "" then
TIntegerField(Sender).AsInteger := 0
else
TIntegerField(Sender).AsInteger := StrToInt(Text)
← →
Clone (2004-11-24 15:07) [4]Не помогает абсолютно...
PS: я предполагаю, что можно попробовать ловить событие типа OnChange, OnSetText, OnValidate (причем именно для поля в LookUp столбце) и извращаться в обработчике... но надеялся, что "такую крохотную фичу" можно реализовать и простой настройкой компонентов. Неужто так запущено ?
← →
Sergey13 © (2004-11-24 15:14) [5]2Clone (24.11.04 14:22)
А зачем ты его "просто руками стираю значение", если поле не может быть нулом?
← →
Sandman25 © (2004-11-24 15:16) [6][5] Sergey13 © (24.11.04 15:14)
Точно. Нужно на пробел нажать, а в справочнике сделать значение из одного пробела!
← →
Clone (2004-11-24 15:17) [7]Sergey13: А какой ты предложишь способ "очищать ссылку" ?
Причем именно руками, с клавиатуры (объяснять пользователю, что обязательно надо выбирать из выпадающего списка ?!)
← →
Clone (2004-11-24 15:21) [8]Sandman25: Какой, блин, пробел? Вы чо, ребята! (Да и не всегда это вообще возможно!) Это еще хуже, чем "ловить события и причесывать их кодом". Ну дела...
← →
Sergey13 © (2004-11-24 15:21) [9]2 [7] Clone (24.11.04 15:17)
Поле у тебя не может быть NULL (это ограничение в таблице такое). Ты его и не сможешь "очистить". Исправить на другое можно, "очистить" нельзя.
← →
Clone (2004-11-24 15:25) [10]Опять сначала: Да, поле NOT NULL. Вопрос был - как присвоить ему значение "пустая строка"? Неужто никак без обработчиков???
← →
Clone (2004-11-24 15:25) [11]Опять сначала: Да, поле NOT NULL. Вопрос был - как присвоить ему значение "пустая строка"? Неужто никак без обработчиков???
← →
Clone (2004-11-24 15:28) [12]Упсс! Склонировал... 8 )))
Эк здесь сервер глючит... (Или только у меня?)
← →
Sergey13 © (2004-11-24 15:31) [13]2[10] Clone (24.11.04 15:25)
>Опять сначала: Да, поле NOT NULL. Вопрос был - как присвоить ему значение "пустая строка"?
А в справочнике, на который ссылается лукап есть запись с "пустая строка"?
← →
Clone (2004-11-24 15:35) [14]Я, конечно, извиняюсь, но в самом первом своем посте я уже предварил этот вопрос своим PS :)))
← →
Sergey13 © (2004-11-24 15:58) [15]2[14] Clone (24.11.04 15:35)
>Я, конечно, извиняюсь
Сори, не разглядел. 8-) А набирая что либо поиск по полю работает?
← →
Clone (2004-11-24 16:03) [16]Конечно! Поэтому пользователю и удобнее все делать с клав-ры.
← →
Sergey13 © (2004-11-24 16:06) [17]Тогда может сделать не desc="" а например desc=" Нет ссылки" и пусть пробелом жмет. Видимо при стирании поиск не идет, что в общем то логично.
← →
Clone (2004-11-24 16:19) [18]Sergey13: Да нет уж, менять идеологию и содержимое БД не буду. Наверное, ничего не остается, как писать процедуру, к-рая будет анализировать переданный ей Text, и подставлять 0 в поле c именем KeyFields, взятым из текущего LookUp поля.
И вызывать эту процедуру из всех OnSetText для таких LookUp полей.
Не ожидал, признаться... 8(((
← →
Clone (2004-11-24 17:46) [19]Наверное, последнее дополнение:
Сперва маленькое уточнение - я использую DBGridEh.
Так вот, проще всего оказалось написать обработчик на dbGridColumnEh.OnUpdateData - всего из одной строки:if (Value = Null) then Value := 0;
Этот обработчик имеет 2 параметра:var Text: String; var Value: Variant
Причем, что интересно, для LookUp поля в этом обработчике Text - это LookUpResultField, а Value - это LookUpKeyField.
Так что присваивать надо именно 0, а не ""...
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.12.26;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.033 c