Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 Потеря соединения с сервером MS SQL  [new]
Valerii
Member

Откуда:
Сообщений: 749
Народ
Кто подскажет как правильно отлавливать ситуации когда была прервана связь между клиентским приложением и сервером? (обрыв соединения, проблемы с каналом и т.д.) Понятно что можно потом отлавливать результат какого-то процесса/операции и отлавливать ошибку. Как потом без выхода из приложения корректно восстанавливать соединение?
Какие есть техники на счет этого? Всем заранее спасибо.
8 май 12, 09:01    [12522451]     Ответить | Цитировать Сообщить модератору
 Re: Потеря соединения с сервером MS SQL  [new]
PaulWist
Member

Откуда:
Сообщений: 2236
Valerii
Народ
Кто подскажет как правильно отлавливать ситуации когда была прервана связь между клиентским приложением и сервером? (обрыв соединения, проблемы с каналом и т.д.) Понятно что можно потом отлавливать результат какого-то процесса/операции и отлавливать ошибку. Как потом без выхода из приложения корректно восстанавливать соединение?
Какие есть техники на счет этого? Всем заранее спасибо.


1. Использовать свою ф-ию аналог SQLEXEC в которой сначала проверять "живость" соединения, если соединение отвалилось, то пересоединяться с получением нового hnd.

2. Использовать SQIDELDISCONNECT - ф-ия автоматически поднимающая упавшее соединение (только в 9-ке)
8 май 12, 10:27    [12522533]     Ответить | Цитировать Сообщить модератору
 Re: Потеря соединения с сервером MS SQL  [new]
Vladimir M Sklyar
Member

Откуда: Украина, Конотоп
Сообщений: 649


> 2. Использовать SQIDELDISCONNECT - ф-ия автоматически поднимающая
> упавшее соединение (только в 9-ке)

SQLIDLEDISCONNECT :)

Posted via ActualForum NNTP Server 1.5

8 май 12, 12:47    [12523063]     Ответить | Цитировать Сообщить модератору
 Re: Потеря соединения с сервером MS SQL  [new]
Valerii
Member

Откуда:
Сообщений: 749
Vladimir M Sklyar,

СПасибо конечно, но я прочитал хелп по этой функции - она временно отключает и включает соединение.
Но она не проверяет есть коннект или его нет.
Или я что-то не так понял. Можно пример кода?
8 май 12, 16:06    [12523964]     Ответить | Цитировать Сообщить модератору
 Re: Потеря соединения с сервером MS SQL  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
Нельзя же быть настолько лентяем, что не попытаться воспользоваться поиском по слову SQLIDLEDISCONNECT на этом форуме. Затем по ссылкам в найденных топиках выйти вот на это SQLIDLEDISCONNECT( ) Temporarily Disconnects SQL Pass-Through Connections
9 май 12, 13:56    [12526427]     Ответить | Цитировать Сообщить модератору
 Re: Потеря соединения с сервером MS SQL  [new]
Valerii
Member

Откуда:
Сообщений: 749
Спасибо ВладимирМ,
Но дело не в лени а во времени...
Спс еще раз.
10 май 12, 11:19    [12528702]     Ответить | Цитировать Сообщить модератору
 Re: Потеря соединения с сервером MS SQL  [new]
Александр Третьяков
Member

Откуда: Украина, г. Тернополь
Сообщений: 549
я делаю переподключение, возможно пригодиться кому-то код.
все зависит от логики приложения, у меня вызов хранимок.
сделал подмену стандатной SQLEXEC свою prSQLEXEC.


*************************************************************
*** prSQLEXEC процедура обертка на SQLEXEC
*************************************************************
PROCEDURE prSQLEXEC
PARAMETERS pnhConnect,pcSQL,pcCursor
*тут поставив PARAMETERS бо в низу є виклик  prg_connect а в ній використовую m.pnhConnect
*LPARAMETERS pnhConnect,pcSQL,pcCursor
*назад возвращаю lnresult, если он <0 то ошибка
*якщо выдбувся реконнект то мыняэться hConnect, бо передаю як адрес параметра
LOCAL lnresult
*	if _VFP.StartMode=0
IF PARAMETERS()=2
	m.pcCursor=''
ENDIF

*1-проверка связи, если нет то переподключаемся
IF m.pnhConnect>0
	m.lnresult=SQLEXEC(m.pnhConnect,"")
	IF m.lnresult<0
		*дістаємо стірчку підключення
		LOCAL lcConnStr
		m.lcConnStr=SQLGETPROP(m.pnhConnect,'ConnectString')
*!*			IF EMPTY(m.lcConnStr)
*!*					on shut
*!*					quit
*!*				RETURN -1
*!*			ENDIF
		m.pnhConnect=SQLSTRINGCONNECT(m.lcConnStr)
		IF m.pnhConnect < 0
			*не зміг підключитися викликаю вікно і чекаю 10секунд або якщо не натиснули так 
			*і повторно пробую підключитися, якщо праціник натиснув ні то вихід з програми
			LOCAL lcstr,lbok,lncmd
			m.lcstr="Не можу підключитись до сервера!"+CHR(13)+;
				"Автоматичне перепідключення відбудеться"+CHR(13)+;
				"через 10 секунд."+CHR(13)+;
				"Для перепідключення натисніть Да."+CHR(13)+;
				"Для виходу з программи натисніть Нет."
			m.lbok=.t.	
			DO WHILE m.lbok
				m.lncmd=MESSAGEBOX(m.lcstr,"Помилка зв'язку з сервером PostgreSQL!",68,10000)
				IF m.lncmd=-1 OR m.lncmd=6
					*перепідключення
					m.pnhConnect=SQLSTRINGCONNECT(m.lcConnStr)
					IF m.pnhConnect>=0
						m.lbok=.f.
					endif
				ELSE
					*lncmd=7 вихід
					on shut
					quit
				ENDIF
			ENDDO
	*		DO FORM mymessagebox WITH 'Помилка',m.lcTextLog,1
			*тут потрібно вияснити чому немає звязку и запропонувати Повтор, Вихід з Программи
	*		= MESSAGEBOX('Не можу підключитися до сервера, перевірте чи є у Вас мережа!', 16, 'Сервер')
	*		on shut
	*		quit
	*		return m.lnresult
		ENDIF
	ENDIF
	*звязок є, або відновлено
	m.lnresult=SQLEXEC(m.pnhConnect,m.pcSQL,m.pcCursor)
	=prg_connect(m.lnresult)
	*if (prg_connect(m.lnresult))
	*	return .f.
	*ENDIF
ELSE
	m.lnresult=-1
ENDIF
RETURN m.lnresult
ENDPROC
11 май 12, 15:20    [12537168]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Потеря соединения с сервером MS SQL  [new]
Valerii
Member

Откуда:
Сообщений: 749
Александр Третьяков,

Спасибо за пример, вопрос:
*дістаємо стірчку підключення
LOCAL lcConnStr
m.lcConnStr=SQLGETPROP(m.pnhConnect,'ConnectString')

это строка "достает" из свойств сервера строку соединения которое отвалилось?
Можно это как-то прикрутить в обработчик ошибок? И потом пользоваться TRY... CATH? Или иcпользовать RETRY?
8 июл 15, 11:03    [17866494]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить