Глюки 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
постоялец
 
Сообщения: 148
Зарегистрирован: 03.12.2012 20:21:35

Re: Глюки rxDBGrid

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

Кажется нашёл
исправил в ревизии 6915.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4051
Зарегистрирован: 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
постоялец
 
Сообщения: 148
Зарегистрирован: 03.12.2012 20:21:35

Re: Глюки rxDBGrid

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

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

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

Добавлено спустя 1 час 15 минут 1 секунду:
Проверяй
ревизия 6917.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4051
Зарегистрирован: 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 КБ) Просмотров: 13106


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

Мне кажется надо сделать добавление элемента в 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
постоялец
 
Сообщения: 148
Зарегистрирован: 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
долгожитель
 
Сообщения: 4051
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Глюки rxDBGrid

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

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

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

Re: Глюки rxDBGrid

Сообщение alexs » 19.05.2019 16:11:07

https://bugs.freepascal.org/view.php?id=35576
откати FPC ранее чем r42042
Пока не поправили ещё
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4051
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Глюки rxDBGrid

Сообщение ssadragon » 20.05.2019 21:07:28

alexs писал(а):откати FPC ранее чем r42042
Пока не поправили ещё

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

Ну что сказать - прикольно. Маленько потестил, ошибок вроде не заметил!
ssadragon
постоялец
 
Сообщения: 148
Зарегистрирован: 03.12.2012 20:21:35

Re: Глюки rxDBGrid

Сообщение alexs » 21.05.2019 00:32:53

Я рад что мой труд пропал не даром :-)
Потенциально - могут быть проблемы с правосторонним написанием. Но я такое не протестю.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4051
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Глюки rxDBGrid

Сообщение dedrasta » 21.05.2019 17:32:35

Не уверен, что это в эту тему, но когда я просматривал демо к rxDbGrid, то обнаружил, что в демо RxDBGrid_ExportSpreadsheet в выходной таблице нет итогов по колонкам,
хотя в опциях ressExportFooter помечен и в формочке ExportParams чекбокс ExportColumnFooter также помечен.

Демо и компоненты брал из svn.code.sf.net\p\lazarus-ccr\svn\components\rx\trunk\ (Revision 6866)
dedrasta
незнакомец
 
Сообщения: 7
Зарегистрирован: 20.05.2019 14:26:04

Re: Глюки rxDBGrid

Сообщение alexs » 27.05.2019 10:28:46

Даные экспортируются. Но нашёл ошибку - перепутал формулы. Вместо максимума был минимум и наоборот.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4051
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Глюки rxDBGrid

Сообщение ssadragon » 28.05.2019 13:58:26

Приветствую!
В общем еще одна проблема вылезла, хотя раньше вроде не замечал.
В окне поиска если стоит РадиоБаттон на значении ВСЁ, то при нажатии на кнопку поиска как и ожидается строка с искомым находится, но если нажать еще раз на поиск, то больше ни чего не ищется. Так и будет топтаться на одном месте, хотя данные подходящие для поиска есть.
Код: Выделить всё
if SearchOrigin = rsdAll then
    begin
      Result := CompareRecord;
      if Result then
      begin
        Fields.Free;
        Exit;
      end;
    end;

Вот на этом коде и будет топтаться на месте при нажатии второй и последующий раз по кнопке ПОИСК
Т.е. не топтаться а выходить из функции и далее ни чего не ищется
ssadragon
постоялец
 
Сообщения: 148
Зарегистрирован: 03.12.2012 20:21:35

Re: Глюки rxDBGrid

Сообщение dedrasta » 28.05.2019 15:21:41

Даные экспортируются. Но нашёл ошибку - перепутал формулы. Вместо максимума был минимум и наоборот.


Сейчас глянул - с этим как раз порядок.
Но данные футера в выходной таблице появляются, если сбросить галку "Export footer formula" на форме параметров экспорта.
Для просмотра файла использую MS Excel
dedrasta
незнакомец
 
Сообщения: 7
Зарегистрирован: 20.05.2019 14:26:04

Re: Глюки rxDBGrid

Сообщение sign » 29.05.2019 07:19:18

ssadragon писал(а):но если нажать еще раз на поиск, то больше ни чего не ищется.

Скорей всего следующий поиск начинается с текущей строки, а она уже удовлетворяет искомому.
Я у себя повторный поиск всегда начинаю со следующей строки. (Cамописный поиск в VirtualTreeView).
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Пред.След.

Вернуться в RxLib

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

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

Рейтинг@Mail.ru