Есть одна проблема с обработкой данных в БД InterBase(Firebird). Я написал триггер при вставки нового сообщения, в котором для поля(например) Name проверяется его заполнение следующим образом: if (New.Name is NULL) then exception errror; Оно должно генерировать искючение, если поле Name не заполнено пользователем. При работе в C++ Builder при вставке новой записи прокатывает ситуация, когда Name = NULL, т.е. пользователь не заполняет это поле,но оно добавляется к БД ( а должно гененироваться исключение error, и запись не должна вставляться). При чем в этом поле в БД хранится пустая строка после этого (не NULL). Может у кого была такая ситуация??? Заранее спасибо!
проверять не только на null, но и на пустую строку может тебе программа отдает не null, а как раз пустую строку ps по крайней мере в visual studio компонентах встречал свойство - ConvertEmptyStringToNull - что то типа того ps а еще проверку можно в программе делать вручную, а если компонент позволяет - то прям через свойства компонента настраивать - этим мне нравится например ASP.NET - поставил галочку что поле обязательное в разделе Validation, и пока не заполнишь - ничего не случиться дальше..
Триггер посмотри как объявил. Если мне не изменяет память, там есть триггеры до вставки и после вставки записи.
Триггер вставлен правильно, когда вставляешь запись непосредствено через InterBase то триггер выдает предупреждение, если поле не заполнено. А уже через С++ Builder происходит какое-то преобразование (видимо)
В билдере по крайней мере раньше было именно так. Не отдавал он нулла а именно что пустую строку. Причем если формат объявляешь, то столько пробелов, сколько определено форматом. Завуисит от используемой компоненты и ничего тут не сделаешь. Проверять в триггере на пустую строку, ну или в программе.
А, понял. А ты через что с ним общаешься? Хотя неважно. Тут у тебя действительно небольшой затык в логике (неважно, что там приблуды сами по себе творят) - логически пустая строка, это ведь не только NULL, но и некое количество пробелов. Поэтому в своем триггере добавляй что-то типа OR trunc(New.NAME)='' (не помню точно, как там называется обрезка пробелов в UDF)