Проблема ODBC (SQLIDLEDISCONNECT) | |
---|---|
Sandwich Автор Сообщений: 137 Дата регистрации: 08.02.2014 |
Здравствуйте
Есть VFP-9 приложение, которое через ODBC работает с удаленным MySQL. Используются курсорадаптеры, подключение происходит так:
Сделал функцию для осуществления update:
Получается буд-то выполняется
Если в SQLSTRINGCONNECT('...') я поменяю местами, например, DATABASE и USER, то будет "обрезан" USER. Аналогично PORT и др. Что я не так делаю? Да. чуть не забыл: если я в этом окне руками допишу имя БД до конца (то что красным) - все продолжает нормально выполняться. Исправлено 1 раз(а). Последнее : Sandwich, 15.09.21 18:24 |
Re: Проблема ODBC (SQLIDLEDISCONNECT) | |
---|---|
AngelOKES Сообщений: 828 Дата регистрации: 08.02.2012 |
Я так понял, что если у вас не выполнился Update, то вы решаете, что дело именно в коннекте?
И если предположить что проблема именно в коннекте, то не проще ли просто проверить коннект и не использовать функцию SQLIDLEDISCONNECT ? По мне так она какая-то мутная))) |
Re: Проблема ODBC (SQLIDLEDISCONNECT) | |
---|---|
Sandwich Автор Сообщений: 137 Дата регистрации: 08.02.2014 |
Я немного (для читаемости) упростил приведенный код: перед использованием SQLIDLEDISCONNECT применяю =AERROR(). И уже в случае ошибки 1526 произвожу то, что описано.
Можно поподробней: как проверить и что сделать по результатам проверки? Сразу скажу, что создавать новое соединение - не вариант, потому что на сервере установлено MAX_USER_CONNECTIONS = 10 (изменять хостер не дает). При этом используется 20 CAD(ов) на 5-7 клиентских машинах. |
Re: Проблема ODBC (SQLIDLEDISCONNECT) | |
---|---|
AngelOKES Сообщений: 828 Дата регистрации: 08.02.2012 |
Да проверить-то просто, ваша переменная должна иметь числовое значение: если меньше или равно 0, значит отвалился после этого обычно делаешь новый коннект, но у вас видимо такое не прокатит, раз всего 10 подключений (либо как-то разруливать на самом сервере такие ситуации) |
Re: Проблема ODBC (SQLIDLEDISCONNECT) | |
---|---|
PaulWist Сообщений: 14618 Дата регистрации: 01.04.2004 |
Что возвращает
------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) |
Re: Проблема ODBC (SQLIDLEDISCONNECT) | |
---|---|
Sandwich Автор Сообщений: 137 Дата регистрации: 08.02.2014 |
Сейчас проверю, это просто: 10 минут бездействия и попытка сохранить - в 90% случаев такое событие |
Re: Проблема ODBC (SQLIDLEDISCONNECT) | |
---|---|
Sandwich Автор Сообщений: 137 Дата регистрации: 08.02.2014 |
Потрясающе! Функция возвращает обрезанную строку ещё до SQLIDLEDISCONNECT! Спасибо, я не знал как сделать такую проверку, буду разбираться. Найду - отпишусь. |
Re: Проблема ODBC (SQLIDLEDISCONNECT) | |
---|---|
Sandwich Автор Сообщений: 137 Дата регистрации: 08.02.2014 |
Теперь вообще ничего не понимаю. Выполнение кода
|
Re: Проблема ODBC (SQLIDLEDISCONNECT) | |
---|---|
PaulWist Сообщений: 14618 Дата регистрации: 01.04.2004 |
Похоже, что SQLGETPROP "криво" извлекает ConnectionString, считая двухбайтовые символы, длина возвращаемой строки 125 символов, а строка подключения 158 символов, надо резать строку подключения: юзера "резать", имя БД резать, хост IP адрес.
------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) |
Re: Проблема ODBC (SQLIDLEDISCONNECT) | |
---|---|
Sandwich Автор Сообщений: 137 Дата регистрации: 08.02.2014 |
"Порезал" так: PASSWORD -> PWD USER -> UID PORT - убрал вообще хост -> IP адрес Теперь "не влезает" только STMT=SET NAMES utf8; Но все работает! Всем спасибо! |
Re: Проблема ODBC (SQLIDLEDISCONNECT) | |
---|---|
Sawradym Сообщений: 2244 Откуда: Винница Дата регистрации: 15.05.2007 |
Тогда сам бог велел использовать шаред соединения. У SQLSTRINGCONNECT есть еще параметры. Почитайте и будет у вас одно внешнее соединение на все кады. |
Re: Проблема ODBC (SQLIDLEDISCONNECT) | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Похоже на проблему с драйвером - какая версия используется? Если крайняя в линейке (5.3.14) и проблема всё ещё имеется, то можно попробовать перейти на линейку 8.0.*
Вообще при использовании курсорадаптеров и подобном "ручном" вызове сохранения можно вместо "автоматического" SQLIDLEDISCONNECT() вручную пересоздавать коннекцию и прописывать её в курсорадаптер (тогда и строка подключения будет использоваться полная, та что нужна). Для проверки того что коннекция живая можно послать какую-нить примитивную команду типа 'SELECT 123'. Это да, но к описываемой проблеме это не имеет отношения. И управлять переподключением в случае shared соединения будет несколько сложнее - впрочем в любом случае стоит это (управление соединениями) не распихивать по прикладным формам/классам/отчётам/процедурам, а выделить в специальный класс-менеджер, и далее уже пользоваться им. ------------------ WBR, Igor |
Re: Проблема ODBC (SQLIDLEDISCONNECT) | |
---|---|
Sandwich Автор Сообщений: 137 Дата регистрации: 08.02.2014 |
Сейчас 5.3.04, попробую обновить я думал об этом, но как быть с остальными CAD-ми? При обработке ошибки у всех переписать ? Да, кстати, а как обновить отдельный драйвер? Через обновление самого ODBC? Исправлено 1 раз(а). Последнее : Sandwich, 19.09.21 13:27 |
Re: Проблема ODBC (SQLIDLEDISCONNECT) | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Если не используются разделяемые соединения, то все CAD независимы друг от друга, значит просто ловить ошибки и переподключаться при работе с каждым из них в отдельности. Если использовать общее разделяемое соединение - то запилить какой-то класс-менеджер держащий это самое соединение, вероятно, он же может проверять живое оно или нет и восстанавливать, если необходимо. CAD же перед любым использованием будет просто брать хэндл из этого менеджера. Да, пока CAD не используется, он может иметь невалидный хэндл у себя в настройках, но это не важно, т.к. он не используется. Как только нужно поработать - получаем корректный (проверенный) хэндл и работаем.
Просто переустановить, полагаю. Если там инсталлятор "не очень", то сначала деинсталлировать старый, зачистить реестр от остатков и накатить новый. ------------------ WBR, Igor |
© 2000-2024 Fox Club  |