Событие FetchComplete в ADO
От: mitq Россия  
Дата: 08.07.02 10:55
Оценка:
Привет всем.

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

Спасибо,
Дмитрий.
Re: Событие FetchComplete в ADO
От: Алекс Россия http://wise-orm.com
Дата: 09.07.02 06:46
Оценка: 2 (1)
Здравствуйте mitq, Вы писали:

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


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


M>Спасибо,

M>Дмитрий.

Я думаю это от провайдера зависит, если он позволяет такие вещи, событие приходить будет.
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[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[4]: Событие FetchComplete в ADO
От: mitq Россия  
Дата: 10.07.02 03:12
Оценка:
Здравствуйте Алекс, Вы писали:

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

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

Спасибо.
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
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.