powered by simpleCommunicator - 2.0.29     © 2024 Programmizd 02
Map
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Переконнект
11 сообщений из 11, страница 1 из 1
Переконнект
    #32232857
Механик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Через интернет коннекчусь к серверу. Время от времени коннект обрывается. Есть необходимость переконнектить приложение. Есть ли идеи, как лучше определеить все "используемые", то есть открытые ранее транзакции с целью установить(закрыть/открыть) транзакцию? Есть ли необходимость отыскивать все окна приложения, все DW, DS... работающим в них?
...
Рейтинг: 0 / 0
Переконнект
    #32232869
Pers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При disconnect'е все незавершенные транзакции откатываются. Заново нужно коннектиться чтобы продлжить работу
...
Рейтинг: 0 / 0
Переконнект
    #32232902
Механик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понятно. Но можно ли просто получить список контролов, нуждающихся в SeTransObject?
...
Рейтинг: 0 / 0
Переконнект
    #32232932
Pers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Делаешь connect
объект глобальный?
должен оказывать влияние на все объекты
...
Рейтинг: 0 / 0
Переконнект
    #32232975
Механик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оказывать-то он оказывает, да только справедливо SetTransObject требует. Я вот и думаю, а нельзя ли так, чтобы глобально SetTransObject для всех установить?
...
Рейтинг: 0 / 0
Переконнект
    #32233019
Pers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделай функцию где проверяеться ответ от сервера , в зависимости от него будешь устанавливать заново конект
...
Рейтинг: 0 / 0
Переконнект
    #32233114
Механик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос не в том как переконнектиться, вопрос в том, чтобы отыскать все объекты, которым необходимо указать SetTransObject после установления коннекта. Я подумал, может есть чего прямое, а не обычный перебор контролов в открытых окнах.
...
Рейтинг: 0 / 0
Переконнект
    #32233203
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ммм ... самый лучший способ конечно в таком случае изначально не держать постоянный коннект с БД, перед каждой операцией работы с БД соединяясь с ней, устанавливать в DataWindow Transaction и после проведения операции отсоединяясь от БД. Тогда гарантировано все будет работать. Можно сделать и иначе - создать глобальную функцию, которая будет вызываться перед каждой операцией с БД, восстанавливая коннект, если он потерян и устанавливая Transaction у DataWindow, если он передан параметром. Кстати такую функцию можно спокойно вызывать на RetrieveStart у DataWindow, при желании сделав его классом предком для всех используемых в проекте DataWindow.

Что то типа того:

На подключение
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
global type f_tran_connect from function_object
end type

forward prototypes
global function integer f_tran_connect (transaction tranobject, datawindow dw)
end prototypes

global function integer f_tran_connect (transaction tranobject, datawindow dw);if tranObject.DBHandle() <>  0  then
  return  0 
end if

Connect using tranObject;

if tranObject.SQLCode <>  0  then
  MessageBox( 'Error', 'Cannot connect to server.', StopSign!)
  return - 1 
end if

if IsValid( dw ) then
  dw.SetTransObject( tranObject )
end if

return  1 
end function


И на отключение
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
global type f_tran_disconnect from function_object
end type

forward prototypes
global function integer f_tran_disconnect (transaction tranobject)
end prototypes

global function integer f_tran_disconnect (transaction tranobject);if tranObject.DBHandle() =  0  then
  return  0 
end if

disconnect using tranObject;

if tranObject.SQLCode <>  0  then
  return - 1 
end if

return  1 
end function


Кстати что то я не нашел событий у класса Transation по поводу подключения, отключения и т.д. Очень очень странно. У PFC в классе pfc_n_tr насколько я понял все эти методы реализованы, но событий все равно не вижу. Наверное есть повод подумать на эту тему.
...
Рейтинг: 0 / 0
Переконнект
    #32233294
Механик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сам по себе SetTransObject занимает довольно длительное время, потому я обычно не отконнекчиваюсь, раньше не требовалось. Но про RetrieveStart - мысль мне нравится.

DW таким образом обработать можно. DS, если в предке обработать и работать исключая класс DataStore тоже. Для выпадающих DataWindowChild с аргументами, в сущности, можно указывать объект транзакции перед Retrieve. Вроде бы подходит.

А вообще, конечно, хотелось бы иметь возможность снять с объекта транзакции информацию о использующих его объектах. Для этого, я думаю, можно для при каждом вызове of_settransobject фиксировать контрол в объекте транзакции. А для DataWindowChild так-же надо будет использовать особую функцию. При разрушении объектов удалять объекты из списка. Уф блин, морока. Не буду делать.
...
Рейтинг: 0 / 0
Переконнект
    #32252854
Фотография Raven A
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Механик

Ну если допустим постоянный connect/disconnect то проробуй

SetTrans PowerScript function
Usage
.....
The DataWindow control connects and disconnects after each Retrieve or Update function.
....
...
Рейтинг: 0 / 0
Переконнект
    #32252886
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Механик\r
Вот здесь Филлип дал ссылку ( PB info )\r
Очень доступно описан подход к решению вашей проблемы
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Переконнект
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]