powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Cursoradapter
7 сообщений из 7, страница 1 из 1
Cursoradapter
    #32772835
Kinetix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня возникла проблема с cursoradapter при параллельной работе в разных формах.

При запуске своей программы в main.prg я создаю коннект к SQL Server и храню его в переменной gnConn = SQLSTRINGCONNECT ....

В форме, в методе Init я программно добавляю cursoradapter в dataenvironment.

Код: plaintext
THISFORM.dataenvironment.AddObject("Sqlexec1","cursoradapter")

В методе Click кнопки на форме я закачиваю данные с сервера

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
WITH THISFORM.dataenvironment.sqlexec1

 .DATASOURCE = gnConn
 .DATASOURCETYPE = "ODBC"
 .ALIAS = "mytov"
 .SELECTCMD = "Select Nam From SprTov"
 
 IF .CURSORFILL() = .T.
   BROWSE
 ENDIF
ENDWITH

Когда форма запущена в единственном экземпляре, то все работает прекрасно. Но стоит только запустить такую же форму во втором экземпляре, то на второй форме тот же самый код не работает, хотя на первом экземпляре все продолжает работать. Но стоит только закрыть первый экземпляр формы, то на втором все начинает работать! Складывается такое впечатление что cursoradapter хочет работать только в единственном экземпляре, несмотря на то, что он добавлен в dataenvironment формы, у которой datasession=private! И если открыть другие формы, то cursoradapter на первой открытой форме как бы "мешает" нормальной работе cursoradapter остальных форм!

Я пробовал создавать cursoradapter через createobject и хранить ссылку в property-формы

THISFORM.osql = CREATEOBJECT("Cursoradapter")

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
WITH THISFORM.osql

 .DATASOURCE = gnConn
 .DATASOURCETYPE = "ODBC"
 .ALIAS = "mytov"
 .SELECTCMD = "Select Nam From SprTov"
 
 IF .CURSORFILL() = .T.
   BROWSE
 ENDIF
ENDWITH

В данном случае код тоже нормально работает в ПЕРВОЙ открытой форме, а если открывать другие формы с таким же кодом работы с cursoradapter то на них ничего не работает!
...
Рейтинг: 0 / 0
Cursoradapter
    #32772935
Kinetix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В дополнение:

Если при входе в программу сделать два коннекта
gnConn1 = SQLCONNECT ...
gnConn2 = SQLCONNECT ...

И в одной форме при работе с cursoradapter использовать gnConn1, а в другой форме использовать gnConn2, то все работает прекрасно на обоих формах одновременно. Т.е. получается что cursoradapter "захватывает" коннект и не дает другим экземплярам cursoradapter работать с коннектом ???
...
Рейтинг: 0 / 0
Cursoradapter
    #32774561
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Kinetix!

Попробуй использовать SQLCONNECT(gnConn) - как "источник данных" для
адаптера - всё-же в VFP8 существенно изменён механизм работы этих функций -
читай хелп на предмет того что есть коннект-хендл, а что - statement handle.
Учти, что к одному коннект-хендлу можно создать много стэйтмент-хендлов
(т.е. на сервере число коннекций не изменится).

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
Cursoradapter
    #32774603
Kinetix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Igor Korolyov
Hi Kinetix!

Попробуй использовать SQLCONNECT(gnConn) - как "источник данных" для
адаптера - всё-же в VFP8 существенно изменён механизм работы этих функций -
читай хелп на предмет того что есть коннект-хендл, а что - statement handle.
Учти, что к одному коннект-хендлу можно создать много стэйтмент-хендлов
(т.е. на сервере число коннекций не изменится).

Posted via ActualForum NNTP Server 1.1

Спасибо за совет Игорь. Я уже разобрался. Причина была банальной - в классе cursoradapter по умолчанию стоит FetchSize=100, а команда BROWSE отрабатывает сразу, как только после выполения CURSORFILL возвращается первые 100 записей. Таблица, с которой я работал, содержит около 20.000 записей, т.е. я, видя что BROWSE выполнился, переключался на другую форму и пытался запускать выборку, в которой использовался тот же самый хэндл соединения. Естественно, в предыдущей форме cursoradapter продолжал подкачивать данные по 100 записей, и следовательно connection was busy. Я исправил FetchSize на -1 и теперь BROWSE выполняется только после закачки всех данных с сервера.
...
Рейтинг: 0 / 0
Cursoradapter
    #32776444
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Kinetix!

Я опасаюсь что у тебя могут возникнуть проблемы при (последующей) попытке
обновления данных - т.е. когда скажем форма 1 снова захочет использовать эту
конекцию... Т.е. я не уверен - будет ли реально CA создавать отдельные
statement handle для каждого своего инстанса, или всё будет нормально и при
работе через один statement... Т.е. надо дальше пробовать... Ну а проверять
connect handle на предмет "Busy" никогда не повредит :)

P.S. Надеюсь ты в реальных условиях ограничишь выборки и не будешь тянуть по
20 000 записей на клиента?

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
Cursoradapter
    #32776518
Kinetix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Igor Korolyov
Hi Kinetix!

Я опасаюсь что у тебя могут возникнуть проблемы при (последующей) попытке
обновления данных - т.е. когда скажем форма 1 снова захочет использовать эту
конекцию... Т.е. я не уверен - будет ли реально CA создавать отдельные
statement handle для каждого своего инстанса, или всё будет нормально и при
работе через один statement... Т.е. надо дальше пробовать... Ну а проверять
connect handle на предмет "Busy" никогда не повредит :)

P.S. Надеюсь ты в реальных условиях ограничишь выборки и не будешь тянуть по
20 000 записей на клиента?

Posted via ActualForum NNTP Server 1.1

Я пересмотрел концепцию работы с ca после нескольких экспериментов, теперь я для каждого курсора в отдельной форме создаю в dataenvironment отдельный экземпляр cursoradapter через addobject. Конечно, 20000 записей на клиента я тянуть никогда не буду, я просто эксперементировал с этим классом.
...
Рейтинг: 0 / 0
Cursoradapter
    #32778595
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Kinetix!

Надеюсь они создаются "вовремя", т.е. до того как злые конторлы с формы
затребуют себе данные :) Или ты BindControls пользуешь?

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Cursoradapter
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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