Главная страница
    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.034 c
14-1102446381
Alexander Panov
2004-12-07 22:06
2004.12.26
Простая загадка-)


14-1101230112
alex145
2004-11-23 20:15
2004.12.26
Visual Studio


1-1102501731
Sirus
2004-12-08 13:28
2004.12.26
Как вставить байты в файл и как их оттуда удалить???


14-1102487212
ocean
2004-12-08 09:26
2004.12.26
ДТП


11-1084435973
dimon1979
2004-05-13 12:12
2004.12.26
KOL-компоненты и тип PControl





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский