On-line: гостей 2. Всего: 2 [подробнее..]
АвторСообщение
постоянный участник




Пост N: 7901
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 19.10.24 14:48. Заголовок: Tsbrowse и LetoDbf


В программе подсоединён драйвер LetoDbf
Создаю 2 базы в GetUserTempFolder() со списками каталогов и индексы к ним тоже.
Открываю 2 ТСБ в одном окне.
На одном окне делаю поиск FilterFTS() и прога ВЫЛЕТАЕТ без создания файла ошибок ErrorLog.htm
Было на экране окно с 2-мя ТСБ и НЕТ вообще программы.
Код простой для поиска:
 cFind := Alltrim(cStaticFind)   
? "+++++++",ProcNL(), oWnd:Name, oBrw:cAlias, cObj, "cFind=", cFind
IF ISOBJECT(oBrw)
?? "oBrw:FilterFTS("
oBrw:FilterFTS( cFind, .T. )
oBrw:Refresh()
oBrw:SetFocus()
ENDIF

Поставил отладку в h_tbrowse.prg
METHOD FilterFTS( cFind, lUpper, lBottom, lFocus, lAll ) CLASS TSBrowse 
....
? ProcNL(), ALIAS(), "cFind=", "["+cFind+"]"
IF ! Empty( cFind )
( cAlias )->( dbSetFilter( {|| ob:FilterFTS_Line( cFind, lUpper, lAll, ob ) }, ;
"ob:FilterFTS_Line( cFind, lUpper, lAll, ob)" ) )
ELSE
( cAlias )->( dbClearFilter() )
ENDIF
? ProcNL(), "2--" , cAlias, RDDName()
( cAlias )->( dbGoTop() ) // вылет примерно здесь ! Почему ?
? ProcNL(), "3--" <-— этого нет в логе
DO While !( cAlias )->( Eof() )
? ProcNL(), "DO While", Recno()
SysRefresh()
nLen++
( cAlias )->( dbSkip( 1 ) )
ENDDO

Делаю отладку в лог:
+++++++  >>> REFRESH_TSB(733) => 5Files_tsb.prg Form_Tsb0  LISTLETODBF GB_Find  cFind=  A  
C:\Users\Андрей\AppData\Local\Temp\MG_LetoDbf\ListLetoDbf.dbf oBrw:FilterFTS(
Called from: TSBROWSE:FILTERFTS(14039) --> h_tbrowse.prg LISTLETODBF cFind= [A]
Called from: TSBROWSE:FILTERFTS(14047) --> h_tbrowse.prg 2-- LISTLETODBF DBFCDX

Дальше вылет !!! Почему ?

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 8 [только новые]


постоянный участник




Пост N: 7902
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 19.10.24 15:14. Заголовок: Пробовал и так: DBS..


Пробовал и так:
 DBSELECTAREA(oBrw:cAlias)   
DbSetOrder(5)
oBrw:uLastTag := (oBrw:cAlias)->( OrdName(5) ) // без этого индекс слетает
cFind := Alltrim(cStaticFind)
? "+++++++",ProcNL(), oWnd:Name, oBrw:cAlias, cObj, "cFind=", cFind
? DBINFO( DBI_FULLPATH )
? myGetIndexUse()

IF ISOBJECT(oBrw)
?? "oBrw:FilterFTS("
oBrw:FilterFTS( cFind, .T. )
oBrw:Refresh()
oBrw:SetFocus()
ENDIF

Вот лог:
 
+++++++ >>> REFRESH_TSB(735) => 5Files_tsb.prg Form_Tsb0 LISTLETODBF GB_Find cFind= Ф
C:\Users\Андрей\AppData\Local\Temp\MG_LetoDbf\ListLetoDbf.dbf
Список открытых индексов / List of open indexes:
C:\Users\Андрей\AppData\Local\Temp\MG_LetoDbf\ListLetoDbf.dbf
Alias: LISTLETODBF
DbSetOrder(1) ATR_NAME - LEVEL + UPPER(FNAME)
DbSetOrder(2) SIZE - FSIZE
DbSetOrder(3) DATETIME - FDT
DbSetOrder(4) COMPARE - FCOMP
DbSetOrder(5) FNAME - UPPER(FNAME)
Current index: 5 - UPPER(FNAME)
oBrw:FilterFTS(
Called from: TSBROWSE:FILTERFTS(14039) --> h_tbrowse.prg LISTLETODBF cFind= [Ф]
Called from: TSBROWSE:FILTERFTS(14047) --> h_tbrowse.prg 2-- LISTLETODBF DBFCDX

Всё равно вылетает...

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4651
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 19.10.24 15:21. Заголовок: Andrey пишет Почему ..


Andrey пишет
 цитата:
Почему ?


Потому, что тсб объект у тебя на клиенте, а применить его методы ты хочешь на сервере. Уже говорил :FilterFTS() не будет так работать, сделай выборку dbf на клиента и на нем используй :FilterFTS() или исп. др. методы rdd, пробеги по dbf на сервере, составь список-массив RecNo(), потом ставь BM фильтр на него и работай по этим строкам

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7903
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 19.10.24 15:27. Заголовок: SergKis пишет: что ..


SergKis пишет:

 цитата:
что тсб объект у тебя на клиенте, а применить его методы ты хочешь на сервере.


База у меня на локальном компе - C:\Users\Андрей\AppData\Local\Temp\MG_LetoDbf\ListLetoDbf.dbf
Индексы тоже на локальном компе.
ТСБ строю тоже на локальном компе.
--------------
Создаю 2 базы в GetUserTempFolder() со списками каталогов и индексы к ним тоже.
Открываю 2 ТСБ в одном окне.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7919
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 07.11.24 23:17. Заголовок: МиниГуи Версия 24.11..


МиниГуи Версия 24.11
В ТСБ ставлю так:
   oBrw:aCheck := { LoadImage("bCheckT24"), LoadImage("bCheckF24") }  // заменяем колонку CHECKBOX на свои картинки

Нажимаем на чекбоксы в таблице:

После выхода из программы создаётся файл checkres.txt и там:
LetoDbf_Admin.exe -- BMP,1728386283,TSBROWSE:DRAWSELECT(4865)->TSBROWSE:DRAWSUPER(5020)->TSBROWSE:PAINT(11224)->TSBROWSE:DISPLAY(3503)->_ENDTBROWSE(624)->_TBROWSE(721)->USER_FORM(131)->(b)MAIN(136)->DO_WINDOWEVENTPROCEDURE(82)->TWNDDATA:DOEVENT(1441)->DO_ONWNDLAUNCH(668)->(b)INIT(127)->EVENTS(1179)->SENDMESSAGE(0)->(b)TWNDDATA(1274)->TWNDDATA:SENDMSG(0)->_WSEND(490)->(b)MAIN(128)->DO_WINDOWEVENTPROCEDURE(82)->TWNDDATA:DOEVENT(1441)->DO_ONWNDLAUNCH(668)->(b)INIT(127)->EVENTS(1179)->DOMESSAGELOOP(0)->_ACTIVATEWINDOW(1649)->MAIN(184)  
LetoDbf_Admin.exe -- BMP,1728386283,TSBROWSE:DRAWSELECT(4865)->TSBROWSE:DRAWSUPER(5020)->TSBROWSE:PAINT(11224)->TSBROWSE:DISPLAY(3503)->_ENDTBROWSE(624)->_TBROWSE(721)->USER_FORM(131)->(b)MAIN(136)->DO_WINDOWEVENTPROCEDURE(82)->TWNDDATA:DOEVENT(1441)->DO_ONWNDLAUNCH(668)->(b)INIT(127)->EVENTS(1179)->SENDMESSAGE(0)->(b)TWNDDATA(1274)->TWNDDATA:SENDMSG(0)->_WSEND(490)->(b)MAIN(128)->DO_WINDOWEVENTPROCEDURE(82)->TWNDDATA:DOEVENT(1441)->DO_ONWNDLAUNCH(668)->(b)INIT(127)->EVENTS(1179)->DOMESSAGELOOP(0)->_ACTIVATEWINDOW(1649)->MAIN(184)
LetoDbf_Admin.exe -- BMP,-1610279576,TSBROWSE:DRAWSELECT(4865)->TSBROWSE:DRAWSUPER(5020)->TSBROWSE:PAINT(11224)->TSBROWSE:DISPLAY(3503)->_ENDTBROWSE(624)->_TBROWSE(721)->USER_FORM(131)->(b)MAIN(136)->DO_WINDOWEVENTPROCEDURE(82)->TWNDDATA:DOEVENT(1441)->DO_ONWNDLAUNCH(668)->(b)INIT(127)->EVENTS(1179)->SENDMESSAGE(0)->(b)TWNDDATA(1274)->TWNDDATA:SENDMSG(0)->_WSEND(490)->(b)MAIN(128)->DO_WINDOWEVENTPROCEDURE(82)->TWNDDATA:DOEVENT(1441)->DO_ONWNDLAUNCH(668)->(b)INIT(127)->EVENTS(1179)->DOMESSAGELOOP(0)->_ACTIVATEWINDOW(1649)->MAIN(184)

Как исправить ?
Если убираю строку oBrw:aCheck := { LoadImage("bCheckT24"), LoadImage("bCheckF24") } , то файл checkres.txt НЕ СОЗДАЁТСЯ !

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1976
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 07.11.24 23:53. Заголовок: Andrey пишет: Как и..


Andrey пишет:

 цитата:
Как исправить ?

не пользоваться в этом месте LoadImage тк при каждой прорисовке строки будет создаваться новый хендл на картинку

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7927
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 19.11.24 18:14. Заголовок: Haz пишет: не польз..


Haz пишет:

 цитата:
не пользоваться в этом месте LoadImage тк при каждой прорисовке строки будет создаваться новый хендл на картинку


А как тогда делать ?
По коду в h_tbrowse.prg там есть удаление этих объектов.
         IF ValType( oCol:aCheck ) == "A" 
AEval( oCol:aCheck, {| hBmp | iif( Empty( hBmp ), , DeleteObject( hBmp ) ) } )
ENDIF


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1978
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 19.11.24 21:04. Заголовок: Andrey пишет: По ко..


Andrey пишет:
[quote]По коду в h_tbrowse.prg там есть удаление этих объектов.


Гадать трудно, ты не даешь полный текст что там с aCheck происходит
Определи hBmp заранее и создай aCheck := { hBmp1, hBmp2 }
У тебя похоже LoadImage выполняется при вызове DrawSelect вот и жрёт память. Причем checkres явно говорит о том , что жор связан с прорисовкой строки или заголовков
И на закуску : ты создаешь oBrw:aCheck, a чистятся oCol:aCheck мне кажется разница видна

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7928
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.11.24 11:05. Заголовок: Haz пишет: ты созда..


Haz пишет:

 цитата:
ты создаешь oBrw:aCheck, a чистятся oCol:aCheck мне кажется разница видна


Как было в примерах - так и делал, об этом и не задумывался.
В новых версиях появились логи утечек, так и озаботился.
Поставил на колонку - утечки ПРОПАЛИ !
СПАСИБО БОЛЬШОЕ !

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 64
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет