1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.

БД INterBase

Тема в разделе "Программирование", создана пользователем D_A_S, 12.08.07.

  1. D_A_S

    D_A_S Активный участник

    1.652
    74
    Есть одна проблема с обработкой данных в БД InterBase(Firebird). Я написал триггер при вставки нового сообщения, в котором для поля(например) Name проверяется его заполнение следующим образом:
    if (New.Name is NULL) then exception errror;
    Оно должно генерировать искючение, если поле Name не заполнено пользователем. При работе в C++ Builder при вставке новой записи прокатывает ситуация, когда Name = NULL, т.е. пользователь не заполняет это поле,но оно добавляется к БД ( а должно гененироваться исключение error, и запись не должна вставляться).
    При чем в этом поле в БД хранится пустая строка после этого (не NULL).
    Может у кого была такая ситуация??? Заранее спасибо!
     
  2. 1777

    1777 Активный участник

    7.076
    198
    проверять не только на null, но и на пустую строку
    может тебе программа отдает не null, а как раз пустую строку

    ps по крайней мере в visual studio компонентах встречал свойство - ConvertEmptyStringToNull - что то типа того

    ps а еще проверку можно в программе делать вручную, а если компонент позволяет - то прям через свойства компонента настраивать - этим мне нравится например ASP.NET - поставил галочку что поле обязательное в разделе Validation, и пока не заполнишь - ничего не случиться дальше.. :shys:
     
  3. D_A_S

    D_A_S Активный участник

    1.652
    74

    Проверять то можно, но InterBase тогда теряет все свои плюсы
     
  4. Гость

    Гость Гость


    Триггер посмотри как объявил. Если мне не изменяет память, там есть триггеры до вставки и после вставки записи.
     
  5. D_A_S

    D_A_S Активный участник

    1.652
    74
    Триггер вставлен правильно, когда вставляешь запись непосредствено через InterBase то триггер выдает предупреждение, если поле не заполнено. А уже через С++ Builder происходит какое-то преобразование (видимо)
     
  6. jek

    jek Активный участник

    5.732
    0
    В билдере по крайней мере раньше было именно так. Не отдавал он нулла а именно что пустую строку. Причем если формат объявляешь, то столько пробелов, сколько определено форматом. Завуисит от используемой компоненты и ничего тут не сделаешь. Проверять в триггере на пустую строку, ну или в программе.
     
  7. Гость

    Гость Гость


    А, понял. А ты через что с ним общаешься? Хотя неважно. Тут у тебя действительно небольшой затык в логике (неважно, что там приблуды сами по себе творят) - логически пустая строка, это ведь не только NULL, но и некое количество пробелов. Поэтому в своем триггере добавляй что-то типа OR trunc(New.NAME)='' (не помню точно, как там называется обрезка пробелов в UDF)