Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
1-1102899628
Bobby Digital
2004-12-13 04:00
2004.12.26
Координаты


3-1101714458
ruslan_as
2004-11-29 10:47
2004.12.26
Какими компонентами и как создавать скриптами таблицы InterBase


3-1101712572
Rule
2004-11-29 10:16
2004.12.26
Чегото не могу подключится через FB embeded к базе


14-1102490694
AlexG
2004-12-08 10:24
2004.12.26
Важно ваше мнение!


4-1100012575
landy
2004-11-09 18:02
2004.12.26
Короткий горизонтальный скроллбар





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский