Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.12.26;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.036 c
14-1102314317
Vlad Oshin
2004-12-06 09:25
2004.12.26
Наконец нашел в нашей дыре контору, где реально надо писать


14-1102215968
Думкин
2004-12-05 06:06
2004.12.26
С днем рождения! 5 декабря


8-1096363662
BALU1111
2004-09-28 13:27
2004.12.26
Построение поверхностей второго порядка в трехмерном пространстве


4-1097473620
Rentgen
2004-10-11 09:47
2004.12.26
Включить компьютер.


14-1102069619
andsoft
2004-12-03 13:26
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский