powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / CursorAdapter (глюк с AllowSimultaneousFetch = .T.)
1 сообщений из 1, страница 1 из 1
CursorAdapter (глюк с AllowSimultaneousFetch = .T.)
    #38772011
miv32
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!
Словил очередной глюк от CA
VFP9 + MySql

Цитирую чьи-то рекомендации (нарыл где-то на форумах):

"Я так понимаю, что вы используете один ODBC statement handle для всех CursorAdapter-ов.
VFP последовательно вызывает для них CursorFill метод, который, как ему и положено,
должен выйти по ошибке если statement handle занят.
Если FetchSize=100 и результат содержит 100 или более записей, то CursorFill метод скачает первые 100 записей и остановится,
оставив statement handle в занятом состоянии. CursorFill для следующих CursorAdapter-ов выполниться не сможет.

Одно из решений проблемы - установить FetchSize=-1,
тогда CursorFill скачает все записи и освободит statement handle, но при больших выборках форма может открываться медленно.

Второе решение - оставить FetchSize=100, но использовать один ODBC connection handle с разными statement handles для всех CursorAdapter-ов.
Для этого нужно первый раз вызвать SQLCONNECT/SQLSTRINGCONNECT передав .T. в качестве последнего параметра.
Полученный nStatementHandle можно использовать для одного CursorAdapter-а, а для других получить новые, вызывая SQLCONNECT(nStatementHandle).
Так же нужно установить AllowSimultaneousFetch=.T. для всех CursorAdapter-ов.
Форма будет открываться быстро даже для очень больших выборок, но последующая подкачка записей будет немного медленнее, чем с AllowSimultaneousFetch=.F."

Теперь о наболевшем.
Это мои настройки, следуя рецепту из "Второе решение - "

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
LOCAL lcDSN

lcDSN="бла-бла-бла"
PUBLIC pnConnHandle 

pnConnHandle = SQLSTRINGCONNECT(lcDSN,.T.)

.................

*Где-то в форме
thisform.ocad = createobject('CursorAdapter')

lnConnection = SQLCONNECT(pnConnHandle)

if vartype(thisform.ocad)='O'

	with thisform.ocad
		.Alias              = 'qqqqqqqqqq'
		.DataSourceType     = 'ODBC'
		.DataSource         = lnConnection
		.SelectCmd          = 'Select personal_id,filial_id ,personal_name from personal'
		.Tables             = 'personal'
		.BufferModeOverride = 5
		.UpdateType = 2
		.UseCursorSchema = .T.
		.CursorSchema       = 'personal_id N(10),filial_id N(3),personal_name C(200)'
		.keyFieldList		= 'personal_id'
		.UpdatableFieldList = 'personal_id,filial_id,personal_name,'
		.UpdateNameList     = 'personal_id personal.personal_id,filial_id personal.filial_id,personal_name personal.personal_name'
		.usetransactions    = .f.
		.MapVarchar = .T.
		.MapBinary = .T.
		.AllowSimultaneousFetch = .T.
		.InsertCmdRefreshCmd = 'select last_insert_id()'
		.InsertCmdRefreshFieldList = 'personal_id'
		.FetchSize = 100
		.FetchAsNeeded = .t.
		.Cursorfill()
       



При .AllowSimultaneousFetch = .T.
просмотр полученного курсора дает какую-то ерунду.
Задвоенные строки, помимо значения столбца еще какие-то левые символы, мусор

При .AllowSimultaneousFetch = .F. все четко!

Только закончил воевать с .usetransactions из-за проблем с dll и опять, на тебе.
Версии моих библиотек.
VFP9RENU.DLL - 9.0.0.5815
vfp9r.dll - 9.0.0.7423
vfp9t.dll - 9.0.0.5815
msvcr71.dll - 7.10.3052.4
gdiplus.dll - 5.2.6001.22319

Возможно проблемы в них?
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / CursorAdapter (глюк с AllowSimultaneousFetch = .T.)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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