Re: Событие FetchComplete в ADO
От: Andrey_N  
Дата: 15.07.02 16:02
Оценка: 6 (1)
Здравствуйте mitq, Вы писали:

M>Привет всем.


M>Если кто-то боролся с событиями в ADO, то скажите, пожалуйста, почему не приходит событие FetchComplete по окончании асинхронного открытия таблицы Recordset'ом? Остальные события (WillMove, MoveComplete и т.д.) приходят. В чём может быть дело?


M>Спасибо,

M>Дмитрий.

It may be opened synch even if you asked asynch. In that case FetchComplete will not be fired (wierd isn't it). So, to make it a bit straight forward I checked if rs is opened in asynch and if not then fire FetchComplete myself.

Hope this will help.

Andy

PS Sorry for English
Re[3]: Событие FetchComplete в ADO
От: Алекс Россия http://wise-orm.com
Дата: 10.07.02 03:05
Оценка: 4 (1)
Здравствуйте mitq, Вы писали:

M>Здравствуйте Алекс, Вы писали:


А>>Я думаю это от провайдера зависит, если он позволяет такие вещи, событие приходить будет.


M>Ok, покопаю в этом направлении. Но хочу задать ещё один вопрос: какие стили нужно понавешать на Recordset для того, чтобы в нём можно было обновить одну запись? Уже часа три бьюсь и не могу реализовать такую простую вещь:

M>1) Есть один Recordset (adUseClient, adOpenStatic, adLockOptimistic), который я использую для просмотра и который состоит из нескольких таблиц.
M>2) Изменяю одну из таблиц так:
M>
M>   _RecordsetPtr recset("ADODB.Recordset");
M>   recset->Open( ... , adOpenDynamic, adLockOptimistic, adCmdText );

M>   recset->Fields->Item[...]->Value = ...;
M>   recset->Update();
M>

M>3) Пытаюсь увидеть изменения в Recordset'е из первого пункта:
M>
M>   recordset->Resync( adAffectCurrent, adResyncUnderlyingValues );
M>   // Я абсолютно уверен в том, что стою на той записи, в которой были произведены изменения.
M>

M>После "перезапуска" Recordset'а изменения проявляются, но это слишком долго.


M>Появилась идея: я изменяю id'шник, используемый для сцепления таблиц, а не значение, выводимое на экран. Видимо, всё таки придётся перезапускать Recordset. Я прав?


Может это и не даст выигрышь в скорости, но ИМХО нужно сделать наоборот: первый рекордсет должен быть adOpenDynamic, а второй adOpenStatic.
Кстати, если второй заводится только для изменения пары-другой записей в табличке, лучше напрямую использовать SQL'ый update table. На много быстрее будет.
Re: Событие FetchComplete в ADO
От: Алекс Россия http://wise-orm.com
Дата: 09.07.02 06:46
Оценка: 2 (1)
Здравствуйте mitq, Вы писали:

M>Привет всем.


M>Если кто-то боролся с событиями в ADO, то скажите, пожалуйста, почему не приходит событие FetchComplete по окончании асинхронного открытия таблицы Recordset'ом? Остальные события (WillMove, MoveComplete и т.д.) приходят. В чём может быть дело?


M>Спасибо,

M>Дмитрий.

Я думаю это от провайдера зависит, если он позволяет такие вещи, событие приходить будет.
Событие FetchComplete в ADO
От: mitq Россия  
Дата: 08.07.02 10:55
Оценка:
Привет всем.

Если кто-то боролся с событиями в ADO, то скажите, пожалуйста, почему не приходит событие FetchComplete по окончании асинхронного открытия таблицы Recordset'ом? Остальные события (WillMove, MoveComplete и т.д.) приходят. В чём может быть дело?

Спасибо,
Дмитрий.
Re[2]: Событие FetchComplete в ADO
От: mitq Россия  
Дата: 09.07.02 10:09
Оценка:
Здравствуйте Алекс, Вы писали:

А>Я думаю это от провайдера зависит, если он позволяет такие вещи, событие приходить будет.


Ok, покопаю в этом направлении. Но хочу задать ещё один вопрос: какие стили нужно понавешать на Recordset для того, чтобы в нём можно было обновить одну запись? Уже часа три бьюсь и не могу реализовать такую простую вещь:
1) Есть один Recordset (adUseClient, adOpenStatic, adLockOptimistic), который я использую для просмотра и который состоит из нескольких таблиц.
2) Изменяю одну из таблиц так:
   _RecordsetPtr recset("ADODB.Recordset");
   recset->Open( ... , adOpenDynamic, adLockOptimistic, adCmdText );

   recset->Fields->Item[...]->Value = ...;
   recset->Update();

3) Пытаюсь увидеть изменения в Recordset'е из первого пункта:
   recordset->Resync( adAffectCurrent, adResyncUnderlyingValues );
   // Я абсолютно уверен в том, что стою на той записи, в которой были произведены изменения.

После "перезапуска" Recordset'а изменения проявляются, но это слишком долго.


Появилась идея: я изменяю id'шник, используемый для сцепления таблиц, а не значение, выводимое на экран. Видимо, всё таки придётся перезапускать Recordset. Я прав?
Re[4]: Событие FetchComplete в ADO
От: mitq Россия  
Дата: 10.07.02 03:12
Оценка:
Здравствуйте Алекс, Вы писали:

А>Может это и не даст выигрышь в скорости, но ИМХО нужно сделать наоборот: первый рекордсет должен быть adOpenDynamic, а второй adOpenStatic.

А>Кстати, если второй заводится только для изменения пары-другой записей в табличке, лучше напрямую использовать SQL'ый update table. На много быстрее будет.

Спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.