powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / CA-медленно обновляется - помогите советом
49 сообщений из 49, показаны все 2 страниц
CA-медленно обновляется - помогите советом
    #38149180
VIVA_CA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите пожалуйста! MySQL -> ODBC -> CA -> Forma -> Grid -- в 2 раза медленнее заполняется форма, чем просто через SQLEXEC(...,kursor)
При выполнении в среде VFP9 и при 'set tallk on' видно что сканирование(кол записей) происходит дважды прежде чем отоброзятся данные . Просмотрел всю цепочку загрузки - команд типа cout, summ, а тем более CA.CursorRefresh() не использую.
Грешил даже на ипользование CAl.alias='rrr' и CA.tables='ttt' - сделал их одинаковыми.
...
Рейтинг: 0 / 0
CA-медленно обновляется - помогите советом
    #38149401
Людмila
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А в два раза медленнее, это как - 15 и 30 сек или 0.015 и 0.030.
над своей строкой .SelectCMD чтобы найти самый оптимальный вариант прочитав уйму литературы проплюхалась с тестами НЕДЕЛЮ! в итоге, чтобы всё летало, даже пришлось доп.индекс к одной из таблиц прописывать.
А вот так просто, ничего не зная о стрктурах исходных таблиц и тем более о желаемом результате ничего дельного не присоветуешь. Кроме как поменять железо - будет в два раза быстрее.
Ну, может ГУРУ вот так неглядя решат проблему
...
Рейтинг: 0 / 0
CA-медленно обновляется - помогите советом
    #38149424
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛюдмilaКроме как поменять железо - будет в два раза быстрее.и то не факт :)
...
Рейтинг: 0 / 0
CA-медленно обновляется - помогите советом
    #38149438
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй поставить CA.FetchSize = -1
...
Рейтинг: 0 / 0
CA-медленно обновляется - помогите советом
    #38149461
VIVA_CA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
this.n_journal.UpdateType = 1
this.n_journal.whereType = 3
this.n_journal.FetchSize = -1
this.n_journal.FetchAsNeeded = .F.
select в обоих случаях одинаковый
...
Рейтинг: 0 / 0
CA-медленно обновляется - помогите советом
    #38149476
VIVA_CA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
время на 80тыс записях в 1вар -3сек а на 2вар- 6сек
...
Рейтинг: 0 / 0
CA-медленно обновляется - помогите советом
    #38149846
VIVA_CA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще!
param_zapT='from journal_param where LEFT(ksp,5)="'+LEFT(_ksp,5)+'"' && делаю подобие параметризованного курсора

this.CA.SelectCmd = 'select *' + param_zapT
...
Рейтинг: 0 / 0
CA-медленно обновляется - помогите советом
    #38149894
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VIVA_CAЕще!
param_zapT='from journal_param where LEFT(ksp,5)="'+LEFT(_ksp,5)+'"' && делаю подобие параметризованного курсора

Замени на это:
Код: sql
1.
param_zapT='from journal_param where ksp = LIKE "'+LEFT(_ksp,5)+'%"'


Тогда если у тебя есть индекс по ksp то сервер его задействует. если нет, то наверно есть смысл создать.

и вместо * лучше нужные поля перечислить если не все нужны.
...
Рейтинг: 0 / 0
CA-медленно обновляется - помогите советом
    #38149915
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Упс. Равно не стер, так правильно:
Код: sql
1.
param_zapT = textmerge([from journal_param where ksp LIKE '<<LEFT(_ksp,5)>>%'])


т.е. конечный запрос такой должен получиться
Код: sql
1.
select * from journal_param where ksp LIKE 'QWERT%'
...
Рейтинг: 0 / 0
CA-медленно обновляется - помогите советом
    #38150693
VIVA_CA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Благодарю DIMA T! Ваш вариант с
param_zapT = textmerge([from journal_param where ksp LIKE '<<LEFT(_ksp,5)>>%']) опробовал и индекс создал -
результат тот же.
Проблема осталась - двойной прогон курсора перед заполнением(отоброжением данных) в гриде - как бы после CA.cursorfill() выполняется CA.CursorRefresh() или какая то другая сомманда( count, index ...) - но ничего подобного не нахожу.
...
Рейтинг: 0 / 0
CA-медленно обновляется - помогите советом
    #38150820
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VIVA_CAБлагодарю DIMA T! Ваш вариант с
param_zapT = textmerge([from journal_param where ksp LIKE '<<LEFT(_ksp,5)>>%']) опробовал и индекс создал -
результат тот же.
Проблема осталась - двойной прогон курсора перед заполнением(отоброжением данных) в гриде - как бы после CA.cursorfill() выполняется CA.CursorRefresh() или какая то другая сомманда( count, index ...) - но ничего подобного не нахожу.
Двойной прогон это не должно было решить. Просто выборка должна быстрее происходить. За счет использования индекса.

возможно он сначала автоматом отрабатывает, а потом еще раз по cursorfill()
попробуй поставить
Код: sql
1.
CA.NoData = .T.



напиши поподробнее как у тебя все реализовано. Ты в коде CA создаешь или он в DE? Как _ksp появляется
...
Рейтинг: 0 / 0
CA-медленно обновляется - помогите советом
    #38151050
VIVA_CA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для построения всех СА использую созданный класс на базе стандартно построенного Builderom СА(моих дополнений нет).
CA в DE->BeforeOpenTables создаю и там же отрабатывает Cursorfill() (первый прогон) затем AfterCursorFill из класса (ничего криминального) затем возврат в BeforeOpenTables и при выходе из него -второй прогон и затем отоброжается грид.

public KSP - определяется при входе в программу из другой таблицы.
...
Рейтинг: 0 / 0
CA-медленно обновляется - помогите советом
    #38151296
Sea_Cat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
VIVA_CA,
Может это DE чудит, пытаясь переоткрыть курсор и вызывая посторное чтение ? Если нет завязок по RELATION с другими файлами в DE, то лучше вынести создание СА и вызов CURSORFILL в LOAD формы.
...
Рейтинг: 0 / 0
CA-медленно обновляется - помогите советом
    #38151685
VIVA_CA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может мы открыли Америку!?
Для чистоты эксперимента:
Отказался от своего сласса СА, напрямую создал this.NEWOBJECT('ca1', 'CursorAdapter') в Load Формы СА, ЗАРЕМАРКИРОВАЛ
все методы и свойства Формы и Грида - загружается в 2 раза быстрее.

Ремаркирую Load Формы - переношу его содержимое в DE - Двойной прогон остался т.е. и как следствие в 2 раза медленнее.
...
Рейтинг: 0 / 0
CA-медленно обновляется - помогите советом
    #38151689
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
CA.NoData = .T.


Пробовал это поставить? Грид пустой открывается?
...
Рейтинг: 0 / 0
CA-медленно обновляется - помогите советом
    #38152058
Людмila
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поневоле задаёшься мыслью - Неужели для работы с MySQL нужно проектировать классы, добавлять this.NEWOBJECT('ca1'
Судя по Вашим мытарствам Да!
Пока свежо впамяти поведаю: Тупо на форму с гридом изТулБоха мышкой перетащила DataEnvironment, затем в него из того же ТулБокса - CursorAdapter, слегка подправила сгенерированный программой код. Прописала
.SelectCmd="sele Tab1.*,.... left join ......join Group..where...
.UpdatableFieldList="Id.........................."
.UpdateNameList="Id........................."
.KeyFieldList=.....................
первоначально никаких After | Before
пристегнулась ремнями безопасности и
.CursorFill()
всё полетело не смотря на пару тяжелых таблиц-источников и мудрёный select (тестировала локально, затем по сети -без разницы)
Может и Вам стоит с этого начать и по ходу работы добавить "навороты"(Afterы и BeforЫ)
...
Рейтинг: 0 / 0
CA-медленно обновляется - помогите советом
    #38152066
Sea_Cat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
VIVA_CA,
Ничего сверхестественного.
Если в DE создать билдером СА, то в начале INIT-а у него будут такие стhоки:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
do case
	case not pemstatus(This, '__VFPSetup', 5)
		This.AddProperty('__VFPSetup', 0)
	case This.__VFPSetup = 2
		This.__VFPSetup = 0
		return
endcase

Только сейчас понял для чего они служат.
...
Рейтинг: 0 / 0
CA-медленно обновляется - помогите советом
    #38152072
Людмila
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А я до сих пор не поняла (да и незачем пока). Доверилась Фоксу.
Но для чистоты эксперимента по сетке в СА >> Grid вывела запрос
sele Tab1.* from Tab1 order by Fam where like(left(Fam,5)+'o*',Fam) && по-руски все записи у которых в Фамилии пятый символ "о"
примерно тоже что и у Вас
вернулся через 0.031 сек. по Fam cтоит индекс
...
Рейтинг: 0 / 0
CA-медленно обновляется - помогите советом
    #38152194
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Людмilawhere like(left(Fam,5)+'o*',Fam) && по-руски все записи у которых в Фамилии пятый символ "о"Для строк короче пяти символов смысл этого выражения будет немножко другим.
...
Рейтинг: 0 / 0
CA-медленно обновляется - помогите советом
    #38152413
VIVA_CA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо всем!
1 Dima T: только сейчас проверил с CA.NoData = .T. -> Грид пустой открывается.

2 Людмила : на форму с гридом изТулБоха мышкой перетащила DataEnvironment, затем в него из того же ТулБокса - CursorAdapter
Я не совсем понял эту технологию. Как организован ТулБох? Если можно подробнее!

3 Sea_Cat: да, вначале в моем слассе билдер создал в init
do case
case not pemstatus(This, '__VFPSetup', 5)
This.AddProperty('__VFPSetup', 0)
case This.__VFPSetup = 2
This.__VFPSetup = 0
return
endcase
я отказался и от этого - результат не изменился.
Поделитесь назначением этих строк
...
Рейтинг: 0 / 0
CA-медленно обновляется - помогите советом
    #38152725
Людмila
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. открываем Форму с Гридом
2. в меню Tools выбираем ToolBox
3. в разделе VFP Base Classes ToolBoxa ищем значек с названием - DataEnvironment, перетаскиваем его на форму
4. чуть повыше значек CursorAdapter его тащим на форму на значек DE
и ВсЁ
далее, как Вы там говорите - ЗАМАРКИРОВАЛ! ВСЕ СВОЙСТВА И МЕТОДЫ.(страшно даже)
...
Рейтинг: 0 / 0
CA-медленно обновляется - помогите советом
    #38152796
Людмila
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirЛюдмilawhere like(left(Fam,5)+'o*',Fam) && по-руски все записи у которых в Фамилии пятый символ "о"Для строк короче пяти символов смысл этого выражения будет немножко другим.

нормально так. КАким?!?
научите меня и VIVA_CA - он тоже что то подобное пытается извлеч.

а лучше подскажите как из табл со структурой
field 1 | f2 | f3 | f4 |
Иванов | 0 | 0 | 1 |
Петров | 0 | 1 | 0 |
Сидров | 1 | 0 | 0 |

сделать программно таблицу
Иванов | Петров | Cидров |
0 | 0 | 1
0 | 1 | 0
1 | 0 | 0
...
Рейтинг: 0 / 0
CA-медленно обновляется - помогите советом
    #38152862
Sea_Cat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
VIVA_CA,
DE почему-то дважды пытается инициализировать объект CA. Поэтому билдер и вставляет в начало INIT эти коды - они предотвращают его повторное выполнение.
Поэтому, лучше оставить в DE только то, что сделано автоматом, а все, что связано открытием файлов вручную и созданием своих объектов CA - выполнять в LOAD формы.
Тогда, по крайней мере, никто не вмешивается в управление этими объектами
...
Рейтинг: 0 / 0
CA-медленно обновляется - помогите советом
    #38152936
VIVA_CA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, Sea_Cat

Спасибо, Людмила - только не понятно что с этими значками на форме делать? Получается два DE на форме!?(я взял для эксперимента старую форму где в DE что-то было) и чем отличается Ваш вариант от если в DE по правой кнопке мышки add CursorAdapter
...
Рейтинг: 0 / 0
CA-медленно обновляется - помогите советом
    #38152952
VIVA_CA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уточняю: зачем "Тупо на форму с гридом изТулБоха мышкой перетащила DataEnvironment" если DE уже существует даже
на вновь созданной форме?
...
Рейтинг: 0 / 0
CA-медленно обновляется - помогите советом
    #38153052
Людмila
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня на вновь созданной форме DE отсутствует, скажу больше - На ней нет даже Labelов и Commandов тоже нет! и даже назвать себя она красиво не смогла (типа Габриэлла1) - скромненько Form1. По всей видимости у меня среда разработки FoxPro9 плохая. Всё приходится делать ручками и элементы добавлять и писать к ним код.
А так представте, создаёшь новуя форму и вот она - Габриэлла1 уже c DE, кнопками и надписями. И конечно, добавлять на неё второй DE уже извращение.
Может и правда я не в том Фоксе работаю?
...
Рейтинг: 0 / 0
CA-медленно обновляется - помогите советом
    #38153321
sg12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Людмila

Не совсем понятна ваша проблема.
Возможно это:

Посмотрите строку - Tools-Options-Forms-Form, там дожны быть ваша .vcx и в ней ваш класс.
Если строка пустая, то форма создается родная фоксовская.
Не забудьте сохранить Set As Default.
Или
Откройте форму как класс:
Tools-Class Browser-Open-Тип файлов-Form
Затем Правая кнопка-Redefine-найти свою .vcx и в ней свой класс.
...
Рейтинг: 0 / 0
CA-медленно обновляется - помогите советом
    #38153411
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Людмilaа лучше подскажите как из табл со структурой
field 1 | f2 | f3 | f4 |
Иванов | 0 | 0 | 1 |
Петров | 0 | 1 | 0 |
Сидров | 1 | 0 | 0 |

сделать программно таблицу
Иванов | Петров | Cидров |
0 | 0 | 1
0 | 1 | 0
1 | 0 | 0Типа так:
Код: 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.
CREATE CURSOR curData (f1 c(20), f2 n(1), f3 n(1), f4 n(1), f5 n(1), f6 n(1))
INSERT INTO curData VALUES ('Иванов', 0, 0, 0, 1, 0)
INSERT INTO curData VALUES ('Петров', 0, 0, 1, 0, 1)
INSERT INTO curData VALUES ('Сидоров', 1, 0, 0, 0, 0)

cFN='f1'

COPY TO ARRAY aTableF FIELDS &cFN
nRec=_TALLY
cFieldsNew=''
FOR i=1 TO nRec
 cFieldsNew=cFieldsNew+','+TRIM(aTableF(i,1))+' n(1)'
ENDFOR
cFieldsNew=SUBSTR(cFieldsNew,2)
CREATE CURSOR curNew ( &cFieldsNew )

SELECT curData
nFields=AFIELDS(aF,'curData')-1
DIMENSION aTableI(MAX(nFields,nRec),MAX(nFields,nRec))
COPY TO ARRAY aTableI FIELDS EXCEPT &cFN
FOR i=1 TO nRec
 FOR j=i+1 TO nFields
  vTemp=aTableI(i,j)
  aTableI(i,j)=aTableI(j,i)
  aTableI(j,i)=vTemp
 ENDFOR
ENDFOR

SELECT curNew
APPEND FROM ARRAY aTableI

USE IN curData
RELEASE ALL LIKE aTable*

Ну, можно ещё добавить контроль-приведение типов и размера полей, можно задавать и список полей для транспонирования, можно попробовать обойтись выделением памяти только под один массив размера nRec*nFields...
...
Рейтинг: 0 / 0
CA-медленно обновляется - помогите советом
    #38153485
Людмila
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sg12Людмila

Не совсем понятна ваша проблема.
Боже упаси! Никакая это не проблема. Пусть форма при создании будет пустая, а всё остальное добавим по мере необходимости.
К примеру в моём приложении 12-15 форм все они разительно отличаются друг от друга и только в двух из них использую DataEnvironment. Так нужен он мне по умолчанию при создании формы? конечно же Нет.
Честно говоря ещё пару месяцев назад имела смутные представления об этом элементе.

ОГромное СП AndreTM, чуть попозже попробую протестить на своих таблицах.
...
Рейтинг: 0 / 0
CA-медленно обновляется - помогите советом
    #38154433
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>>>where like(left(Fam,5)+'o*',Fam) && по-руски все записи у которых в Фамилии пятый символ "о"
>>Для строк короче пяти символов смысл этого выражения будет немножко другим.
>нормально так. КАким?!?
Пример:
Код: plaintext
1.
2.
3.
4.
fam='АБВ'
left(Fam,5)='АБВ'
left(Fam,5)+'o*'='АБВо*'
like(left(Fam,5)+'o*',Fam) == все записи у которых в Фамилии  четвёртый  символ "о"
Хм, кстати, для строк из 5+ символов:
Код: plaintext
1.
2.
3.
fam='АБВГДЕ'
left(Fam,5)='АБВГДЕ'
left(Fam,5)+'o*'='АБВГДо*'
like(left(Fam,5)+'o*',Fam) == все записи у которых в Фамилии  шестой  символ "о"
Будьте внимательней :)



Людмilaа лучше подскажите как из табл со структурой
field 1 | f2 | f3 | f4 |
Иванов | 0 | 0 | 1 |
Петров | 0 | 1 | 0 |
Сидров | 1 | 0 | 0 |

сделать программно таблицу
Иванов | Петров | Cидров |
0 | 0 | 1
0 | 1 | 0
1 | 0 | 0В поиск по "pivot".
...
Рейтинг: 0 / 0
CA-медленно обновляется - помогите советом
    #38154584
Людмila
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот это другое дело!
Спасибо за ликбез. проверила-перепроверила. Считала, что Left('ABC',5)+'o*' будет 'ABC o*'
ну а в переводе ошибочка вышла - трансляция снукера по Евроспорту началась,
а вот "PIVOT" для меня совершенно новое слово. опять же спасибо, поищу!

Помниться наш препод на лекции (шутя отвлекшись от темы) продемонстрировал как это делается SELECTom
развернул таблицу что все строки стали колонками, а колонки строками (умнейший был Дядька, но злоупотреблял)
и скорее всего я эту Фишку не записала - по третьему разу просматриваю старые лекции.
...
Рейтинг: 0 / 0
CA-медленно обновляется - помогите советом
    #38154602
Людмila
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И вот что сказал Гугл
"Пивот это инструмент, которым могут пользоваться как трейдеры торгующие во флете, так и те, которые торгуют на пробой. Первые используют пивот для определения точек разворота, вторые используют пивот, чтобы определить ключевые уровни для пробития цены".
что-то я не пойму каким боком мне ПИВОТ пристроить к моей задумке - по всей видимости это шутка!?

Сейчас я имею расписание приемов врачей DE>>CA-обновление по таймеру в формате
в р а ч | 13:00 | 13:45 | - заголовок
Иванова | зант| своб| ............- строка
Петрова | своб| зант| ............- строка

хотелось бы иметь возможность по клику переделать изображение на
Иванва | Петрва | - заголовок
13 : 00 | 13 : 00 | - строка
13 : 45 | 13 : 45 | - строка

возможно два грида один из которых Visible=.F.
но источник данных один и тот же
...
Рейтинг: 0 / 0
CA-медленно обновляется - помогите советом
    #38154641
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛюдмilaИ вот что сказал Гугл

pivot table надо искать

Тут в экселе
Тут на фоксе
Тут в MSSQL
...
Рейтинг: 0 / 0
CA-медленно обновляется - помогите советом
    #38154880
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В поставке VFP есть классы _xtab и pivottable , можно ими просто воспользоваться.

Я же считаю, что у вас проблема в том, что вы на основе одного отображения (которое "расписание") пытаетесь создать другое отображение, хотя надо просто создавать сразу оба отображения из одного источника.
...
Рейтинг: 0 / 0
CA-медленно обновляется - помогите советом
    #38154920
Людмila
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreTM, полностью с Вами согласна, безусловно из одного источника.
планирую разместить их в разных Гридах друг-за-другом один из которых Visible=.F.
По желанию пользователя можно будет переключиться на другой грид - поменяв Visible обоих.
...
Рейтинг: 0 / 0
CA-медленно обновляется - помогите советом
    #38154922
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Людмila,

Ну так изобразите структуру источника - и, думаю, нужную пару селектов вам сразу же покажут
...
Рейтинг: 0 / 0
CA-медленно обновляется - помогите советом
    #38154957
Людмila
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Думаю, что покажут.
Но, насколько меня хватит, буду делать сама.
В любом случае спасибо!
...
Рейтинг: 0 / 0
CA-медленно обновляется - помогите советом
    #38155490
VIVA_CA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемые, коллеги! Хочу вернуться к первоначальной теме.
Пытаюсь организовать асинхронный режим.
1 При -
** СА.MaxRecords = 100
СА.FetchSize = -1
СА .FetchAsNeeded = .F. естественно загружает все в Грид

2 При -
СА.MaxRecords = 100
СА.FetchSize = 100
СА .FetchAsNeeded = .Т. - Грид пустой

3 и только при -
СА.MaxRecords = 100
СА.FetchSize = -1 - !!!!
СА.FetchAsNeeded = .T. загружается первые 100 записей

????? почему СА.FetchSize = -1 и как в Гриде загрузить следующую порцию ???
...
Рейтинг: 0 / 0
CA-медленно обновляется - помогите советом
    #38155585
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FetchSize Property
HELP... If nValue is -1, Visual FoxPro retrieves the complete result set, which is limited by the value of the MaxRecords property.
т.е. MaxRecords и FetchAsNeeded работают когда FetchSize = -1

FetchAsNeeded = .T. это не асинхронный режим. Тут запрос полностью выполняется на сервере и сервер возвращает первые MaxRecords записей а остальные лежат на сервере и ждут пока их клиент заберет. Листая грид они докачиваются.
Как принудительно докачать я не знаю. Не пользуюсь FetchAsNeeded = .T., т.к. тут есть другой подвох - пока весь результат запроса не забран с сервера нельзя выполнить другой запрос через это соединение, ошибка происходит, что-то типа "connection busy".

ЗЫ Если подозреваешь что запрос по разному отрабатывает через CA и SQLexec() - включи трассировку ODBC и посмотри лог для каждого случая.
...
Рейтинг: 0 / 0
CA-медленно обновляется - помогите советом
    #38155739
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VIVA_CAвремя на 80тыс записях в 1вар -3сек а на 2вар- 6сек
Подумай, так ли нужны пользователю 80 тыс. записей? Смотреть в гриде устанет.
Может лучше интерфейс как-то переделать?

Я на всех запросах ставлю top. Например делаешь запрос
Код: sql
1.
select TOP 1000 ...


после проверяешь
Код: sql
1.
2.
3.
if reccount('...') = 1000
   MessageBox('В выборку попало слишком много записей. Показаны первые 1000. Задайте более точное условие выборки.')
endif



Потом размер записи можно уменьшить, выбирать только нужные поля а не все, т.е. вместо * перечислить нужные поля.
...
Рейтинг: 0 / 0
CA-медленно обновляется - помогите советом
    #38156164
VIVA_CA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подумай, так ли нужны пользователю 80 тыс. записей? Смотреть в гриде устанет.
Dima T естественно с Вами согласен, но случаи бывют разные.
В ранних топиках попадались статьи об успешной организации асинхронного режима на базе СА. Установив (повторяюсь)
СА.FetchSize = 100
СА .FetchAsNeeded = .Т.
хотелось бы повторить подвиг

включи трассировку ODBC и посмотри лог для каждого случая. - Если не затруднит - подробнее как это сделать
...
Рейтинг: 0 / 0
CA-медленно обновляется - помогите советом
    #38156300
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VIVA_CAВ ранних топиках попадались статьи об успешной организации асинхронного режима на базе СА.
Тут вроде как надо еще асинхронный режим соединения включить.
Код: sql
1.
SQLSETPROP(handle, 'Asynchronous', .T.)


Пробовал это для SQLEXEC() - работает, но скорость получения результата в разы ниже.

VIVA_CAвключи трассировку ODBC и посмотри лог для каждого случая. - Если не затруднит - подробнее как это сделать
Панель управления - ODBC - вкладка Трассировка
это в W7, в XP было в администрировании.
Пример на картинке. Задаешь лог и жмешь "Пуск трассировки".
...
Рейтинг: 0 / 0
CA-медленно обновляется - помогите советом
    #38156890
VIVA_CA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T благодарю! Когда что-то получится отпишусь. Текучка отвлекает.
...
Рейтинг: 0 / 0
CA-медленно обновляется - помогите советом
    #38157150
VIVA_CA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Включил трассировку
Включил SQLSETPROP(handle, 'Asynchronous', .T.)
На форме создал кнопку с такой командой:
lnResult = SQLEXEC(m.gn_Soed,'') т.е. так пытаюсь дернуть следующую порцию

проверяю в степе
lnResult = -1
И вот последние строки лога:
ошибка видна - но хотелось бы поточнее читать и понимать каждую строчку!

vfp9 868-f9c ENTER SQLSetStmtOption
HSTMT 0x00B6AB08
UWORD 9 <SQL_ROWSET_SIZE>
SQLPOINTER 1

vfp9 868-f9c EXIT SQLSetStmtOption with return code 0 (SQL_SUCCESS)
HSTMT 0x00B6AB08
UWORD 9 <SQL_ROWSET_SIZE>
SQLPOINTER 1

vfp9 868-f9c ENTER SQLExecDirect
HSTMT 0x00B6AB08
UCHAR * 0x01E0DEA8 [ -3] "\ 0"
SDWORD -3

vfp9 868-f9c EXIT SQLExecDirect with return code -1 (SQL_ERROR)
HSTMT 0x00B6AB08
UCHAR * 0x01E0DEA8 [ -3] "\ 0"
SDWORD -3

DIAG [S1000] [MySQL][ODBC 3.51 Driver][mysqld-5.1.48-community]Query was empty (1065)

vfp9 868-f9c ENTER SQLErrorW
HENV 0x00B6FF58
HDBC 0x00B6A828
HSTMT 0x00B6AB08
WCHAR * 0x0012DAC0
SDWORD * 0x0012DB08
WCHAR * 0x0012D6C0
SWORD 512
SWORD * 0x0012DB0C

vfp9 868-f9c EXIT SQLErrorW with return code 0 (SQL_SUCCESS)
HENV 0x00B6FF58
HDBC 0x00B6A828
HSTMT 0x00B6AB08
WCHAR * 0x0012DAC0 [ 5] "S1000"
SDWORD * 0x0012DB08 (1065)
WCHAR * 0x0012D6C0 [ 65] "[MySQL][ODBC 3.51 Driver][mysqld-5.1.48-community]Query was empty"
SWORD 512
SWORD * 0x0012DB0C (65)

vfp9 868-f9c ENTER SQLErrorW
HENV 0x00B6FF58
HDBC 0x00B6A828
HSTMT 0x00B6AB08
WCHAR * 0x0012DAC0
SDWORD * 0x0012DB08
WCHAR * 0x0012D6C0
SWORD 512
SWORD * 0x0012DB0C

vfp9 868-f9c EXIT SQLErrorW with return code 100 (SQL_NO_DATA_FOUND)
HENV 0x00B6FF58
HDBC 0x00B6A828
HSTMT 0x00B6AB08
WCHAR * 0x0012DAC0
SDWORD * 0x0012DB08
WCHAR * 0x0012D6C0
SWORD 512
SWORD * 0x0012DB0C

vfp9 868-f9c ENTER SQLCancel
HSTMT 0x00B6AB08

vfp9 868-f9c EXIT SQLCancel with return code 0 (SQL_SUCCESS)
HSTMT 0x00B6AB08

vfp9 868-f9c ENTER SQLCancel
HSTMT 0x00B6AB08

vfp9 868-f9c EXIT SQLCancel with return code 0 (SQL_SUCCESS)
HSTMT 0x00B6AB08
...
Рейтинг: 0 / 0
CA-медленно обновляется - помогите советом
    #38157225
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VIVA_CAQuery was emptyИщите, где у вас пустой запрос формируется... а впрочем, чего там искать, вот же он:
VIVA_CAlnResult = SQLEXEC(m.gn_Soed,'') т.е. так пытаюсь дернуть следующую порциюМожет, уберёте '' и проверите снова?
PS. Асинхронным режимом сам не пользовался, может, надо тот же запрос посылать, а не опускать его текст...
...
Рейтинг: 0 / 0
CA-медленно обновляется - помогите советом
    #38157251
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VIVA_CAИ вот последние строки лога:
ошибка видна - но хотелось бы поточнее читать и понимать каждую строчку!
ХЗ чего эти строчки означают. Какой-то внутренний протокол ODBC. Все что я там понимаю - это запросы посылаемые серверу "select ...". Видно что посылается и сколько раз.
Я тебе посмотреть предлагал в чем разница выполнения запроса разными способами.

VIVA_CAВключил SQLSETPROP(handle, 'Asynchronous', .T.)
На форме создал кнопку с такой командой:
lnResult = SQLEXEC(m.gn_Soed,'') т.е. так пытаюсь дернуть следующую порцию
Не уверен что это будет работать совместно с КА.
У асинхронного режима другая логика: отправляется запрос и периодически проверяется пришел ли ответ, в это время можно какой-то другой код выполнять.
В файле форма-тест. Я как-то разбирался с асинхронным режимом, но так и не нашел ему применения.
Задаешь строку подключения к серверу, пишешь запрос и нажимаешь кнопку "выполнить". Весь код прописан в таймере.

Как вариант после получения курсора прицепить его к КА через CursorAttach()
...
Рейтинг: 0 / 0
CA-медленно обновляется - помогите советом
    #38157598
VIVA_CA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
проверил --- AsyncSQL.zip - 2Kb) cкачать

select top 100 * from ttt MySQL не понимает а вот так select * from ttt limit 100 - работает, но дальше не двигается
...
Рейтинг: 0 / 0
CA-медленно обновляется - помогите советом
    #38157612
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VIVA_CAпроверил --- AsyncSQL.zip - 2Kb) cкачать

select top 100 * from ttt MySQL не понимает а вот так select * from ttt limit 100 - работает, но дальше не двигается
куда дальше? "limit 100" - первые 100 записей. все.
надо все - убери "limit 100".
у меня top 100 стояло чтоб сервер не насиловать пока пишу.
...
Рейтинг: 0 / 0
CA-медленно обновляется - помогите советом
    #38157825
VIVA_CA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тогда теряется понятие асинхронности
...
Рейтинг: 0 / 0
49 сообщений из 49, показаны все 2 страниц
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / CA-медленно обновляется - помогите советом
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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