Error 20019 : на простом запросе.

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Error 20019 : на простом запросе.

Сообщение jsa » 28.12.2017 19:09:27

Не понимаю ситуацию.
Приложение протестировано и работает на моем компе.
Переношу пользователю на рабочий комп.
и получаю ситуацию.

An unhandled exception occurred at $0044C301:
EMSSQLDatabaseError: TMSSQLConnection : Error 20019 :
Attempt to initiate a new Adaptive Server operation with results pending

Разобрался в каком момент выскакивает ошибка.

Код: Выделить всё
QueryDet.Close;   
QueryDet.SQL.Text:='select ts.BL_ID, ts.BLD_ID, ts.SV_ID, isnull(ts.BLD_PAY_ID,0)BLD_PAY_ID, isnull(ts.PRICE,0)PRICE, isnull(ts.oplPT,0)oplPT, isnull(ts.oplMDPR,0)oplMDPR, isnull(ts.Bonus_Coef,0)Bonus_Coef, isnull(ts.Bonus_from_above,0)Bonus_from_above, isnull(ts.STCK_ID,0)STCK_ID, isnull(ts.perc,0)perc, isnull(Calc_Bonus,0)Calc_Bonus from ##Tserv ts where pt_ID='+IntToStr(ptID) ;
QueryDet.Open; 


На Open ошибка и лезет.
Если я правильно понял по http://wiki.freepascal.org/mssqlconn и http://www.freetds.org/faq.html#pending
речь идет о способе подтягивания строк с сервера, сразу или блоками.
Не разобрался в тонкостях, но в данной конкретной ситуации речь идет всего об одной строке. Так какая разница каким методом ее подтягивать с сервера.
Не понимаю суть, в чем проблема и что нужно сделать?
jsa
новенький
 
Сообщения: 46
Зарегистрирован: 28.11.2017 13:46:04

Re: Error 20019 : на простом запросе.

Сообщение Vadim » 29.12.2017 04:17:14

jsa
Для начала надо выяснить - это проблема сервера или проблема компонента. Проверьте с более простым запросом.
Vadim
долгожитель
 
Сообщения: 2829
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Error 20019 : на простом запросе.

Сообщение jsa » 29.12.2017 06:17:54

До этого запроса выполняется множество разных других.
Как еще проще сделать этот запрос, не понятно, это же просто выборка полей из одной глобальной временной таблицы.

Добавлено спустя 1 час 3 минуты 6 секунд:
Как я определил что именно этот запрос.
Просто поставил вывод сообщений до и после Open. До выводится. после уже нет.
И странно еще то, что в профайлере MS SQL Server запрос не виден, т.е. ощущение что он даже не был послан на выполнение.

Добавлено спустя 37 минут 11 секунд:
Заменил запрос на
select 123
ошибка ровно та же самая.
И он точно не посылается серверу, т.е. проблема в компоненте.

Компоненты созданы так
Query:=TSQLQuery.Create(nil);
Query.SQLConnection:=SQLConnect;
Query.ReadOnly:=true;
Query.UsePrimaryKeyAsKey:=false;
Query.SQLTransaction:=Tr;

QueryDet:=TSQLQuery.Create(nil);
QueryDet.SQLConnection:=SQLConnect;
QueryDet.ReadOnly:=true;
QueryDet.UsePrimaryKeyAsKey:=false;
QueryDet.SQLTransaction:=Tr;

QueryScr:=TSQLQuery.Create(nil);
QueryScr.SQLConnection:=SQLConnectScr;
QueryScr.ReadOnly:=true;
QueryScr.UsePrimaryKeyAsKey:=false;
QueryScr.SQLTransaction:=TrScr;

Т.е. имеется два соединения SQLConnect (для чтения данных) и SQLConnectScr (для записи)
Query и QueryDet работают через SQLConnect
Проблем с Query нет, а при первом же использовании QueryDet она сразу возникает. Причем на компре где ведется разработка ее нет, а при переносе exe на рабочий комп, она возникает.
Чудесато.
jsa
новенький
 
Сообщения: 46
Зарегистрирован: 28.11.2017 13:46:04

Re: Error 20019 : на простом запросе.

Сообщение vitaly_l » 29.12.2017 10:34:47

jsa писал(а):Как я определил что именно этот запрос.
Просто поставил вывод сообщений до и после Open. До выводится. после уже нет.
И странно еще то, что в профайлере MS SQL Server запрос не виден, т.е. ощущение что он даже не был послан на выполнение.
....
Чудесато.

Ничего чудесатого, стандартная утечка памяти или около того, которая сегодня вываливается на QueryDet.Open, а завтра будет совершенно в другом месте (после того как Вы добавите ещё какой-то код в проект).
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: Error 20019 : на простом запросе.

Сообщение jsa » 29.12.2017 11:09:36

Разобрался.
QueryDet.open запускается в цикле While not Query.EOF do

Косячит не QueryDet , а Query если я правильно понимаю, он находится в режиме ожидания продолжения, т.е. дополнительных пакетов с сервера.
Поставил ему Query.PacketRecords:=-1;
и проблема решилась.

P.S.
vitaly_l писал(а):Ничего чудесатого, стандартная утечка памяти ...

Каким образом тут утечка памяти?
jsa
новенький
 
Сообщения: 46
Зарегистрирован: 28.11.2017 13:46:04

Re: Error 20019 : на простом запросе.

Сообщение vitaly_l » 29.12.2017 11:36:22

jsa писал(а):Каким образом тут утечка памяти?

Она не тут, она может быть в любом месте программы. Поищите на форуме, уже 100 раз обсуждали этот "баг".
Либо что-то ИНОГДА уничтожается до обращения.

jsa писал(а):Поставил ему Query.PacketRecords:=-1;

Когда создается клиентский набор данных, PacketRecords автоматически устанавливается в -1, а это означает, что один пакет должен содержать все записи в наборе данных.

jsa писал(а):И странно еще то, что в профайлере MS SQL Server запрос не виден, т.е. ощущение что он даже не был послан на выполнение.
И он точно не посылается серверу, т.е. проблема в компоненте.

Моё мнение, об утечке, основано на вышеприведённой Вашей реплике.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: Error 20019 : на простом запросе.

Сообщение Vadim » 30.12.2017 07:07:37

jsa
Судя по тому, что Вы написали, с сервера идёт очень большой объём информации и за одну итерацию цикла сервер не успевает её переслать в рамках одного сеанса связи.
packetRecords указывает количество записей в одном пересылаемом пакете (обмен клиент-сервер идёт именно в таком пакетном режиме). "-1" указывает на то, что мервер\клиент ничем больше не занимается, пока не получит все записи.
По умолчанию PacketRecords = 10 (по крайней мере у меня так).
Vadim
долгожитель
 
Сообщения: 2829
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Error 20019 : на простом запросе.

Сообщение pupsik » 30.12.2017 12:39:22

Разобрался.
QueryDet.open запускается в цикле While not Query.EOF do
а не проще использовать бд по нормальному? Т.е. запросы и т.д..

Как я понимаю: вы в цикле по строкам одной таблицы что то делаете с другой таблицей.
pupsik
энтузиаст
 
Сообщения: 1122
Зарегистрирован: 20.08.2014 16:20:13

Re: Error 20019 : на простом запросе.

Сообщение jsa » 30.12.2017 16:46:30

Как я понимаю: вы в цикле по строкам одной таблицы что то делаете с другой таблицей.

Да.
jsa
новенький
 
Сообщения: 46
Зарегистрирован: 28.11.2017 13:46:04

Re: Error 20019 : на простом запросе.

Сообщение pupsik » 30.12.2017 19:54:48

Да.
весомый ответ.... :)

повторю:
а не проще использовать бд по нормальному? Т.е. запросы и т.д..
Т.е. у вас решение "аля дбф". Решайте через запросы (в т.ч. и вычисления). Зачем с реляционкой работать как с плоской?

Не видя кода сложно сказать где скрыт баг. Но он явно не в кол-ве запрашиваемых данных. Код..код и ещё раз код свой смотрите.
pupsik
энтузиаст
 
Сообщения: 1122
Зарегистрирован: 20.08.2014 16:20:13

Re: Error 20019 : на простом запросе.

Сообщение jsa » 31.12.2017 15:36:41

а не проще использовать бд по нормальному? Т.е. запросы и т.д..

Смотря какая цель. По большому счету, перелопачивание денных без участия пользователя, можно вообще сделать Хранимой процедурой и не городить огород с консольным приложением на Lazarus.
И оно так и было изначально сделано.
Тут цель скрыть от особо хитросделанных админов алгоритм обработки данных. Т.к. эти особо хитросделанные админы тырят готовые решения и продают их как свои налево.
Поэтому все запросы сделаны примитивно, только выборка, и вставка данных, а вся обработка в программе.
Приложение привязано к сервер+база и воровству не подлежит.
Не видя кода сложно сказать где скрыт баг. Но он явно не в кол-ве запрашиваемых данных. Код..код и ещё раз код свой смотрите.

Выше приведенного описания не достаточно? Помоему всё достаточно прозрачно. Первая открытая выборка в соединении создает проблему для второго компонента и не дает даже заслать команду select.
Как только явно задается PacketRecords:=-1 для первой компоненты, проблема решается.
jsa
новенький
 
Сообщения: 46
Зарегистрирован: 28.11.2017 13:46:04

Re: Error 20019 : на простом запросе.

Сообщение pupsik » 01.01.2018 12:08:03

Помоему всё достаточно прозрачно. Первая открытая выборка в соединении создает проблему для второго компонента и не дает даже заслать команду select.
конечно прозрачно.
Есть 2 варианта:

1. Кроме выборки у вас связанный код. И конеШно код написан "работает с первого раза".
2. Связанного кода нет. Всё на компонентах и максимум написан запрос (коий из бинарника можно вытащить :)).

Но: независимо от вариантов... тестовый не работающий пример (желательно используя популярную бд).
pupsik
энтузиаст
 
Сообщения: 1122
Зарегистрирован: 20.08.2014 16:20:13

Re: Error 20019 : на простом запросе.

Сообщение Vadim » 02.01.2018 19:19:35

pupsik писал(а):желательно используя популярную бд)

Не получится. MSSQL - это Вам не какая-нибудь популярная БД... :-)
Vadim
долгожитель
 
Сообщения: 2829
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Error 20019 : на простом запросе.

Сообщение jsa » 03.01.2018 11:41:10

pupsik писал(а):Есть 2 варианта:

1. Кроме выборки у вас связанный код. И конеШно код написан "работает с первого раза".
2. Связанного кода нет. Всё на компонентах и максимум написан запрос (коий из бинарника можно вытащить :)).


Вроде и по русски написано, а смысла не вижу ни капли. Списываю на то, что самоучке мысли мудрых не понять.
P.S. Что есть "связанный код" ? не могу нагуглить определение.
jsa
новенький
 
Сообщения: 46
Зарегистрирован: 28.11.2017 13:46:04

Re: Error 20019 : на простом запросе.

Сообщение pupsik » 04.01.2018 01:00:50

Vadim знаю :)

Вроде и по русски написано, а смысла не вижу ни капли.
выложите тестовый пример того что вы хотите и с ошибкой. Иначе - толочь воду в ступе.
P.S. Что есть "связанный код" ? не могу нагуглить определение.
т.е. у вас чисто конект и никакого кода, связанного с обработкой полученного нет.?
pupsik
энтузиаст
 
Сообщения: 1122
Зарегистрирован: 20.08.2014 16:20:13

След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

Рейтинг@Mail.ru