![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Кеширование изменений и ADO + MSSQL [D7, MSSQL]
albr © (2005-01-31 19:54:00)Подскажите как можно побороть следующий глюк.
TADOQuery(qu).LockType:=ltBatchOptimistic;
qu.SQL.Text := 'select convert(float, field1) field1, field2 from table1';
qu.open; qu.insert;
qu.fieldbyname('field1').asfloat := 100;
qu.fieldbyname('field2').asfloat := 100;
qu.post;
showmessage(qu.fieldbyname('field1').asstring); // вижу ничего
showmessage(qu.fieldbyname('field2').asstring); // вижу 100
тот же эффект если field1 объявлено как автоинкрементное поле.
PS
для Oracle такой неприятносити нет.
sniknik (2005-02-01 13:52:00) [1]> В том то и дело, что в момент qu.insert обращения в базе не происходит и никаких SQL не генерится т.к.
по post делается ресинк из базы, запрос для него можно сменить (поищи статьи на королевстве про ADO, там в 3й вроде бы, обьясняется как)
можно попробовать менять в рекордсете напрямую без "оберточных" функций, может и получится.
albr (2005-02-01 12:19:00) [2]В том то и дело, что в момент qu.insert обращения в базе не происходит и никаких SQL не генерится т.к. LockType=ltBatchOptimistic.
А сохранение должно происходит при qu.UpdateBatch();
ADOCommand ровно как и AdoDataSet используют один и тот же рекордсет обявленный в ADODB.pas
_Recordset = ADOInt.Recordset;
Соловьев (2005-02-01 12:01:00) [3]
> table1 - это скорее всего сложный view с вычислимыми полями,
> а Insert или Update делают хранимые процедуры.
Как ты думаешь, если ты написал qu.insert, то это какой-то запрос. который не подчинается SQL? он такой же как и [2]. Если ты сделал обновляемую вьюху, то ты наверное написал и триггеры для этого, где дергаешь свои ХП, так вот использую [2], они так же будут дергатся, даже лучше :)
> а какая есть альтернатива TADODataSet, желательно с TADOConnection
> :)
ADOCommand
albr (2005-02-01 11:41:00) [4]да, из за того что field1 не редактируемое поле БД....
а какая есть альтернатива TADODataSet, желательно с TADOConnection :)
to Silver Alex: ничего я не намутил
insert into Qu(id, field1, field2) values (1,100,100); - это все хорошо, но ....
Qu - это TADOQuery;
table1 - это скорее всего сложный view с вычислимыми полями, а Insert или Update делают хранимые процедуры.
А нужно, чтобы после поста не пропадали данные из датасэта введенные юзером
Silver Alex (2005-02-01 10:02:00) [5]если ты используешь запросы, так используй их везде.А то ты что-то намутил, с первого взгдяда и не понять что именно тебе нужно
insert into Qu(id, field1, field2)
values (1,100,100)
ЮЮ (2005-02-01 05:18:00) [6]// вижу ничего
М.Б. из-за того, что field1 не поле базы данных, а выражение?
Соответствкнно, запрос на корректировку записи не включает это поле? Честно говоря, сокрытие от программиста генерируеиых запросов и невозможность использовать свои - главное, за что я не люблю ADODataSet