|
|
|
FIBPlus blob default значение не NULL
|
|||
|---|---|---|---|
|
#18+
Приветствую! Подскажите есть домен для FB: Код: sql 1. И почему-то FIBPlus Dataset не хочет для него по умолчанию (для других типов данных типов данных все работает) брать дефолтное значение и подставлять его для sql-запросов датасета. Вместо пустого значения которое заданно для умолчания, почему-то подставляется NULL. Причем, даже если я вручную пытаюсь задать FN('CONTENT').AsString:=''; То все равно FIBPlus делает запрос к базе с NULL значением... опция pfImportDefaultValues:=True И собственно для всех других типов дефолтное значение успешно подставляется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2019, 21:19 |
|
||
|
FIBPlus blob default значение не NULL
|
|||
|---|---|---|---|
|
#18+
melbis, в ФИБах это отключено? В крайнем случае, создай на сервере триггер Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2019, 21:56 |
|
||
|
FIBPlus blob default значение не NULL
|
|||
|---|---|---|---|
|
#18+
Док, спасибо за быстрый ответ! psSetEmptyStrToNull конечно тоже стоит False; И собственно с типом данных VARCHAR все работает - нет никого NULL при попытки сохранить пустую строку. А вот с BLOB такой фокус не работает! и вот причина здесь именно в обработке BLOB. Сейчас сделал пробный тип BLOB SUB_TYPE 1 DEFAULT 'TEST' и обнаружил что дефолтное значение все-таки подхватывается!!! и подставляется по умолчанию, НО вот причина в том, что если значение пустая строка, то тогда оно почему-то конвертируется в NULL. И все это именно для BLOB, с VARCHAR такого нету. Проблема не в компоненте редакторе, проверил тоже. Если задавать в ручную FN('FIELD').AsString=''; то опять на выходе ошибка из-за NULL. P.S. Создавать тригеры очень не хочу, у меня порядка сотни таблиц. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2019, 22:09 |
|
||
|
FIBPlus blob default значение не NULL
|
|||
|---|---|---|---|
|
#18+
melbisтогда оно почему-то конвертируется в NULL Результат, часом, не IBE смотришь? Если так, то попробуй затри <null> здесь получишь и ничего менять не придется :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2019, 23:47 |
|
||
|
FIBPlus blob default значение не NULL
|
|||
|---|---|---|---|
|
#18+
melbisЕсли задавать в ручную FN('FIELD').AsString=''; то опять на выходе ошибка из-за NULL. кстати, а что за ошибка и что за "выход"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2019, 23:48 |
|
||
|
FIBPlus blob default значение не NULL
|
|||
|---|---|---|---|
|
#18+
Обычна ошибка Validation, к FB претензий нету, непонятно вот почему FIB+ тулит NULL вместо "" Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2019, 01:38 |
|
||
|
FIBPlus blob default значение не NULL
|
|||
|---|---|---|---|
|
#18+
melbis, Тогда уж показывай DDL таблицы, где поле NOTICE. И заодно код на клиенте, каким образом ты в это поле значения суешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2019, 10:43 |
|
||
|
FIBPlus blob default значение не NULL
|
|||
|---|---|---|---|
|
#18+
Навскидку, в запросе для NOTICE используй coalesce ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2019, 10:49 |
|
||
|
FIBPlus blob default значение не NULL
|
|||
|---|---|---|---|
|
#18+
По правилам SQL NULL сравнивать нельзя. (иногда это включается настройками set). Для сравнения используется Код: sql 1. или соотв. функции ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2019, 11:10 |
|
||
|
FIBPlus blob default значение не NULL
|
|||
|---|---|---|---|
|
#18+
GatorПо правилам SQL NULL сравнивать нельзя. (иногда это включается настройками set). У ТС в DDL домена NOT NULL, похоже, воткнут. Вот и ругается птиц :) melbis, Ы? Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2019, 12:20 |
|
||
|
FIBPlus blob default значение не NULL
|
|||
|---|---|---|---|
|
#18+
Док, Ну пусть юзает не пустую строку, а пробел или 0х00 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2019, 12:32 |
|
||
|
FIBPlus blob default значение не NULL
|
|||
|---|---|---|---|
|
#18+
Gator, подождем, пока выскажется "начальник транспортного цеха" © :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2019, 14:46 |
|
||
|
FIBPlus blob default значение не NULL
|
|||
|---|---|---|---|
|
#18+
Док, завтра ведь пятницаааа ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2019, 14:48 |
|
||
|
FIBPlus blob default значение не NULL
|
|||
|---|---|---|---|
|
#18+
Gator, не только ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2019, 15:34 |
|
||
|
FIBPlus blob default значение не NULL
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. да, есть вариант с coalesce, но это все как и триггера - надо много чего править... Есть ли вариант настроить FIB+ таким образом чтобы он не пытался подставить NULL вместо пустой строки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2019, 21:50 |
|
||
|
FIBPlus blob default значение не NULL
|
|||
|---|---|---|---|
|
#18+
melbisЕсть ли вариант настроить FIB+ таким образом чтобы он не пытался подставить NULL вместо пустой строки? кроме той опции, я про другие не знаю. Кстати, как ты узнаёшь, что вместо пустой строки там NULL? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2019, 23:18 |
|
||
|
FIBPlus blob default значение не NULL
|
|||
|---|---|---|---|
|
#18+
Док, Через FibErrorHandler. Я привел выше 21826875 отчет по ошибке где четко видно, что для поля BLOB FIBPlus вместо "" подставляет NULL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2019, 23:46 |
|
||
|
FIBPlus blob default значение не NULL
|
|||
|---|---|---|---|
|
#18+
melbisотчет по ошибке где четко видно, что для поля BLOB FIBPlus вместо "" подставляет NULL имхо, у тебя два выхода: либо править исходники ФИБов (т.е. включить поведение psSetEmptyStrToNull и для текстовых блобов), либо править ручками исходники своего приложения (или ковыряться в базе). Боюсь, тут "понадобится программист" © :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2019, 10:41 |
|
||
|
FIBPlus blob default значение не NULL
|
|||
|---|---|---|---|
|
#18+
Док, так и есть! И чтобы не изобретать велосипед, может у кого-то уже есть исправленный блок ФИБов для работы с BLOB NULL? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2019, 11:30 |
|
||
|
FIBPlus blob default значение не NULL
|
|||
|---|---|---|---|
|
#18+
melbis Код: sql 1. И почему-то FIBPlus Dataset не хочет для него по умолчанию (для других типов данных типов данных все работает) брать дефолтное значение и подставлять его для sql-запросов датасета. Вместо пустого значения которое заданно для умолчания, почему-то подставляется NULL. Причем, даже если я вручную пытаюсь задать FN('CONTENT').AsString:=''; То все равно FIBPlus делает запрос к базе с NULL значением... опция pfImportDefaultValues:=True И собственно для всех других типов дефолтное значение успешно подставляется. Тут дело не в Fib+. Тут дело в Delphi, скорее. Дело в том, что данные для blob-поля пишутся в буфер Код Код: pascal 1. в итоге вызовет метод TBlobField.SetAsString('') модуля db.pas: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. При Value равном "Пустая строка" операция WriteBuffer(Pointer(Value)^, Length(Value)) в реальности не сделает никаких изменений. Автоматиче кое назначение Default value для поля вызовет то же действие. В итоге на сервер в качестве значения уедет Null. --- Вместо TpFIBDataSet используй TpFIBQuery. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2019, 13:12 |
|
||
|
FIBPlus blob default значение не NULL
|
|||
|---|---|---|---|
|
#18+
Разрабоччик, Спасибо! Да есть такой вариант, я нашел в FIBDataset обертку для работы с мемо Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. как вариант можно исправить на Код: pascal 1. 2. 3. 4. ну или в db.pas там где Вы указали. Но мне не очень нравится этот вариант, все-таки FIB+ общается с СУБД с помощью SQL-запросов как я понимаю? Как отправляется непосредственно блоб в БД? Если с помощью SQL, то правильнее найти тот код в котором формируется этот SQL (точнее подставляются значения в SQL-запрос вместо :FIELD) и там скорее всего происходит анализ, если значение нулевой длины, то подставляется константа NULL, которую и заменить собственно на пустую строку. Но вот не могу найти только где это происходит... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2019, 13:35 |
|
||
|
FIBPlus blob default значение не NULL
|
|||
|---|---|---|---|
|
#18+
melbis, для редактирования блоб - полей никогда не использовал датесет, только TpFIBQuery, и проблем не было. Может, действительно добавишь триггер OnBeforeInsert/OnBeforeUpdate? Код: plsql 1. 2. И заодно not null к ddl домена. Чтобы ошибочно не навтыкать лишнего. Все же, контроль на сервере надежнее. И никакой головной боли на клиенте, в данном случае - с fib+. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2019, 14:37 |
|
||
|
FIBPlus blob default значение не NULL
|
|||
|---|---|---|---|
|
#18+
melbisP.S. Создавать тригеры очень не хочу, у меня порядка сотни таблиц. Сие легко автоматизировать. Например, в генераторе скрипта дизайнера IbExpert. Для каждой таблички, в составе полей которой есть соотв. домен, и т.д. - создать триггер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2019, 14:42 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39784396&tid=2039710]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
158ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
| others: | 236ms |
| total: | 483ms |

| 0 / 0 |
