Глюки rxDBGrid

Модераторы: alexs, Модераторы

Re: Глюки rxDBGrid

Сообщение ssadragon » 16.05.2019 15:26:39

Приветствую!
Утечка памяти присутствует. Когда включена опция rdgAllowQuickSearch и соответственно делается поиск, при закрытии программы HeapTRC выдает такое (но это конечно не полный список, т.к. далее все в таком же виде):
Код: Выделить всё
Call trace for block $0687D168 size 16
  $00438F92  TLIST__CREATE,  line 618 of E:/Programming/FPC/trunk/source/rtl/objpas/classes/lists.inc
  $008A32CF  DATASETLOCATETHROUGH,  line 465 of ./rxdb/rxdbutils.pas
  $0089C3C7  TRXDBGRID__SETQUICKUTF8SEARCH,  line 5394 of ./rxdb/rxdbgrid.pas
  $0089C53C  TRXDBGRID__UTF8KEYPRESS,  line 5428 of ./rxdb/rxdbgrid.pas
  $004B6B83
  $006143FF
  $004B4B8A
  $00569107
  $005695CE
  $0056B8BB
  $0056D45A
  $75BE635B
  $75BD729C
  $75BD63DB
  $75BD61B0
  $0056E76D
Call trace for block $0686CA68 size 16
  $008A32CF  DATASETLOCATETHROUGH,  line 465 of ./rxdb/rxdbutils.pas
  $0089C3C7  TRXDBGRID__SETQUICKUTF8SEARCH,  line 5394 of ./rxdb/rxdbgrid.pas
  $0089C53C  TRXDBGRID__UTF8KEYPRESS,  line 5428 of ./rxdb/rxdbgrid.pas
  $004B6B83
  $006143FF
  $004B4B8A
  $00569107
  $005695CE
  $0056B8BB
  $0056D45A
  $75BE635B
  $75BD729C
  $75BD63DB
  $75BD61B0
  $0056E76D
  $0042C9E2
Call trace for block $06D39768 size 16
  $008A32FE  DATASETLOCATETHROUGH,  line 467 of ./rxdb/rxdbutils.pas
  $0089C3C7  TRXDBGRID__SETQUICKUTF8SEARCH,  line 5394 of ./rxdb/rxdbgrid.pas
  $0089C53C  TRXDBGRID__UTF8KEYPRESS,  line 5428 of ./rxdb/rxdbgrid.pas
  $004B6B83
  $006143FF
  $004B4B8A
  $00569107
  $005695CE
  $0056B8BB
  $0056D45A
  $75BE635B
  $75BD729C
  $75BD63DB
  $75BD61B0
  $0056E76D
  $0042C9E2
Call trace for block $06CF4868 size 16
  $00438F92  TLIST__CREATE,  line 618 of E:/Programming/FPC/trunk/source/rtl/objpas/classes/lists.inc
  $008A32CF  DATASETLOCATETHROUGH,  line 465 of ./rxdb/rxdbutils.pas
  $0089C3C7  TRXDBGRID__SETQUICKUTF8SEARCH,  line 5394 of ./rxdb/rxdbgrid.pas
  $0089C53C  TRXDBGRID__UTF8KEYPRESS,  line 5428 of ./rxdb/rxdbgrid.pas
  $004B6B83
  $006143FF
  $004B4B8A
  $00569107
  $005695CE
  $0056B8BB
  $0056D45A
  $75BE635B
  $75BD729C
  $75BD63DB
  $75BD61B0
  $0056E76D
Call trace for block $068686E8 size 16
  $008A32CF  DATASETLOCATETHROUGH,  line 465 of ./rxdb/rxdbutils.pas
  $0089C3C7  TRXDBGRID__SETQUICKUTF8SEARCH,  line 5394 of ./rxdb/rxdbgrid.pas
  $0089C53C  TRXDBGRID__UTF8KEYPRESS,  line 5428 of ./rxdb/rxdbgrid.pas
  $004B6B83
  $006143FF
  $004B4B8A
  $00569107
  $005695CE
  $0056B8BB
  $0056D45A
  $75BE635B
  $75BD729C
  $75BD63DB
  $75BD61B0
  $0056E76D
  $0042C9E2
Call trace for block $0687A868 size 16
  $008A32FE  DATASETLOCATETHROUGH,  line 467 of ./rxdb/rxdbutils.pas
  $0089C3C7  TRXDBGRID__SETQUICKUTF8SEARCH,  line 5394 of ./rxdb/rxdbgrid.pas
  $0089C53C  TRXDBGRID__UTF8KEYPRESS,  line 5428 of ./rxdb/rxdbgrid.pas
ssadragon
постоялец
 
Сообщения: 140
Зарегистрирован: 03.12.2012 20:21:35

Re: Глюки rxDBGrid

Сообщение alexs » 16.05.2019 16:43:23

Кажется нашёл
исправил в ревизии 6915.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 3770
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Глюки rxDBGrid

Сообщение ssadragon » 16.05.2019 20:56:05

alexs писал(а):Кажется нашёл
исправил в ревизии 6915.

Да вроде теперь нет утечек!
Нашел проблему в диалоге поиска :roll: (модуль rxdbgrid_findunit)
Проблема: обычно в базе есть поле ID, т.к. это поле я желаю показывать пользователю, но поиск соответственно по нему делать не желаю и для этого в настройках этой колонки ставлю coDisableDialogFind.
Вот получается что колонка ID имела итем 0, следующая колонка итем 1 и т.д. Соответственно эти колонки имели итемы в ComboBox на форме такие же.
НО когда мы убираем колонку ID из поиска то итемы в Гриде не меняются, а вот в ComboBox`e меняются, т.е. колонка с итем 1 в гриде стала в ComboBox с итемом 0.
В общем такая вот проблема
Воспроизвести можно в дэмке - rxnew\demos\RxMemDSFilter
Думаю проблема в строке 129 модуля rxdbgrid_findunit ( FieldName:=FGrid.Columns[ComboBox1.ItemIndex].FieldName; )
ssadragon
постоялец
 
Сообщения: 140
Зарегистрирован: 03.12.2012 20:21:35

Re: Глюки rxDBGrid

Сообщение alexs » 17.05.2019 09:42:48

ssadragon писал(а):роблема: обычно в базе есть поле ID, т.к. это поле я желаю показывать пользователю, но поиск соответственно по нему делать не желаю и для этого в настройках этой колонки ставлю coDisableDialogFind.

:-)
Я о таком не думал даже...
Спасибо за не стандартную ситуацию. Подумаю как решить.

Добавлено спустя 1 час 15 минут 1 секунду:
Проверяй
ревизия 6917.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 3770
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Глюки rxDBGrid

Сообщение ssadragon » 17.05.2019 11:30:23

alexs писал(а):Проверяй
ревизия 6917.

Хмм! Но ComboBox хранит не FieldName, а Columns[i].Title.Caption соответственно не работает :cry:
1.png
1.png (5.91 КБ) Просмотров: 63


И еще можно как то сделать чтобы галочка "Поиск по вхождению" была всегда включена, конечно же без переделки вашей формы, а с помощью настройки из Лазаруса(куда-нибудь в опцию затолкать может быть).

Мне кажется надо сделать добавление элемента в ComboBox через function AddObject(const S: string; AObject: TObject): Integer; где AObject будет содержать номер поля в таблице, соответственно когда нам нужен FieldName мы делаем также как и было только за место (Columns[ComboBox1.ItemIndex].FieldName;) ComboBox1.ItemIndex сделать вот так наверное ComboBox1.Items.Objects[ComboBox1.ItemIndex]
Хотя не претендую что так правильно и будет работать - не проверял

Ну в общем не смог сдержаться и написал сам через добавление объекта
Код: Выделить всё
@@ -129 +129 @@ begin
-      //FieldName:=FGrid.Columns[ComboBox1.ItemIndex].FieldName;
+      FieldName:=FGrid.Columns[Integer(ComboBox1.Items.Objects[ComboBox1.ItemIndex])].FieldName;
@@ -131 +131 @@ begin
-      FieldName:=ComboBox1.Text;
+      //FieldName:=ComboBox1.Text;
@@ -176 +176 @@ begin
-        ComboBox1.Items.Add(AGrid.Columns[i].Title.Caption);
+        ComboBox1.Items.AddObject(AGrid.Columns[i].Title.Caption, TObject(i));

Как-то так :)

Добавлено спустя 27 минут 22 секунды:
И еще вопрос до кучи:
А можно сделать при быстром поиске (rdgAllowQuickSearch) чтобы выводилось какие буквы вводишь, ну в общем как это сделано например в 1С
И да в этом быстром поиске есть тоже проблема: например что-то ищем - вводим - нашли - захотели что-то другое найти - начинаем вводить и ничего не происходит до тех пор пока фокус в гриде не сменишь на любую другую запись. (надеюсь понятно написал)
ssadragon
постоялец
 
Сообщения: 140
Зарегистрирован: 03.12.2012 20:21:35

Re: Глюки rxDBGrid

Сообщение alexs » 17.05.2019 14:55:54

1. Замечание принял. Там проще можно - через функцию FGrid.ColumnByCaption(ComboBox1.Text); - ревизия 6918
2. С отображением - надо подумать. Там надо делать дополнительную проверку при отрисовке и саму отрисовку немного корёжить.

Добавлено спустя 1 час 2 минуты 47 секунд:
С подсветкой что-то получилось
ревизия 6919
в свойство грида SearchOptions добавил фалга на включение подсветки поиска и цвет подсветки.
Жду замечаний.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 3770
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Глюки rxDBGrid

Сообщение ssadragon » 17.05.2019 21:57:35

alexs писал(а):С подсветкой что-то получилось
ревизия 6919
в свойство грида SearchOptions добавил фалга на включение подсветки поиска и цвет подсветки.
Жду замечаний.

Блин не могу проверить транк-версия Лазаруса сдохла, пишет "buffer error", попробовал отладить старой версией, падает на загрузке ресурса "MAINICON"
ssadragon
постоялец
 
Сообщения: 140
Зарегистрирован: 03.12.2012 20:21:35

Пред.

Вернуться в RxLib

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

Рейтинг@Mail.ru