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

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


person Brian Frost    schedule 02.03.2010    source источник


Ответы (3)


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

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

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

person da-soft    schedule 02.03.2010

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

person skamradt    schedule 02.03.2010

Бесплатные (для личного использования) компоненты SQLMemTable от AidAilm: к ним относятся: 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

person M0-3E    schedule 03.03.2010