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

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

Как грамотно отменить изменения в конкретном поле в TADOQuery? [D7, MSSQL]


Opilki_Inside ©   (2006-10-04 12:03:00) 

Имеем следующий код:
var
 Q: TADOQuery
...
 q.Insert;
 q.FieldByName('code').AsString := 'Тест';
 q.FieldByName('year').AsVariant := Null;
 q.FieldByName('year').Clear;
 q.Post;


Если в базе данных поле year определено скажем так:
year INT NOT NULL DEFAULT '2005'

То произойдет ошибка при посте, т.к. DataSet будет пытаться записать в поле year значение Null. Как очистить это поле и сделать так что бы DataSet понимал, что это поле не нужно передавать в запросе (т.к. оно будет формироваться в БД по умолчанию)?

Пробывал с OldValue NewValue - не помогло.

MS SQL Server 2005 EE
Delphi 2006


ANB   (2006-10-04 12:44:00) [1]


> Opilki_Inside ©   (04.10.06 12:16) [5]

см.

> clickmaker ©   (04.10.06 12:05) [2]

есть вариант №2 - считывать заранее дефолтные значения и ими оперировать, если в поле едет нулл, а оно нот нулловое.


Opilki_Inside   (2006-10-04 12:16:00) [2]

var  Q: TADOQuery
...  
 q.Insert;
 q.FieldByName('year').AsVariant := Null;
 if q.FieldByName('year').OldValue <> q.FieldByName('year').NewValue
  ShowMessage('Data was modified!');
 q.FieldByName('year').Clear;  q.Post;


В таком случае тоже произойдет исключение, и сообщение при этом не будет показано на экране... Я не могу отследить было оно изменено или нет, т.к. у него и OldValue и NewValue = Null


clickmaker   (2006-10-04 12:12:00) [3]


> как узнать что данное поле было изменено?

OldValue <> NewValue, но только ДО Post


Opilki_Inside   (2006-10-04 12:07:00) [4]

Это я понимаю...
Ситуация немного сложнее - у меня есть один DataSet (в оперативной памяти), я пробегаюсь по нему (и соответственно по всем его полям) и записываю данные в другой DataSet, который подключен к базе.

Тогда задам вопрос по другому, как узнать что данное поле было изменено?


clickmaker   (2006-10-04 12:05:00) [5]


> Opilki_Inside ©   (04.10.06 12:03)

ну так не включать его в insert


Stanislav   (2006-10-04 12:04:00) [6]

ничего не передавать :-)


Наверх

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