• Сергей М. © (20.12.11 14:20) [0]
    У клонируемого ADO-дейтасета ExecuteOptions = [].

    Приводит ли исполнение метода Clone будущего ADO-дейтасета-клона к

    1. возникновению каких-либо событий у клонируемого ADO-дейтасета ?

    2. неявной выборке/диспетчеризации оконных сообщений в очереди треда VCL-приложения, в контексте которого вызван Clone ?
  • OW © (20.12.11 15:13) [1]
    1. Не замечал
    2. Не замечал

    Если бы не мастерский значок, посоветовал бы посмотреть метод clone у интерфейса Recordset20 в ADO. Все в него упирается. Но ты наверняка и так это знаешь, поди..
  • Сергей М. © (20.12.11 15:31) [2]

    > метод clone у интерфейса Recordset20 в ADO


    Понятно что он напрямую вызывается. И дальше - "черный ящик".

    Потому и интересуюсь что потроха ящика мне не знакомы и при этом я столкнулся с асинхронным поведением метода клонирования.
  • sniknik © (20.12.11 17:46) [3]
    > с асинхронным поведением метода клонирования.
    ??? это как?

    клон не копия, там просто заголовки копируются, а кое что "разделяется" может поэтому кажется асинхронным, потому, что у оригинала это что-то меняется?
  • Сергей М. © (20.12.11 18:06) [4]

    > у оригинала это что-то меняется?


    Дело не в этом.

    У меня картина вот какая:

    1. Приложение однопоточное. С базой работает в каждый момент времени только оно и никто более.

    2. В момент исполнения Clone() управление каким-то непостижимым пока мне образом получает обработчик некоего оконного сообщения (как будто где-то был вызван App.ProcessMessages), хотя по моему понятию Clone должен быть блокирующим.
  • sniknik © (20.12.11 19:30) [5]
    а твои события на датасете? типа онопен, онскрол... они копируются и приемник переоткрывается.
  • SQLEX © (20.12.11 20:17) [6]

    > каких-либо событий у клонируемого ADO-дейтасета ?

    TO.clone(FROM)
    кто из них клонируемый?
    ps
    TO - и close и open происходит
  • Сергей М. © (20.12.11 20:39) [7]

    > sniknik ©   (20.12.11 19:30) [5]


    > твои события на датасете? типа онопен, онскрол... они копируются


    С какого, пардон, перепугу они должны копироваться ?
    Я же не SomeADODataSet.Assign(AnotherADODataSet) вызваю ..
    Или ты про какое копирование ?
  • Сергей М. © (20.12.11 20:41) [8]

    > SQLEX ©   (20.12.11 20:17) [6]
    > TO.clone(FROM)
    > кто из них клонируемый?


    Здрасть приехали)
    FROM - кто же еще ?
  • Сергей М. © (20.12.11 20:44) [9]

    > TO - и close и open происходит


    TO := TADODataSet.Create(..);
    TO.Clone(FROM); //FROM в этот момент активен
  • Сергей М. © (20.12.11 20:53) [10]
    TO.Clone(FROM); // ставлю сюда брейкпойнт, ловлю его и делаю шаг (F8)
    SomeNext; // и расчитываю встать здесь, но вместо этого встаю на брейкпойнте, не имеющем ни малейшего отношения ни к работе оригинала ни клона; никаких исключений вызов Clone() заведомо не возбуждает
  • SQLEX © (20.12.11 22:05) [11]

    > Сергей М. ©   (20.12.11 20:53) [10]



    > SomeNext; // и расчитываю встать здесь, но вместо этого
    > встаю на брейкпойнте, не имеющем ни малейшего отношения
    >

    т.е. где то в оконном сообщении?
  • Сергей М. © (20.12.11 22:14) [12]

    > где то в оконном сообщении?


    Не суть как важно в оконном или не в оконном - в обработчике сообщения, находящегося в очереди сообщений того же потока, который вызвал Clone()
  • sniknik © (20.12.11 23:26) [13]
    > но вместо этого встаю на брейкпойнте
    ну раз "поймал" то жми F8 дальше, вывалится где вызывало.

    > Не суть как важно
    суть не суть, чего как маленький... в партизанов не наигрался?

    пустой проект, голая форма, кроме 2х рекорсетов
    procedure TForm1.Button1Click(Sender: TObject);
    begin
     ADODataSet1.Open;
     ADODataSet2.Clone(ADODataSet1);
    end;


    по F8 никаких прерываний, "прыжков", SomeNext здесь end;
    потом "обвешиваешь" его/их(+ в их гридах/дб контролах, им должен рефреш посылаться) обработчиками из "проблемной" программы, и повторяешь.
  • asafr © (22.12.11 14:29) [14]
    Насколько помню, при клонировании набор записей должен поддерживать закладки, поэтому клонирование динамических курсоров и курсоров с перемещением "только вперед" невозможно.
    Как у тебя с этим?
    Определить, поддерживает набор записей или закладки можно методом
    ADODataSet.Supports([coBookMark])

    Может в этом направлении посмотришь?
  • sniknik © (22.12.11 14:54) [15]
    > поэтому клонирование динамических курсоров и курсоров с перемещением "только вперед" невозможно.
    была бы ошибка на операции, прерывание, а у него событие.
  • Сергей М. © (22.12.11 16:00) [16]
    Да все уже, нашел где я ССЗБ)

    Возникало исключение, локального перехвата и обрабоки не было, а в глоб.обработке в App.OnException стоял вызов ShowMessage - он будучи при опред.условиях не бросавшимся в глаза, как раз и попортил мне слегка крови, выбирая и диспетчерезуя сообщения)
  • asafr © (22.12.11 16:03) [17]
    sniknik, понимаю... Может в среде разработки отключен debugger exception notification  ?
  • Сергей М. © (22.12.11 16:19) [18]

    > Может в среде разработки отключен debugger exception notification
    >  ?


    Stop on Delphi Exceptions тоже был отключен, иначе бы я сразу увидел исключение
Есть новые Нет новых   [134431   +10][b:0][p:0.001]