powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / склсервер
17 сообщений из 17, страница 1 из 1
склсервер
    #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
склсервер
    #33045532
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А какая команда идет на SQL Server ?!
Где присвоение переменной StrSQL ?
С уважением, Алексей.
...
Рейтинг: 0 / 0
склсервер
    #33045562
кошмарик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну если для Вас это принципиально

StrSQL="exec utf..mysor3 "

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

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

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

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

Тем не менее есть несколько скрытых моментов
1. Между созданием соединениея и выполнением SQLEXEC - соединение рвётся, т.е. указатель существует, а соединения нет.
2. Влияние опции SELECT ... OPTION (FAST n) - в этом случае помогает принудительная выборка всего курсора
3. Если ХП не возвращает курсор, то помогало WAIT
...
Рейтинг: 0 / 0
склсервер
    #33045713
кошмарик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
понимаете здесь что-то не так не пойму что
эта кнопочка по которой код вызываеться она после нажатия на пропадает (вернее должна пропасть ) и появляеться только после выполнения кода и так и происходит при первом запуске или возможно второго но переодически она просто перестает пропадать и соответственно табличка не обновляеться хотя соединение не ругаеться т.е. такое впечатление что идем по ветке else
хотя this.Visible=.f. это первая строка в методе клик кнопки
сам клик работает нормально как минимум один раз а при моих тестированиях и более раз она возникает переодически по непонятной причине
так вот я и ищу причину возможно она и не в фоксе хотя кто знает
нажатия на другие объекты формы отрабатываються нормально
соединение с сервером через адсл выделенку
так почему кнопка не пропадает и код не выполняеться ?
может кто знает?
...
Рейтинг: 0 / 0
склсервер
    #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
склсервер
    #33045831
кошмарик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
this.Visible=.f.
thisform.refresh
......................
и кнопка пропадает по крайней мере на тестировании и первый раз после запуска а возможно и более
она перестает пропадать только когда запрос к серверу не выполняется причем не выполняеться молча
полная иллюзия что все нормально
типа на шипке все спокойно
...
Рейтинг: 0 / 0
склсервер
    #33046024
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прочти, ещё раз ОЧЕНЬ ВНИМАТЕЛЬНО все посты ВладимираМ , и подумай в каком месте выполняется функция и НЕ выполняется проверка на ошибку - сразу всё встанет на свои места.

Обрати внимание, что ф-ии SQLEXEC, SQLCONNECT итд, возвращают результат выполнения и ни как не сообщают фоксовому обработчику ошибок об ошибке, так же посмотри на настройки соединения на предмет показа(возвращения) ошибки.
...
Рейтинг: 0 / 0
склсервер
    #33046273
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2ВладимирМ
Вы конечно гуру но ваше DOEVENTS мне не понятно может объясните подробнее ?
особенно если AutoYield никто не трогал?
Мне просто стало любопытно и я мсдн почитал так вот ничего и не понял?
...
Рейтинг: 0 / 0
склсервер
    #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
склсервер
    #33046502
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так конечно всё правильно только по умолчанию
_VFP.AutoYield = .Т.
а что бы поменять ещё додуматься надо да и кнопка не заголовок окна
ну да ладно по любому для меня например любая иформация полезна не знаю как автору
у него кажеться соединение подвисает а потом уже кнопка не исчезает
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / склсервер
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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