Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Ehlib

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

Открыть новую тему     Написать ответ в эту тему

waik



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Слишком рукопашные варианты.
 
Бросаем на форму DBSumList, настраиваем что считать суммы, количества, среднее и т.д. по полям. В событие ОнРекалк вешаем фильтр на датасет, который оставляет только нужные записи. В AfterRecalc снимаем. Результат записываем в футер или куда нужно.  
 
Добавлено:
Упс.. не увидел предыдущего сообщения. Но смысла не меняет.  В гриде ставим External Recalc - true  и фильтровать не надо, если только группировки исключить.
 
Хотя  всё равно опоздал... Вопрос то закрыт.

Всего записей: 605 | Зарегистр. 15-01-2003 | Отправлено: 10:59 28-11-2014
landy



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Хуже то, что он не всегда находит записи. У него очень удобный встроенный поиск, но я уже давно замечал, что русские слова находит не всегда. А тест показал, что и числа, увы тоже. Это гораздо хуже, на мой взгляд, критическая ошибка

   XPerformer, в текущих седьмых версиях не смотрел, случайно - проблема с поиском решилась?
 

Всего записей: 576 | Зарегистр. 17-01-2003 | Отправлено: 16:50 03-12-2014
XPerformer



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
landy
пока не ставлю, думаю, сырая еще 7

Всего записей: 2536 | Зарегистр. 20-06-2011 | Отправлено: 18:42 03-12-2014
xpin2013



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Господа
Я хотел себе добавить панельку с поиском - есть сейчас такое свойство. Но проблема  в том что таблица моя не знает сколько там будет колонок. Если я предопределю колонки, то EhLib Engine всё сделает корректно. Но если я в дизайн тайме не определял колонок, то валится ошибка, что List колонок пуст. Я смотрел эту Engine, проще луну пожарить чем переписать. У меня тулза для просмотра моих баз данных. Я заранее не знаю какие поля есть в открываемой таблице. Но поиск слишком уж хочется - красивый он. Очень бы хотелось решения. Спасибо Господа.

Всего записей: 291 | Зарегистр. 16-01-2014 | Отправлено: 19:48 03-12-2014
landy



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
пока не ставлю, думаю, сырая еще 7

Судя по списку изменений её правильнее было бы назвать 6.3.186

Всего записей: 576 | Зарегистр. 17-01-2003 | Отправлено: 21:28 03-12-2014 | Исправлено: landy, 21:31 03-12-2014
landy



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Хотя, я полагаю, что смена мажорной версии связана с началом поддержки Lazarus.

Всего записей: 576 | Зарегистр. 17-01-2003 | Отправлено: 12:10 04-12-2014
rrromano



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Я хотел себе добавить панельку с поиском - есть сейчас такое свойство. Но проблема  в том что таблица моя не знает сколько там будет колонок. Если я предопределю колонки, то EhLib Engine всё сделает корректно. Но если я в дизайн тайме не определял колонок, то валится ошибка, что List колонок пуст. Я смотрел эту Engine, проще луну пожарить чем переписать. У меня тулза для просмотра моих баз данных. Я заранее не знаю какие поля есть в открываемой таблице. Но поиск слишком уж хочется - красивый он. Очень бы хотелось решения. Спасибо Господа.

В рантайме колонки же тоже можно определить, не так ли?

Всего записей: 283 | Зарегистр. 20-09-2006 | Отправлено: 18:55 01-01-2015
xpin2013



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
rrromano

Цитата:
В рантайме колонки же тоже можно определить, не так ли?

Ну да, пока это выход. Но может оказаться так, что с обновлением EhLib придётся оборачивать код директивами, а как цепляться к версиям EhLib, мне ещё не известно.

Всего записей: 291 | Зарегистр. 16-01-2014 | Отправлено: 19:49 01-01-2015
landy



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
а как цепляться к версиям EhLib, мне ещё не известно.

Переменные вида EH_LIB_x выставляются в EhLib.inc

Всего записей: 576 | Зарегистр. 17-01-2003 | Отправлено: 22:48 01-01-2015
xpin2013



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
landy

Цитата:
а как цепляться к версиям EhLib, мне ещё не известно.


Цитата:
Переменные вида EH_LIB_x выставляются в EhLib.inc

Похоже Вы недопоняли вопроса. Вот выдержка из EhLib.inc

Код:
{$IFDEF VER140}         { Borland Delphi 6.0 or CPP Builder 6.0}
  {$DEFINE EH_LIB_5}
  {$DEFINE EH_LIB_6}
{$ENDIF}

EH_LIB_6 - означает версию компилятора Delphi 6.0. Он не означает версию EhLib!!!
У меня сейчас стоит "EhLib 6.3 Build 6.3.181", там SearchPanel работает нормально, только баги с фильтрацией - я пытался на OnFiltered заменить датасет на фильтрованный, чтобы это сделать - надо хакнуть EhLib самому присваивать DBGridEh.FLastDataSet, а на это нет времени - слишком там заморочено. Фильтрацию SearchPanel я пока запретил.
 
 
ALL
Я нашёл реальный БАГ в EhLib 6.3 Build 6.3.181. Он проявляется только когда таблица в гридине пустая. Связываю таблицу с любым датасетом - для примера я взял FireDAC с драйвером FireBird. В гридине видна одна псевдострока для первой вставки. Выбираю поле NAME и тыкаю в него мышкой. - Открывается InplaceEdit для режима редактирования, но состояние датасета ещё не изменилось - он не перешел в режим вставки. До этого момента всё правильно. Теперь нажимаем букву G. Датасет переходит в режим dsInsert и InplaceEdit закрывается без вставленной буквы G. Такого раньше не было!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Если в датасете есть хоть одна запись, на новую запись мы попадаем либо стрелкой вниз в гридине либо плюсиком, но попадаем туда уже в режиме вставки.
 
 
Подробности бага.
Как мы будем ловить багу? Очень просто - ставим брейкпоинт на GridEh.pas внутрь метода TCustomGridEh.HideEdit. Теперь так же делаем G и смотрим стек отладки. По стеку мы видим что датасет шлёт событие что он datasetChanged из метода Insert, что вполне справедливо. Далее TCustomDBGridEh.InternalLayout пытается вызвать метод UpdateFilterEdit(True), что справедливо, но мы же не в режиме фильтрации? Далее вызывается метод TCustomDBGridEh.StopEditFilter, что подозрительно - мы же не в фильтрации... Однако он безапелляционно вызывает :
 

Код:
procedure TCustomDBGridEh.UpdateEditorMode;
begin
  if (dgAlwaysShowEditor in Options) and
     not FilterEditMode and
     not (csDestroying in ComponentState)
  then
    ShowEditor
  else
    HideEditor;
end;

 
В нашем случае dgAlwaysShowEditor не установлен, так как хоть он и работает, но не очень красиво. А так как он не установлен - любые другие условия не влияют и происходит HideEditor. Тут либо косяк в StopEditFilter - так как мы не в режиме фильтрации, либо косяк в UpdateEditorMode.  
 
 
Добавлено:
Хотя уже EhLib 7 вышла, но там тоже может быть эта бага. Проверьте плиз интересно...

Всего записей: 291 | Зарегистр. 16-01-2014 | Отправлено: 15:53 03-01-2015
landy



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Похоже Вы недопоняли вопроса. Вот выдержка из EhLib.inc  

Я вполне понял вопрос, однако, я логично полагал, что содержимое этого файла меняется в разных версиях EhLib, при этом для совместимости выставляются переменные и для прежних версий. Теперь при внимательном рассмотрении оказалось, что оно действительно дублирует версию компилятора. Непонятно только - в чем смысл такого решения?

Всего записей: 576 | Зарегистр. 17-01-2003 | Отправлено: 17:57 03-01-2015
xpin2013



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
landy

Цитата:
 Непонятно только - в чем смысл такого решения?  


Цитата:
{$IFDEF VER140}         { Borland Delphi 6.0 or CPP Builder 6.0}    
{$DEFINE EH_LIB_5}    
{$DEFINE EH_LIB_6}  
{$ENDIF}

Здесь говорится, что если компилятор Delphi6, то он поддерживает и компилятор Delphi5. А вот если бы компилятор был Delphi5, то директива для Delphi6 была бы не определена. По традиции компилятор определяет только одну директиву VERXXX - версия текущего компилятора, а о совместимости с предыдущими версиями, компилятор не знает. По этому, все библиотеки компонентов, которые я знаю, - определяют свои директивы типа COMPILER17_UP - означает - компилятор 17 или выше.

Всего записей: 291 | Зарегистр. 16-01-2014 | Отправлено: 23:19 03-01-2015
landy



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А переменная CompilerVersion, которую можно сравнивать на больше/меньше - не для этого разве?

Всего записей: 576 | Зарегистр. 17-01-2003 | Отправлено: 00:17 05-01-2015
xpin2013



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
landy

Цитата:
А переменная CompilerVersion, которую можно сравнивать на больше/меньше - не для этого разве?

1) Сравнение переменных директив появилось сравнительно недавно, то есть если вы хотите компилировать в Delphi6 и Delphi7 то эти условные директивы их компилятор не пропустит.
2) ver200 и ver210 мне не говорит, что это XE6 и XE7, трудно бывает все цыфры запомнить.
3) гораздо легче писать ifdef delphiXE6_up, чем везде втыкать условные выражения которые читаются гораздо хуже.
4) ну и просто уже сложилось так.
 

Цитата:
А переменная CompilerVersion, которую можно сравнивать на больше/меньше - не для этого разве?

Моё мнение - когда она появилась - это мёртвому припарка, спасибо конечно, но уже оно не надо.
 
Добавлено:
Скорее всего
Цитата:
CompilerVersion
для того чтобы скрывать от непросвящённых детали реализации - это не всем надо.

Всего записей: 291 | Зарегистр. 16-01-2014 | Отправлено: 07:16 05-01-2015
rrromano



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Ну да, пока это выход. Но может оказаться так, что с обновлением EhLib придётся оборачивать код директивами, а как цепляться к версиям EhLib, мне ещё не известно.

Мне кажется, директивы не понадобятся. Ибо все нужные методы наверняка будут неизменными от версии к версии.

Всего записей: 283 | Зарегистр. 20-09-2006 | Отправлено: 10:49 05-01-2015
xpin2013



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
rrromano

Цитата:
Мне кажется, директивы не понадобятся.

Пример. На D2010 у меня старый EhLib, на XE7 новый:

Код:
type
  TMyDBGridEhStyle = class(TDBGridEhStyle)
...
initialization
{$IFDEF COMPILER17_UP}
  SetDBGridEhDefaultStyle(TMyDBGridEhStyle.Create(nil)).Free;
  InplaceSearchTimeOut := 77;
{$ELSE}
  SetDBGridEhDefaultStyle(TMyDBGridEhStyle.Create).Free;
{$ENDIF}
end.

TDBGridEhStyle был TPersistent а стал TComponent.
 
Добавлено:
Да и на счёт дальнейшей поддержки Delphi7, даже EhLib-у я бы не советовал. Изучал сейчас класс TWideStringField от Delphi7, он просто не работает ни на Set ни на Get валуе. Если подробнее - он вызывает всегда DataConvert(NativeBuf, Buffer), но если посмотреть DataConvert - он стринги не обрабатывает, по этому NativeBuf никогда не конвертируется в Buffer. Так что даже если вы портируете конвертор Unicode в WideString в Delphi7, то поля TWideStringField Вам не помогут. Delphi7 DB это только Ansi, я бы уже отказался от любой поддержки Delphi7. Так что пора избавляться от лишних директив.

Всего записей: 291 | Зарегистр. 16-01-2014 | Отправлено: 11:56 05-01-2015
landy



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Delphi7 DB это только Ansi, я бы уже отказался от любой поддержки Delphi7. Так что пора избавляться от лишних директив

Рано еще отказываться, на 7 версии еще поддерживается огромное количество корпоративного софта.

Всего записей: 576 | Зарегистр. 17-01-2003 | Отправлено: 21:12 05-01-2015
xpin2013



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
landy

Цитата:
Рано еще отказываться, на 7 версии еще поддерживается огромное количество корпоративного софта.

Не рано. Если у них используются EhLib пусть даже текущей версии, вот пусть эти компоненты и используют. И пусть не думают об новых компонентах на "гнилом менеджере памяти". У Delphi7 старый менеджер памяти, он не понимает, что у компьютера 2 GB памяти - свободной оперативки 500мб, его просят выделить 3.5мб , вру, его просят выделить 350мб и если он даже выделит, то любых перераспределениях памяти выдаст OutOfMemory, хотя все версии Delphi, которые выше - делают это легко. Дело не в свободной оперативке, всё равно приложение работает с виртуальной памятью, которой гораздо больше. На данный момент Delphi7 самый не безопасный софт для целостности данных, при мягко сказать маленьких, на сегодняшний день объемах - 350мб. В 1997 году моя фотка в BMP со сканнера столько занимала. Ну решил юзер загрузить свою фотку не JPEG а BMP в базу? База стерпит, может просто откажет, а вот софт Delphi7 рухнет. Так что пока Вы провоцируете пользователей ничего не предпринимать и сидеть на рухляти так и будет. А вот BMPшки перегнать в JPEги - это дело программиста, и он может это сделать потом - когда заметит объёмы. Вперёд надо двигаться, сейчас уже пользователи вообще не понимают, что такое 350мб - чих.
 
Добавлено:
Блин, много букав

Цитата:
Рано еще отказываться, на 7 версии еще поддерживается огромное количество корпоративного софта.

Скажу больше. Про корпоративный софт на Delphi7 знаю не понаслышке. 2 года назад перевёл весь комплекс ПО на Delphi2010. Софт на Delphi7, как правило существует давно, он оброс очень сложными и запутанными техниками, мягко сказать "чуда программистов" техниками, которые работали один за другим на этом ПО. Такой софт как правило очень непредсказуем и пилить его приходится весьма осторожно. Он оброс миллионами мелких хотелок пользователей, а обижать их нельзя. Так представь - буду ли я думать об том, чтобы обновить например EhLib??? Ни за что и никогда! Мне в таком софте абсолютно не нужны новые компоненты. Бывают конечно безрассудные дровосеки, которые сидят на мине и мечтают о том чтобы произошли неожиданности - это их дело и их беда. Факт тот что большинству софта на Delphi7 плевать на новые компоненты....

Всего записей: 291 | Зарегистр. 16-01-2014 | Отправлено: 07:24 06-01-2015 | Исправлено: xpin2013, 07:41 06-01-2015
landy



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
у них используются EhLib пусть даже текущей версии, вот пусть эти компоненты и используют. И пусть не думают об новых компонентах на "гнилом менеджере памяти". У Delphi7 старый менеджер памяти

На семерку вполне нормально встает FastMM, ограничения по памяти диктуются только 32 бит платформой.
 
Обновление же версии грида -  проблема гораздо меньшая, чем перевод всего на ненужный данному проекту юникод.

Всего записей: 576 | Зарегистр. 17-01-2003 | Отправлено: 16:04 06-01-2015
xpin2013



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
landy

Цитата:
На семерку вполне нормально встает FastMM

То есть Вы из "благих" побуждений, безвозмездно и самостоятельно, будете всем клиентам нашей необъятной родины, тем которые на Delphi7, именно Вы будете им пропихивать и устанавливать FastMM? Я думаю многие из них даже не знают что это.
 

Цитата:
Обновление же версии грида -  проблема гораздо меньшая, чем

Это Вы поспорить хотите или знаете о чём говорите? Может Вы мне расскажете как подружить TdxGrid (DevExpress до cxGrid-ов) в гридемоде с FIBPlus? Так я Вам скажу - без знаний нескольких (больше пяти) протектных (в секции protected) методов обоих компонентов это у Вас не получится. Так что при переводе с Delphi7 на Delphi2010 проблем оказалось меньше с затачиванием имеющихся компонентов, а не переделыванием на новые.
 
Добавлено:
Кстати с удивлением обнаружил в Delphi 2005 TWideStringField так же не работает. Видимо "они" ещё тогда не проснулись от Delphi8 .NET. Так что между Delphi7 и Delphi2005 похоже нет разницы, кроме возможности дополнительно компилировать дотнет.

Всего записей: 291 | Зарегистр. 16-01-2014 | Отправлено: 17:02 06-01-2015
Открыть новую тему     Написать ответ в эту тему

Страницы: 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

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Ehlib


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru