-
У клонируемого ADO-дейтасета ExecuteOptions = [].
Приводит ли исполнение метода Clone будущего ADO-дейтасета-клона к
1. возникновению каких-либо событий у клонируемого ADO-дейтасета ?
2. неявной выборке/диспетчеризации оконных сообщений в очереди треда VCL-приложения, в контексте которого вызван Clone ?
-
1. Не замечал 2. Не замечал
Если бы не мастерский значок, посоветовал бы посмотреть метод clone у интерфейса Recordset20 в ADO. Все в него упирается. Но ты наверняка и так это знаешь, поди..
-
> метод clone у интерфейса Recordset20 в ADO
Понятно что он напрямую вызывается. И дальше - "черный ящик".
Потому и интересуюсь что потроха ящика мне не знакомы и при этом я столкнулся с асинхронным поведением метода клонирования.
-
> с асинхронным поведением метода клонирования. ??? это как?
клон не копия, там просто заголовки копируются, а кое что "разделяется" может поэтому кажется асинхронным, потому, что у оригинала это что-то меняется?
-
> у оригинала это что-то меняется?
Дело не в этом.
У меня картина вот какая:
1. Приложение однопоточное. С базой работает в каждый момент времени только оно и никто более.
2. В момент исполнения Clone() управление каким-то непостижимым пока мне образом получает обработчик некоего оконного сообщения (как будто где-то был вызван App.ProcessMessages), хотя по моему понятию Clone должен быть блокирующим.
-
а твои события на датасете? типа онопен, онскрол... они копируются и приемник переоткрывается.
-
> каких-либо событий у клонируемого ADO-дейтасета ?
TO.clone(FROM) кто из них клонируемый? ps TO - и close и open происходит
-
> sniknik © (20.12.11 19:30) [5]
> твои события на датасете? типа онопен, онскрол... они копируются
С какого, пардон, перепугу они должны копироваться ? Я же не SomeADODataSet.Assign(AnotherADODataSet) вызваю .. Или ты про какое копирование ?
-
> SQLEX © (20.12.11 20:17) [6] > TO.clone(FROM) > кто из них клонируемый?
Здрасть приехали) FROM - кто же еще ?
-
> TO - и close и open происходит
TO := TADODataSet.Create(..); TO.Clone(FROM); //FROM в этот момент активен
-
TO.Clone(FROM); // ставлю сюда брейкпойнт, ловлю его и делаю шаг (F8) SomeNext; // и расчитываю встать здесь, но вместо этого встаю на брейкпойнте, не имеющем ни малейшего отношения ни к работе оригинала ни клона; никаких исключений вызов Clone() заведомо не возбуждает
-
> Сергей М. © (20.12.11 20:53) [10]
> SomeNext; // и расчитываю встать здесь, но вместо этого > встаю на брейкпойнте, не имеющем ни малейшего отношения >
т.е. где то в оконном сообщении?
-
> где то в оконном сообщении?
Не суть как важно в оконном или не в оконном - в обработчике сообщения, находящегося в очереди сообщений того же потока, который вызвал Clone()
-
> но вместо этого встаю на брейкпойнте ну раз "поймал" то жми F8 дальше, вывалится где вызывало. > Не суть как важно суть не суть, чего как маленький... в партизанов не наигрался? пустой проект, голая форма, кроме 2х рекорсетов procedure TForm1.Button1Click(Sender: TObject);
begin
ADODataSet1.Open;
ADODataSet2.Clone(ADODataSet1);
end; по F8 никаких прерываний, "прыжков", SomeNext здесь end; потом "обвешиваешь" его/их(+ в их гридах/дб контролах, им должен рефреш посылаться) обработчиками из "проблемной" программы, и повторяешь.
-
Насколько помню, при клонировании набор записей должен поддерживать закладки, поэтому клонирование динамических курсоров и курсоров с перемещением "только вперед" невозможно. Как у тебя с этим? Определить, поддерживает набор записей или закладки можно методом ADODataSet.Supports([coBookMark]) Может в этом направлении посмотришь?
-
> поэтому клонирование динамических курсоров и курсоров с перемещением "только вперед" невозможно. была бы ошибка на операции, прерывание, а у него событие.
-
Да все уже, нашел где я ССЗБ)
Возникало исключение, локального перехвата и обрабоки не было, а в глоб.обработке в App.OnException стоял вызов ShowMessage - он будучи при опред.условиях не бросавшимся в глаза, как раз и попортил мне слегка крови, выбирая и диспетчерезуя сообщения)
-
sniknik, понимаю... Может в среде разработки отключен debugger exception notification ?
-
> Может в среде разработки отключен debugger exception notification > ?
Stop on Delphi Exceptions тоже был отключен, иначе бы я сразу увидел исключение
|