|
|
|
склсервер
|
|||
|---|---|---|---|
|
#18+
есть такая противная проблема написана программа на фоксе которая использует одбс соединение для выкачки сведений из скл сервера при первом запуске программы всё проходит вполне нормально далее программа остается работать в свободном полете но время от времени данные нужно обновлять вот тут то и начинаються проблемы переодически программа перестает обновлять данные хотя если ее перезапустить то всё будет нормально что происходит? STORE SQLCONNECT('utf', '....', '.....') TO gnConnHandle IF gnConnHandle <= 0 = MESSAGEBOX('Cannot make connection', 16, 'SQL Connect Error') Else RR=SQLEXEC(gnConnHandle,StrSQL) = SQLDISCONNECT(gnConnHandle) endif может нужно ли ждать окончание обработки жирной команды ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2005, 10:16 |
|
||
|
склсервер
|
|||
|---|---|---|---|
|
#18+
А какая команда идет на SQL Server ?! Где присвоение переменной StrSQL ? С уважением, Алексей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2005, 10:32 |
|
||
|
склсервер
|
|||
|---|---|---|---|
|
#18+
ну если для Вас это принципиально StrSQL="exec utf..mysor3 " надеюсь текст хранимки Вам не нужен ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2005, 10:44 |
|
||
|
склсервер
|
|||
|---|---|---|---|
|
#18+
Мало информации... Может проблема с синхронным и асинхронным режимом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2005, 10:55 |
|
||
|
склсервер
|
|||
|---|---|---|---|
|
#18+
Нет, текст SP меня не интересует. Если Вы уверены, что команда RR=SQLEXEC(gnConnHandle,StrSQL) проходит, а обновление данных, судя по тексту StrSQL, происходит в mysor3, то причем тут VFP !? Смотрите текст самой SP - что-то в ней. С уважением, Алексей. P.S. Я бы для уверенности проверил значение RR после отработки команды SQLEXEC. Если RR < 0, то ошибка. Если = 0, то команда закончила работу без ошибки, а если > 0, то возможно у вас установлен асинхронный режим работы и команда еще выполняется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2005, 10:59 |
|
||
|
склсервер
|
|||
|---|---|---|---|
|
#18+
Aleksey-KP.S. Я бы для уверенности проверил значение RR после отработки команды SQLEXEC. Если RR < 0, то ошибка. Если = 0, то команда закончила работу без ошибки, а если > 0, то возможно у вас установлен асинхронный режим работы и команда еще выполняется. Несколько не так: < 0 - ошибка. Уточняем по AERROR() какая именно = 0 - процесс выполнения еще не закончен. Работа в асинхронном режиме >0 - процесс успешно завершен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2005, 11:03 |
|
||
|
склсервер
|
|||
|---|---|---|---|
|
#18+
ВладимирМ Aleksey-KP.S. Я бы для уверенности проверил значение RR после отработки команды SQLEXEC. Если RR < 0, то ошибка. Если = 0, то команда закончила работу без ошибки, а если > 0, то возможно у вас установлен асинхронный режим работы и команда еще выполняется. Несколько не так: < 0 - ошибка. Уточняем по AERROR() какая именно = 0 - процесс выполнения еще не закончен. Работа в асинхронном режиме >0 - процесс успешно завершен. Да, немного ошибся. Правда есть еще работу в асинхронном непакетном режиме. Тогда 1 - возврат очередного RowSet, а 2 - больше пакетов нет, но это уже совсем экзотика, да и команда используется не только SQLEXEC, но SQLMORERESULTS С уважением, Алексей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2005, 11:17 |
|
||
|
склсервер
|
|||
|---|---|---|---|
|
#18+
2ВладимирМ как всегда по существу спасибо я тоже думаю что скорее всего дело в том что соединенение как-то провисает и возможно что из-за того что "загруженое" соединение нельзя отключить 2Sergey Ch = SQLSETPROP(gnConnHandle, 'asynchronous', .F.) хотя в данном случае это строка лишняя если не ошибся то это установка по умолчанию но как говориться кто обжегся на молоко тот дует водка значит если я правильно понял нужно ждать заверешения выполнения жирного оператора? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2005, 11:18 |
|
||
|
склсервер
|
|||
|---|---|---|---|
|
#18+
кошмарик2ВладимирМ как всегда по существу спасибо я тоже думаю что скорее всего дело в том что соединенение как-то провисает и возможно что из-за того что "загруженое" соединение нельзя отключить 2Sergey Ch = SQLSETPROP(gnConnHandle, 'asynchronous', .F.) хотя в данном случае это строка лишняя если не ошибся то это установка по умолчанию но как говориться кто обжегся на молоко тот дует водка значит если я правильно понял нужно ждать заверешения выполнения жирного оператора? Если синхронный режим работы (SQLSETPROP(gnConnHandle, 'asynchronous', .F.)), то ждать не надо. Достаточно проверить, что RR > 0 С уважением, Алексей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2005, 11:20 |
|
||
|
склсервер
|
|||
|---|---|---|---|
|
#18+
Такая ситуация наблюдалась в 5-ке (не помню с каким драйвером ODBC), хотя и не должна была появляться при Ваших условиях. Тем не менее есть несколько скрытых моментов 1. Между созданием соединениея и выполнением SQLEXEC - соединение рвётся, т.е. указатель существует, а соединения нет. 2. Влияние опции SELECT ... OPTION (FAST n) - в этом случае помогает принудительная выборка всего курсора 3. Если ХП не возвращает курсор, то помогало WAIT ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2005, 11:30 |
|
||
|
склсервер
|
|||
|---|---|---|---|
|
#18+
понимаете здесь что-то не так не пойму что эта кнопочка по которой код вызываеться она после нажатия на пропадает (вернее должна пропасть ) и появляеться только после выполнения кода и так и происходит при первом запуске или возможно второго но переодически она просто перестает пропадать и соответственно табличка не обновляеться хотя соединение не ругаеться т.е. такое впечатление что идем по ветке else хотя this.Visible=.f. это первая строка в методе клик кнопки сам клик работает нормально как минимум один раз а при моих тестированиях и более раз она возникает переодически по непонятной причине так вот я и ищу причину возможно она и не в фоксе хотя кто знает нажатия на другие объекты формы отрабатываються нормально соединение с сервером через адсл выделенку так почему кнопка не пропадает и код не выполняеться ? может кто знает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2005, 11:34 |
|
||
|
склсервер
|
|||
|---|---|---|---|
|
#18+
кошмарикпонимаете здесь что-то не так не пойму что эта кнопочка по которой код вызываеться она после нажатия на пропадает (вернее должна пропасть ) и появляеться только после выполнения кода Если ты написал код вроде: Код: plaintext 1. 2. 3. 4. То кнопка пропадать НЕ будет. Здесь вопрос в том, что после подачи команды Visible = .F. и до команды Visible = .T. нет прерывания текущего события. Т.е. самому процессу скрытия/отображения кнопки некуда втиснуться. Надо искусственно дать сработать этому событию. Примерно так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Ну, или вызывать SQLExec() в другой процедуре Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2005, 11:56 |
|
||
|
склсервер
|
|||
|---|---|---|---|
|
#18+
this.Visible=.f. thisform.refresh ...................... и кнопка пропадает по крайней мере на тестировании и первый раз после запуска а возможно и более она перестает пропадать только когда запрос к серверу не выполняется причем не выполняеться молча полная иллюзия что все нормально типа на шипке все спокойно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2005, 12:19 |
|
||
|
склсервер
|
|||
|---|---|---|---|
|
#18+
Прочти, ещё раз ОЧЕНЬ ВНИМАТЕЛЬНО все посты ВладимираМ , и подумай в каком месте выполняется функция и НЕ выполняется проверка на ошибку - сразу всё встанет на свои места. Обрати внимание, что ф-ии SQLEXEC, SQLCONNECT итд, возвращают результат выполнения и ни как не сообщают фоксовому обработчику ошибок об ошибке, так же посмотри на настройки соединения на предмет показа(возвращения) ошибки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2005, 13:24 |
|
||
|
склсервер
|
|||
|---|---|---|---|
|
#18+
2ВладимирМ Вы конечно гуру но ваше DOEVENTS мне не понятно может объясните подробнее ? особенно если AutoYield никто не трогал? Мне просто стало любопытно и я мсдн почитал так вот ничего и не понял? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2005, 14:47 |
|
||
|
склсервер
|
|||
|---|---|---|---|
|
#18+
leaf2ВладимирМ Вы конечно гуру но ваше DOEVENTS мне не понятно может объясните подробнее ? особенно если AutoYield никто не трогал? Мне просто стало любопытно и я мсдн почитал так вот ничего и не понял? Предположим, сделали настройку _VFP.AutoYield = .F. Теперь делаем простую формочку с одной кнопкой в событии Click() которой такой код Код: plaintext 1. 2. 3. 4. 5. 6. 7. В этом случае, изменение текста Caption кнопки на "Вычисление" вообще не произойдет! Именно потому, что событие перерисовки Caption поставлено в очередь. А вот если после этой команды дать команду DOEVENTS То событие перерисовки произойдет немедленно! Т.е. будут выполнены те собятия, которые стоят в очереди. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2005, 16:13 |
|
||
|
склсервер
|
|||
|---|---|---|---|
|
#18+
так конечно всё правильно только по умолчанию _VFP.AutoYield = .Т. а что бы поменять ещё додуматься надо да и кнопка не заголовок окна ну да ладно по любому для меня например любая иформация полезна не знаю как автору у него кажеться соединение подвисает а потом уже кнопка не исчезает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2005, 16:18 |
|
||
|
|

start [/forum/topic.php?fid=41&fpage=323&tid=1594305]: |
0ms |
get settings: |
9ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
56ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
| others: | 237ms |
| total: | 384ms |

| 0 / 0 |
