![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как грамотно отменить изменения в конкретном поле в 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]ничего не передавать :-)