Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.03.06;
Скачать: CL | DM;

Вниз

Кеширование изменений и ADO + MSSQL   Найти похожие ветки 

 
albr   (2005-01-31 19:54) [0]

Подскажите как можно побороть следующий глюк.

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 такой неприятносити нет.


 
ЮЮ ©   (2005-02-01 05:18) [1]

// вижу ничего

М.Б. из-за того, что field1 не поле базы данных, а выражение?
Соответствкнно, запрос на корректировку записи не включает это поле? Честно говоря, сокрытие от программиста генерируеиых запросов и невозможность использовать свои - главное, за что я не люблю ADODataSet


 
Silver Alex ©   (2005-02-01 10:02) [2]

если ты используешь запросы, так используй их везде.А то ты что-то намутил, с первого взгдяда и не понять что именно тебе нужно

insert into Qu(id, field1, field2)
values (1,100,100)


 
albr   (2005-02-01 11:41) [3]

да, из за того что field1 не редактируемое поле БД....
а какая есть альтернатива TADODataSet, желательно с TADOConnection :)

to Silver Alex: ничего я не намутил
insert into Qu(id, field1, field2) values (1,100,100); - это все хорошо, но ....
Qu - это TADOQuery;
table1 - это скорее всего сложный view с вычислимыми полями, а Insert или Update делают хранимые процедуры.
А нужно, чтобы после поста не пропадали данные из датасэта введенные юзером


 
Соловьев ©   (2005-02-01 12:01) [4]


> table1 - это скорее всего сложный view с вычислимыми полями,
> а Insert или Update делают хранимые процедуры.

Как ты думаешь, если ты написал qu.insert, то это какой-то запрос. который не подчинается SQL? он такой же как и [2]. Если ты сделал обновляемую вьюху, то ты наверное написал и триггеры для этого, где дергаешь свои ХП, так вот использую [2], они так же будут дергатся, даже лучше :)

> а какая есть альтернатива TADODataSet, желательно с TADOConnection
> :)

ADOCommand


 
albr   (2005-02-01 12:19) [5]

В том то и дело, что в момент qu.insert обращения в базе не происходит и никаких SQL не генерится т.к. LockType=ltBatchOptimistic.
А сохранение должно происходит при qu.UpdateBatch();
ADOCommand ровно как и AdoDataSet используют один и тот же рекордсет обявленный в ADODB.pas

_Recordset = ADOInt.Recordset;


 
sniknik ©   (2005-02-01 13:52) [6]

> В том то и дело, что в момент qu.insert обращения в базе не происходит и никаких SQL не генерится т.к.
по post делается ресинк из базы, запрос для него можно сменить (поищи статьи на королевстве про ADO, там в 3й вроде бы, обьясняется как)

можно попробовать менять в рекордсете напрямую без "оберточных" функций, может и получится.



Страницы: 1 вся ветка

Текущий архив: 2005.03.06;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.04 c
4-1106142658
Cosinus
2005-01-19 16:50
2005.03.06
Почему, если я сам посылаю системе WM_KEYDOWN и WM_KEYUP, то мой


1-1108849319
TheEd
2005-02-20 00:41
2005.03.06
Глюк - TStrings.AddObject(TObject(-1))


4-1106295756
Stanislav
2005-01-21 11:22
2005.03.06
Ответ на сообщение


14-1108560041
kaZaNoVa
2005-02-16 16:20
2005.03.06
RSA-шифрование


1-1108717474
Alchimik
2005-02-18 12:04
2005.03.06
Toggle Button в Delphi