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

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

Кеширование изменений и 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


Наверх

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