А теперь еще раз излагаю для энтузиастов Пупсиков и долгожителей гностиков.
То как выглядит ситуация с моей
некомпетентной точки зрения.
Определено методом
глупого тыка (я так понимаю с точки зрения Пупсиков, только они могут делать заключения о произошедшем, и только при условии получения всего кода, и желательно на "какой-нибудь популярной БД", абстрагироваться от кода и понять, что произошло со слов презренного самоучки, ниже достоинства Пупсиков)
поэтому метод тыка нарекаю
глупым.
Код принципиально давать не буду. Это полезно для Пупсиков и их адвокатов. Т.к. им нужно учиться читать и видеть суть вопроса без кода, а так же изживать из себя апломб, учиться читать и понимать написанное, и переспрашивать не понятное, а не принимать вопрошающего за полного идиота, который не способен принимать участие в решении проблемы и годен только на то чтобы предоставить на милостивый суд великих гуру, свой жалкий, ничтожный, априори падучий и никому не нужный код на препарацию и презрительное ковыряние в нем.
1. На одном соединении выполняются запросы Query.SQL и QueryDet.SQL
2. Сначала выполняется Query.Open который возвращает список ID объектов с необходимыми их свойствами.
3. по списку ID запускается цикл, в котором
3.1. делается проверка полученных уже свойств, и если она проходит то выполняется пункт 3.2 иначе ID пропускается. (вопрос почему проверка не прописана в where не задавать, это к делу не относится)
3.2. В запрос QueryDet.SQL подставляется ID и посылается на выполнение. Далее следует обработка полученных для текущего ID значений и делается корректировка и вставка строк в разные таблицы базы.
4. На тестовой базе где запрос Query.Open возвращает только 3-4 строки с ID пункт 3.2 отрабатывает нормально.
5. На рабочей базе где Query.Open возвращает/должен вернуть несколько сотен строк, ошибка выскакивает на первой же команде QueryDet.Open
при этом текст QueryDet.SQL, в профайле этот запрос даже не отлавливается, из чего я делаю вывод, что команде QueryDet.Open, что-то мешает ДО посылки запроса.
Погуглив и прочитав, про тест ошибки
EMSSQLDatabaseError: TMSSQLConnection : Error 20019 :, а так же получив подтверждение моих подозрений от Vadim
Я попробовал изменить значение по умолчанию
PacketRecords = 10 на -1.
Это сработало, из чего делаю такой дилетантский вывод (ну а так же из всего что нагуглил и прочитал про этот параметр)
1. При установленном параметре -1, компонента TSQLQuery ведет себя так же как по умолчанию в Delphi ведет себя TADOQuery и т.е. пока не выполненно получение всего набора данных, дальше программа не выполняется.
2. При выполнении с установленным конкретным размером пакета, при получении ограниченного количеством строк пакета, программа продолжает выполнение т.е. в моем случае начинается цикл и выполняется пункт 3.2.
3. Для получения полного набора данных нужно программно указывать получение следующего пакета, или выполнять переход на последнюю запись Last (но я этого не делаю)
4. При попытке открыть еще один набор данных (QueryDet) на том же соединении на котором имеется еще не полностью полученный набор (Query) возникает конфликт в компоненте TMSSQLConnection, видимо потому что соединение занято.
5. Проблема решается именно так как написано в рекомендации по ссылке данной мной в первом сообщении.
http://wiki.freepascal.org/mssqlconn Error 20019 : Attempt to initiate a new Adaptive Server operation with results pending
Set TSQLQuery.PacketRecords property to -1
6. Тему я создал, потому что не понимал в начале, что происходит. И применял Query
Det.PacketRecords = -1 , тогда как проблема не в Query
Det , а в том что Query с НЕ докачанными данными блокирует соединение на котором сидит и Query
Det. Поэтому нужно было поменять значение параметра Query.PacketRecords, чтобы цикл запустился (и соответственно полетели запросы Query
Det) уже после того как будет получен весь набор данных в Query.
Все написанное является лишь переложением того что и так было написано выше. Если это до гуруПупсиков и Виталие не дойдет и они продолжат настаивать на своих версиях, то я не знаю уже как таким людям объяснять.
Может я ошибаюсь в своей оценке происходящего. И я готов себя признать полный и тупым ослом. Если я не прав. Докажите где я не прав.
Но пока что я вижу ситуацию так. И делаю такие выводы.
1. Установка Query.PacketRecords = -1 полностью, окончательно и в соответствии с рекомендациями на wiki.freepascal.org/mssqlconn решает вопрос, без каких либо "если" и последующих "неминуемых" падений от которых может спасти/насоветовать только мега-гуру-Пупсик.
2. Пупсик "тот-кем-нельзя-обзывать-на-этом-форуме" потому что он даже после двукратного разжевывания не смог понять в чем проблема, и продолжал настаивать на необходимости и ошибки в коде программы.
3. Пупсик не умеет читать и потому он например, не смог понять мои слова о 3-4 записях на тестовой базе (не возникает ошибки) и сотнях на рабочей(возникает ошибка), и как на это влияет установка параметра =10
(разъясню на всякий случай. на тестовой базе Query получает весь набор данных сразу т.к. их тупо меньше размера пакета по умолчанию. А на рабочей получает пакет и продолжает программу вызывая ошибку при попытке выполнить следующий запрос.)
4. Все в полной мере относится и в гностику Виталию, только ему пришлось в третий раз всё разжевывать.
Жду обоснованных утверждений о том, что я осел, тогда я это признаю посыпая голову пеплом.
Либо же Пупсик и Виталий признают факт, что они гордые те-кем-нельзя-обзывать-на-форуме и на этом тему закроем.
vitaly_l писал(а): т.к. ТС даже близко не понимает что такое PacketRecords и для чего оно нужно
Обоснование этого утверждения будет или это очередной пшик в воздух?
vitaly_l писал(а): в отличии от Ваших гностических - допускают наличие нескольких решений у одной и той же задачи.
1. Гностическую чушь не я нес, а ты. (Но ты видимо не знал что она гностическая). Так что не переводи стрелки на других, гностик.
2. Будет утверждение твоему ...серу, о том что я не способен допускать наличие нескольких решений у одной задачи? Я где-то утверждал что это единственное решение и других не существует?
Ты не знаешь русского языка и слова "Задача решена", воспринимаешь в качестве утверждения, что примененное решение единственное возможное?
И более того я просил Вас не отвечать, т.к. весь Ваш озлобленный флуд и троллинг - априори предсказуем.
Тут ты как раз легко предсказуем. Прийти в тему не разобравшись, наговорить всяческих лживых утверждений, и ждать что оппонент утрется и замолчит.
З.Ы. Последние сови комментарии я тоже пишу уже не сколько для тебя и Пупсик, сколько для тех кто "помимо Вас будет читать данный топик", чтобы они знали цену некоторым местным самоназначенным гуру.