我有一个内存表,其中填充了自定义格式文件中的数据。我想将其用作数据的存储库,而不会将其复制到其他地方。每条记录都有一个特殊的标签字段,可以是 1..30。我想创建最多 30 个可以提供给 DBGrid 或 DBChart 的虚拟“表”,它们看起来每个都包含与我的标记字段对应的相关记录集。我是数据库工作的新手,但对 Delphi 了解很多,所以我可以自己动手做一个解决方案,并使用简单的迭代过程创建更多的内存表。我宁愿有一些更具可扩展性的东西。我看到有一个 SQL 选择语句,但是在快速的小提琴(使用 TQuery)上,我看不出这将如何在内存表(来自 DevExpress)上工作。
3 回答
一些内存中的表,如 TClientDataSet、TkbmMemTable、TADMemTable 允许克隆主表。然后,您可以对克隆副本应用过滤器、排序顺序、范围。因此,您可能在同一组记录上构建了少数虚拟视图。每个视图看起来像一个 SELECT * FROM 选项卡 WHERE ... ORDER BY ... 有关详细信息,请查看方法 CloneCursor 和属性 Filter、Filtered、IndexFieldNames 等的帮助。
TQuery 不能使用内存表作为数据源。很少有(单个?)其他产品,例如 xQuery,它允许对有序 TDataSet 后代执行 SQL 查询。
最后,您可以将数据加载到一些嵌入式数据库中,例如 SQLite 或 FB Embedded,然后仅对该数据库进行查询。
如果您的数据集未按特定字段排序,则您必须访问每条记录,但是如果已排序,则只需找到大于您查找的值的第一个不匹配项。
AidAlm 的免费(供个人使用)SQLMemTable 组件:这些组件包括:SQLMemTable、SQLMemQuery 和 SQLMemDatabse。
每个组件都充当其“传统”对应物。
- 删除一个 TSQLMemDatabase;修改其 DatabaseName 属性以满足您的需要。
- 添加一个 TSQLMemTable 组件。修改其 TableName 属性以满足您的需要。添加一些字段。激活表;它将自动添加到您的 TSQLMemDatabase 组件中。
TSQLMemQuery 通过 TDataSource 链接到 TSQLMemTable 组件。TSQLMemTable 的 tablename 属性用于在 TSQLMemQuery SQL 查询中识别它。您可以查看在线文档以了解所有可能的 SQL 命令。
这是更多信息的链接:http ://www.aidaim.com/in-memory_sql_database_delphi.htm