Как извлечь набор записей с определенным полем из таблицы данных в памяти Delphi - PullRequest
1 голос
/ 02 марта 2010

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

Ответы [ 3 ]

5 голосов
/ 02 марта 2010
  1. Некоторые таблицы в памяти, такие как TClientDataSet, TkbmMemTable, TADMemTable позволяет клонировать основной стол. Тогда ты можешь применить фильтр, порядок сортировки, диапазон клонированной копии. Так что вы может иметь несколько виртуальных представлений опираться на тот же набор записей. И каждый вид выглядит как SELECT * ОТ вкладки ГДЕ ... ЗАКАЗАТЬ ПО ... Для Подробности уточняйте в справке по методу CloneCursor и свойства Filter, Отфильтрованные, IndexFieldNames и т. Д.

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

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

0 голосов
/ 04 марта 2010

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

0 голосов
/ 02 марта 2010

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

...