Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / склсервер / 17 сообщений из 17, страница 1 из 1
03.05.2005, 10:16
    #33045498
кошмарик
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
склсервер
есть такая противная проблема
написана программа на фоксе которая использует одбс соединение для выкачки сведений из скл сервера
при первом запуске программы всё проходит вполне нормально далее программа остается работать в свободном полете но время от времени данные нужно обновлять вот тут то и начинаються проблемы переодически программа перестает обновлять данные хотя если ее перезапустить то всё будет нормально что происходит?

STORE SQLCONNECT('utf', '....', '.....') TO gnConnHandle
IF gnConnHandle <= 0
= MESSAGEBOX('Cannot make connection', 16, 'SQL Connect Error')
Else
RR=SQLEXEC(gnConnHandle,StrSQL)
= SQLDISCONNECT(gnConnHandle)
endif

может нужно ли ждать окончание обработки жирной команды
...
Рейтинг: 0 / 0
03.05.2005, 10:32
    #33045532
Aleksey-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
склсервер
А какая команда идет на SQL Server ?!
Где присвоение переменной StrSQL ?
С уважением, Алексей.
...
Рейтинг: 0 / 0
03.05.2005, 10:44
    #33045562
кошмарик
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
склсервер
ну если для Вас это принципиально

StrSQL="exec utf..mysor3 "

надеюсь текст хранимки Вам не нужен
...
Рейтинг: 0 / 0
03.05.2005, 10:55
    #33045596
Sergey Ch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
склсервер
Мало информации... Может проблема с синхронным и асинхронным режимом?
...
Рейтинг: 0 / 0
03.05.2005, 10:59
    #33045608
Aleksey-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
склсервер
Нет, текст SP меня не интересует. Если Вы уверены, что команда RR=SQLEXEC(gnConnHandle,StrSQL) проходит, а обновление данных, судя по тексту StrSQL, происходит в mysor3, то причем тут VFP !? Смотрите текст самой SP - что-то в ней.
С уважением, Алексей.
P.S. Я бы для уверенности проверил значение RR после отработки команды SQLEXEC. Если RR < 0, то ошибка. Если = 0, то команда закончила работу без ошибки, а если > 0, то возможно у вас установлен асинхронный режим работы и команда еще выполняется.
...
Рейтинг: 0 / 0
03.05.2005, 11:03
    #33045619
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
склсервер
Aleksey-KP.S. Я бы для уверенности проверил значение RR после отработки команды SQLEXEC. Если RR < 0, то ошибка. Если = 0, то команда закончила работу без ошибки, а если > 0, то возможно у вас установлен асинхронный режим работы и команда еще выполняется.
Несколько не так:

< 0 - ошибка. Уточняем по AERROR() какая именно
= 0 - процесс выполнения еще не закончен. Работа в асинхронном режиме
>0 - процесс успешно завершен.
...
Рейтинг: 0 / 0
03.05.2005, 11:17
    #33045664
Aleksey-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
склсервер
ВладимирМ Aleksey-KP.S. Я бы для уверенности проверил значение RR после отработки команды SQLEXEC. Если RR < 0, то ошибка. Если = 0, то команда закончила работу без ошибки, а если > 0, то возможно у вас установлен асинхронный режим работы и команда еще выполняется.
Несколько не так:

< 0 - ошибка. Уточняем по AERROR() какая именно
= 0 - процесс выполнения еще не закончен. Работа в асинхронном режиме
>0 - процесс успешно завершен.

Да, немного ошибся. Правда есть еще работу в асинхронном непакетном режиме. Тогда 1 - возврат очередного RowSet, а 2 - больше пакетов нет, но это уже совсем экзотика, да и команда используется не только SQLEXEC, но SQLMORERESULTS
С уважением, Алексей.
...
Рейтинг: 0 / 0
03.05.2005, 11:18
    #33045665
кошмарик
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
склсервер
2ВладимирМ
как всегда по существу спасибо
я тоже думаю что скорее всего дело в том что соединенение как-то провисает и возможно что из-за того что "загруженое" соединение нельзя отключить
2Sergey Ch
= SQLSETPROP(gnConnHandle, 'asynchronous', .F.)
хотя в данном случае это строка лишняя если не ошибся то это установка по умолчанию
но как говориться кто обжегся на молоко тот дует водка
значит если я правильно понял нужно ждать заверешения выполнения жирного оператора?
...
Рейтинг: 0 / 0
03.05.2005, 11:20
    #33045670
Aleksey-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
склсервер
кошмарик2ВладимирМ
как всегда по существу спасибо
я тоже думаю что скорее всего дело в том что соединенение как-то провисает и возможно что из-за того что "загруженое" соединение нельзя отключить
2Sergey Ch
= SQLSETPROP(gnConnHandle, 'asynchronous', .F.)
хотя в данном случае это строка лишняя если не ошибся то это установка по умолчанию
но как говориться кто обжегся на молоко тот дует водка
значит если я правильно понял нужно ждать заверешения выполнения жирного оператора?
Если синхронный режим работы (SQLSETPROP(gnConnHandle, 'asynchronous', .F.)), то ждать не надо. Достаточно проверить, что RR > 0
С уважением, Алексей.
...
Рейтинг: 0 / 0
03.05.2005, 11:30
    #33045700
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
склсервер
Такая ситуация наблюдалась в 5-ке (не помню с каким драйвером ODBC), хотя и не должна была появляться при Ваших условиях.

Тем не менее есть несколько скрытых моментов
1. Между созданием соединениея и выполнением SQLEXEC - соединение рвётся, т.е. указатель существует, а соединения нет.
2. Влияние опции SELECT ... OPTION (FAST n) - в этом случае помогает принудительная выборка всего курсора
3. Если ХП не возвращает курсор, то помогало WAIT
...
Рейтинг: 0 / 0
03.05.2005, 11:34
    #33045713
кошмарик
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
склсервер
понимаете здесь что-то не так не пойму что
эта кнопочка по которой код вызываеться она после нажатия на пропадает (вернее должна пропасть ) и появляеться только после выполнения кода и так и происходит при первом запуске или возможно второго но переодически она просто перестает пропадать и соответственно табличка не обновляеться хотя соединение не ругаеться т.е. такое впечатление что идем по ветке else
хотя this.Visible=.f. это первая строка в методе клик кнопки
сам клик работает нормально как минимум один раз а при моих тестированиях и более раз она возникает переодически по непонятной причине
так вот я и ищу причину возможно она и не в фоксе хотя кто знает
нажатия на другие объекты формы отрабатываються нормально
соединение с сервером через адсл выделенку
так почему кнопка не пропадает и код не выполняеться ?
может кто знает?
...
Рейтинг: 0 / 0
03.05.2005, 11:56
    #33045756
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
склсервер
кошмарикпонимаете здесь что-то не так не пойму что
эта кнопочка по которой код вызываеться она после нажатия на пропадает (вернее должна пропасть ) и появляеться только после выполнения кода
Если ты написал код вроде:

Код: plaintext
1.
2.
3.
4.
ThisForm.CommandButton1.Visible = .F.
...
SQLExec(...)
...
ThisForm.CommandButton1.Visible = .T.

То кнопка пропадать НЕ будет.

Здесь вопрос в том, что после подачи команды Visible = .F. и до команды Visible = .T. нет прерывания текущего события. Т.е. самому процессу скрытия/отображения кнопки некуда втиснуться. Надо искусственно дать сработать этому событию. Примерно так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
ThisForm.CommandButton1.Visible = .F.
* Заставляем выполниться событие скрытия кнопки
DOEVENTS
...
SQLExec(...)
...
ThisForm.CommandButton1.Visible = .T.
* Заставляем выполниться событие активации кнопки
DOEVENTS

Ну, или вызывать SQLExec() в другой процедуре

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
ThisForm.CommandButton1.Visible = .F.
...
DO MySQLExec()
...
ThisForm.CommandButton1.Visible = .T.

* Эта самая другая процедура
PROCEDURE MySQLExec()
SQLExec(...)
...
Рейтинг: 0 / 0
03.05.2005, 12:19
    #33045831
кошмарик
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
склсервер
this.Visible=.f.
thisform.refresh
......................
и кнопка пропадает по крайней мере на тестировании и первый раз после запуска а возможно и более
она перестает пропадать только когда запрос к серверу не выполняется причем не выполняеться молча
полная иллюзия что все нормально
типа на шипке все спокойно
...
Рейтинг: 0 / 0
03.05.2005, 13:24
    #33046024
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
склсервер
Прочти, ещё раз ОЧЕНЬ ВНИМАТЕЛЬНО все посты ВладимираМ , и подумай в каком месте выполняется функция и НЕ выполняется проверка на ошибку - сразу всё встанет на свои места.

Обрати внимание, что ф-ии SQLEXEC, SQLCONNECT итд, возвращают результат выполнения и ни как не сообщают фоксовому обработчику ошибок об ошибке, так же посмотри на настройки соединения на предмет показа(возвращения) ошибки.
...
Рейтинг: 0 / 0
03.05.2005, 14:47
    #33046273
leaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
склсервер
2ВладимирМ
Вы конечно гуру но ваше DOEVENTS мне не понятно может объясните подробнее ?
особенно если AutoYield никто не трогал?
Мне просто стало любопытно и я мсдн почитал так вот ничего и не понял?
...
Рейтинг: 0 / 0
03.05.2005, 16:13
    #33046484
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
склсервер
leaf2ВладимирМ
Вы конечно гуру но ваше DOEVENTS мне не понятно может объясните подробнее ?
особенно если AutoYield никто не трогал?
Мне просто стало любопытно и я мсдн почитал так вот ничего и не понял?

Предположим, сделали настройку

_VFP.AutoYield = .F.

Теперь делаем простую формочку с одной кнопкой в событии Click() которой такой код

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
This.Caption = 'Вычисление'

LOCAL lnSeconds
lnSeconds = SECONDS()
DO WHILE SECONDS()-lnSeconds< 3 
ENDDO

This.Caption = 'Закончили'

В этом случае, изменение текста Caption кнопки на "Вычисление" вообще не произойдет! Именно потому, что событие перерисовки Caption поставлено в очередь. А вот если после этой команды дать команду

DOEVENTS

То событие перерисовки произойдет немедленно! Т.е. будут выполнены те собятия, которые стоят в очереди.
...
Рейтинг: 0 / 0
03.05.2005, 16:18
    #33046502
leaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
склсервер
так конечно всё правильно только по умолчанию
_VFP.AutoYield = .Т.
а что бы поменять ещё додуматься надо да и кнопка не заголовок окна
ну да ладно по любому для меня например любая иформация полезна не знаю как автору
у него кажеться соединение подвисает а потом уже кнопка не исчезает
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / склсервер / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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