Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Почему вставляются пустые поля? [D7, FireBird 2.0]


Страницы:   1 2

macrodens ©   (2010-02-01 16:15:00) 

Всем доброго времени суток.

Работаю с Firebird 2.0
Через IBExpert создал базу и в ней табличку с полями
ID (integer)           - not null autoinc (тригер)
Name (varchar(96)  - not null
Pole1 (varchar(96)

если я в IBExpert пытаюсь добавить запись не заполнив поле Name - все ок - срабатывет исключение,
однако при выполнении SQL запроса через компоненты ADO или IBX запись с пустым полем спокойно вставляется, а в IBExpert потом при редактировании этой записи (поле Name не трогаем) исключение уже не возникает.

Подскажите почему все-таки вставляются записи с пустыми полями при not null и как сделать что бы обработка все же происходила?

Пробовал спросить у гугля и яндекса, увидел только вопрос с похожей ситуацией в MySQL.


macrodens   (2010-02-01 18:06:00) [21]

пришлось написать тригер по инсерту и апдейту и там проверять...


macrodens   (2010-02-01 17:32:00) [22]

ан нет не заработало.... :-(


macrodens   (2010-02-01 17:10:00) [23]

поставил default=null и все заработало!!!


macrodens   (2010-02-01 17:06:00) [24]

to Ega23 ©   (01.02.10 16:57) [6]
проверка все равно не осуществляется


macrodens   (2010-02-01 16:59:00) [25]

Код запроса в студию.

adoconnection1.BeginTrans;
with ADOQuery1 do
begin
 SQL.clear;
 SQL.add('INSERT INTO MYTABLE (NAME, POLE1) VALUES (:C1, :C2)');
 Parameters.ParamValues['c1;c2;']:=VarArrayOf(Edit1.test, Edit2.text);
 ExecSQL;
end;
adoconnection1.CommitTrans;

запрос проходит и запись вставляется даже при Edit1.text=''
если вместо него указать null, то исключение срабатывает.


Ega23   (2010-02-01 16:57:00) [26]


> Мне нужно что бы при вставке записи осуществлялась проверка
> поля, что оно не пустое, и желательно что бы проверку осуществлял
> сервер базы данных.


Create table test (fld varchar(32) not null default '');


Ega23   (2010-02-01 16:56:00) [27]


> Единственное пока что я понял, что пустая строка ('') не
> равна null


Именно так. По крайней мере - в FireBird.


macrodens   (2010-02-01 16:52:00) [28]

И что даст это значение по умолчанию?
Мне нужно что бы при вставке записи осуществлялась проверка поля, что оно не пустое, и желательно что бы проверку осуществлял сервер базы данных.

Единственное пока что я понял, что пустая строка ('') не равна null


12   (2010-02-01 16:48:00) [29]

Во. Спасибо.
хм..

>> почему все-таки вставляются записи с пустыми полями при not null
прикольно еще тут написано
http://alexey-rouban.livejournal.com/11984.html
дома потестю..


Ega23   (2010-02-01 16:47:00) [30]


> однако при выполнении SQL запроса через компоненты ADO или
> IBX запись с пустым полем спокойно вставляется


Код запроса в студию.


Diplomat   (2010-02-01 16:41:00) [31]

По видимому в поле Name, должно быть указано значение по умолчанию.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо