Показать сообщение отдельно
  #7  
Старый 05.03.2019, 21:35
Аватар для Guaho
Guaho Guaho вне форума
Новичок
 
Регистрация: 27.08.2017
Сообщения: 95
Версия Delphi: Delphi7
Репутация: 10
По умолчанию

Мне самому трудно поверить, что таки получилось сделать эту функцию, реализация которой ещё недавно казалась почти невозможной, а в итоге оказалась ещё проще, чем можно было представить.
В общем, попробовал я работать с компонентом TMemTable от EhLib. Компонент оказался ужасно глючным: создание полей даже в Disign-time часто приводило к крэшу (с потерей части ранее записанных данных), в итоге на простейшую операцию ушла куча времени. Кроме того, часть созданных строковых полей оказалась "прОклятой" - туда не удавалась записать более 20 символов, хотя длина поля была указана = 250, а пересоздание поля не помогало. Динамически создать поле в датасете можно было без проблем (руководствуясь кодом из примеров), только подключить его к гриду - ну никак (может, в реальности ни фига и не создавалось). Ну и наконец, оказалось, что поля типа "Float" этот датасет не знает, только Integer или Variant. Я попробовал второе, в итоге получил сортировку по числовым полям как по текстовым... Полная ерунда в общем!
И тут меня осенило: а чего я зацепился за этот компонент? А что если поля датасета создать статически? Ведь в практической работе, для этой специфики, число параметров одного компонента редко превышает 10, ну 15 - потолок. И вот я сделал 20 статических полей для параметров (с железным запасом, а если вдруг что не влезет - отображаться не будет) в стандартном DBQuery (точнее, ABSDBQuery). Все эти поля - типа Float. Процедура сортировки у меня своя, отработанная уже. Остальное оказалось делом техники - заполнение заголовков (и их хинтов) грида, заполнение данными и значениями параметров. В прикреплённом изображении - вид того, что получилось (включена сортировка по одному из столбцов параметров + виден хинт на заголовок одного из столбцов).
Изображения
Тип файла: jpg Без имени-2.jpg (72.9 Кбайт, 0 просмотров)
Ответить с цитированием