Мой совет, чтобы найти, кто закрывает DataSet:
Создайте новый обработчик события для события BeforeClose в AdoQuery, поместите все, что скомпилировано и выполнено, просто чтобы поставить точку останова.Например:
procedure TfrmCreDocCredito.cdsSucursalesBeforeClose(DataSet: TDataSet);
begin
ShowMessage('Closing!!');
end;
Запустите вашу программу, выполните любое действие пользователя, необходимое для создания экземпляра класса, и когда программа остановится на точке останова, у вас будет возможность проверить стек вызовов.Он покажет, кто, и если вы немного подумаете об этом, вы поймете, почему набор данных закрывается.Если ваша точка останова не срабатывает, я уверен, что набор данных никогда не откроется.
С наилучшими пожеланиями.