:: Visual Foxpro, Foxpro for DOS
Кратовременно теряется соединение с сервером.
pap

Сообщений: 69
Откуда: Уральск
Дата регистрации: 14.01.2006
Программа работает с MS SQL
На одном компьютере иногда кратковременно теряется соединение с сервером
Ping сервера с проблемного компа иногда даёт Превышен интервал ожидания.
Менял патч-корд, переключал в другие порты, менял сетевую карту.
Ну не знаю что еще...
И в это время теряется соединение с сервером.
И ВСЁ программа похоже крутиться в каком-то цикле -закрыть можно только через Диспетчер задач
Помогает только заново m.lConnect = SQLSTRINGCONNECT(m.lcstrcon)
Чтобы имитировать ошибку отключал и заново включал у себя сетевую карту
Это я отловил и обработал ошибки 0 и 10060 при исполнении SQLEXEC(
НО. потеря соединения может возникнуть и при открытии формы
Где в DE определяются курсор-адаптеры.
Как там отловить ошибку?
В AfterCursorFill
IF NOT lResult
=AERROR(laErr)
IF _vfp.StartMode =0
SET STEP ON
ENDIF
IF laErr[5]=0
DO connectSql
Соединение вновь установлено, другие курсоры откроются,
но этот - нет
this.CursorFill() - НЕ срабатывает
ENDIF
ELSE
GO BOTTOM
ENDIF
Может нужны какие-нибудь настройки для соединения
типа ConnectTimeOut по умолчанию 15 сек - но настолько соединение не прерываетя
сужу по ping -t 192.168....
Помогите советом если есть какие-нибудь идеи.
Ratings: 0 negative/0 positive
Re: Кратовременно теряется соединение с сервером.
PaulWist

Сообщений: 14618
Дата регистрации: 01.04.2004
do while .t.
если ошибки не было, то exit
enddo


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: Кратовременно теряется соединение с сервером.
pap

Сообщений: 69
Откуда: Уральск
Дата регистрации: 14.01.2006
Если ошибки нет - всё работает.
Проблема когда ошибка появляется
Есть ошибка - заново подключаюсь
НО курсор в котором произошла ошибка
надо открыть заново - как?
this.CursorFill() - НЕ срабатывает

Может в BeforeCurosrFill как-то проверять наличие соединения?



Исправлено 1 раз(а). Последнее : pap, 23.09.22 15:22
Ratings: 0 negative/0 positive
Re: Кратовременно теряется соединение с сервером.
PaulWist

Сообщений: 14618
Дата регистрации: 01.04.2004
pap
Может в BeforeCurosrFill как-то проверять наличие соединения?

Ошибка же ловится.

Ставишь "бесконечный" цикл на 3 попытки, если ошибка словлена, то закрываешь уже открытые курсоры, затем идёшь на начало цикла для повторного открытия.

Если ошибки не было, то открываешь форму.

Если ошибка повторилась 3 раза, выводишь сообщение, мол не шмогла.

Тут есть один ньюанс, соединение может отвалиться в момент, когда выполняется запрос к серверу, в этом случае помогает sqlideldisconnect()


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)




Исправлено 1 раз(а). Последнее : PaulWist, 23.09.22 15:54
Ratings: 0 negative/0 positive
Re: Кратовременно теряется соединение с сервером.
pap

Сообщений: 69
Откуда: Уральск
Дата регистрации: 14.01.2006
Пока решил так
в Init формы добавил
lnObjects = AMEMBERS(laObjects, this.DataEnvironment, 2)
FOR lnItem = 1 TO lnObjects
loCurObj =laObjects[lnItem]
IF !USED(loCurObj)
lcUse_ = "Thisform.DataEnvironment."+loCurObj+".CursorFill()"
&lcUse_
ENDIF
ENDFOR
Ratings: 0 negative/0 positive
Re: Кратовременно теряется соединение с сервером.
ssa
Автор

Сообщений: 13007
Откуда: Москва
Дата регистрации: 23.03.2005
Ну и как обычно кто-нить обязательно продемонстрирует полное неумение пользоваться коллекциями без макроподстановки.
lnObjects = AMEMBERS(laObjects, this.DataEnvironment, 2)
FOR lnItem = 1 TO lnObjects
FOR EACH lnObjects IN Thisform.DataEnvironment
loCurObj =laObjects[lnItem]
IF loCurObj.BaseClass = 'cursoradapter' and !USED(loCurObj)
lcUse_ = "Thisform.DataEnvironment."+loCurObj+".CursorFill()"
&lcUse_
loCurObj.CursorFill()
ENDIF
ENDFOR


------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: Кратовременно теряется соединение с сервером.
pap

Сообщений: 69
Откуда: Уральск
Дата регистрации: 14.01.2006
thumbs down Спасибо.
Ratings: 0 negative/0 positive
Re: Кратовременно теряется соединение с сервером.
pap

Сообщений: 69
Откуда: Уральск
Дата регистрации: 14.01.2006
FOR EACH lnObjects IN Thisform.DataEnvironment давала ошибку
написал так:
lnObjects = AMEMBERS(laObjects, this.DataEnvironment, 2)
FOR lnItem = 1 TO lnObjects
lcCurObj =laObjects[lnItem]
loCurObj = EVALUATE("this.DataEnvironment."+lcCurObj)
IF "Cursor" $ loCurObj.BaseClass AND !USED(lcCurObj)
loCurObj.CursorFill()
ENDIF
ENDFOR
Ratings: 0 negative/0 positive
Re: Кратовременно теряется соединение с сервером.
ssa
Автор

Сообщений: 13007
Откуда: Москва
Дата регистрации: 23.03.2005
Предыдущий код не проверял, а сразу в ответе писал. В надежде указать направление. Но, видимо, не в коня корм...
Теперь даю РАБОЧИЙ код.
For Each lnObjects In this.DataEnvironment.Objects
If lnObjects.BaseClass = 'Cursoradapter' And !Used(lnObjects.Alias)
?lnObjects.Name && CursorFill()
Endif
Next


------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 26 vech  (Гостей: 25)

© 2000-2024 Fox Club 
Яндекс.Метрика