Как извлечь набор записей с определенным полем из таблицы данных в памяти Delphi

У меня есть таблица в памяти, которую я заполнил данными из файла нестандартного формата. Я хотел бы использовать это в качестве хранилища данных, не дублируя его в другом месте. Каждая запись имеет специальное поле тега, которое может быть 1..30. Я хотел бы создать до 30 виртуальных "таблиц", которые я могу предоставить DBGrid или DBChart, которые выглядят так, как будто каждая из них содержит соответствующий набор записей, соответствующий полю моего тега. Я новичок в работе с базами данных, но знаю много о Delphi, чтобы я мог создать решение и создать больше таблиц в памяти, используя простой итеративный процесс. Я бы предпочел что-то более масштабируемое. Я вижу, что есть оператор выбора SQL, но на быстрой скрипке (с использованием TQuery) я не мог понять, как это будет работать с таблицей в памяти (из DevExpress).

3 ответа

Решение
  1. Некоторые таблицы в памяти, такие как TClientDataSet, TkbmMemTable, TADMemTable, позволяют клонировать основную таблицу. Затем вы можете применить фильтр, порядок сортировки, диапазон клонированной копии. Таким образом, у вас может быть несколько виртуальных представлений, основанных на одном наборе записей. И каждое представление выглядит как вкладка SELECT * FROM WHERE ... ORDER BY ... Подробнее см. Справку по методу CloneCursor и свойствам Filter, Filtered, IndexFieldNames и т. Д.

  2. TQuery не может использовать таблицу в памяти в качестве источника данных. Есть немного (один?) Других продуктов, таких как xQuery, который позволяет выполнять SQL-запрос к порядковым потомкам TDataSet.

  3. Наконец, вы можете загрузить данные в некоторую встроенную БД, например, в SQLite или FB Embedded, а затем просто сделать запрос к этой базе данных.

Если ваш набор данных не отсортирован по определенному полю, то вам нужно посетить каждую запись, однако, если она отсортирована, вам нужно только найти первое несоответствие, которое больше значения, которое вы ищете.

Бесплатные компоненты AidAilm SQLMemTable (для личного использования): к ним относятся: SQLMemTable, SQLMemQuery и SQLMemDatabse.

Каждый компонент выступает в качестве своего "традиционного" аналога.

  1. Удалить TSQLMemDatabase; измените его свойство DatabaseName в соответствии с вашими потребностями.
  2. Добавьте компонент TSQLMemTable. измените его свойство TableName в соответствии с вашими потребностями. Добавьте несколько полей. Активировать стол; он будет автоматически добавлен в ваш компонент TSQLMemDatabase.

TSQLMemQuery связан с компонентом TSQLMemTable через TDataSource. Свойство tablename объекта TSQLMemTable используется для его идентификации в SQL-запросах TSQLMemQuery. Вы можете проверить онлайн документацию для всех возможных команд SQL.

Вот ссылка для получения дополнительной информации: http://www.aidaim.com/in-memory_sql_database_delphi.htm

Другие вопросы по тегам