假设我有一个应用程序,它从服务器获取一个表示数据集的自定义XML数据包。然后,假设我希望通过dataset对该数据执行一条SQL语句。我可以用什么来做这件事?我不需要知道代码,但只需要知道使用什么来实现这一点,以及如何实现的一般解释。
例如,我可以从服务器获取XML格式的客户列表。然后,我可以使用任何第三方解析器将XML数据转储到某个客户端数据集中。然后,在该数据集上执行查询,例如select * from customers where ZipCode = '12345'
,而无需再次从服务器获取此数据。
XML不是唯一的限制,这只是一个例子。我可能想对从INI文件加载的一些应用程序设置执行相同的操作。无论哪种方式,概念都是数据的原始来源是未知的。
数据集是将其临时数据存储在内存中还是存储在磁盘上并不重要,但如果它能将其保存在磁盘中,那就太好了。
发布于 2013-04-28 01:04:20
TXQuery (http://code.google.com/p/txquery/)是一个组件,它提供了一个本地SQL引擎,用于对一个或多个TDataSets执行SQL查询。我遇到的唯一问题是通过连接多个表(TDataSets)的查询的TDBGrid更新数据-特别是更新哪个表。
AnyDac v6 (现在的FireDac)也有一个本地SQL引擎。http://www.da-soft.com/anydac/docu/frames.html?frmname=topic&frmfile=Local_SQL.html
编辑:对于您的问题中的示例SQL,因为它只涉及一个表,所以您只需对数据集进行筛选。例如
ADataSet.Filtered := False;
ADataSet.Filter := 'ZipCode=' + QuotedStr('12345');
ADataSet.Filtered := True;
发布于 2013-04-28 07:43:22
这样的功能可以使用本地数据库来完成。您只需将TDataSet
结果插入到本地内存(或基于文件)的独立数据库中,然后就可以对其使用常规的SQL查询,包括JOIN。
Delphi具有原生NexusDB数据库的优点,因此请坚持使用DB.pas TDataSet
范例。
另一种选择是使用所谓的Virtual Table mechanism of SQLite3,它允许向SQLite3引擎公开任何数据(甚至来自TDataSet、XML、JSON或内存中的对象),就像普通表一样。然后,您可以在这些“虚拟”表上运行SQL语句,包括连接。我们使用这个特性作为我们的mORMot ORM/SOA framework的数据库核心,这是非常强大的。
发布于 2013-04-27 22:48:29
由于数据表示的不同,您要执行的一般过程很复杂。SQL数据存储在由可区分记录组成的表中。XML是数据的结构化表示,但以树的形式而不是表/行的形式表示。
这些数据表单中的每一个都可以由为数据提供上下文的模式限定。
您有两个可遵循的一般路径:
SQL获取
这似乎比以下工作更多:
如果这两条路中的任何一条看起来可能是富有成效的,请让我知道。
https://stackoverflow.com/questions/16257469
复制相似问题