Delphi嵌入式数据库

8
我需要一个小巧/轻量级的数据库控件(可以作为单个PAS文件提供),直接集成到我的应用程序中。我需要在少量表格中存储相对较小的数据,并且希望快速访问某些列。我知道Delphi 7有很好的BDE,但我不想麻烦用户进行安装过程。
我使用Delphi 7。
编辑:
我想我问错了问题。所以,这就是我实际需要的:
如何将动态数据(未知数量的字段)存储到文件中?

请查看以下问题:https://dev59.com/mHVC5IYBdhLWcg3wpi98 - lkessler
嗨!我会用以下三点来缩小问题范围:1)你只需要一个存储引擎;2)由于你想要静态链接,所以许可证很重要;3)是否允许使用多个文件。个人建议使用TClientDataSet或ADO/Jet。 - Free Consulting
10个回答

9
NexusDB提供免费的嵌入式版本。这里有一个例子。请点击此处查看嵌入式版本,此处查看示例。

1
你认为它过度了吗?它完全编译进你的应用程序中,不需要任何外部依赖(而且它是模块化的,如果你例如不需要使用SQL,你就不需要将SQL支持编译进你的应用程序中),并且提供类似于BDE的功能,正如你在原始帖子中所说的,如果没有安装的需要,你会使用BDE。 - Thorsten Engler
@Engler。请看PhilW的帖子。目前我正在看TDBF。它非常小。它几乎不会增加应用程序大小,特别是编译时间!!! - Gabriel

8
如果你决定不再向应用程序添加任何依赖项,可以看看 TClientDataSet
我建议使用某种“嵌入式”数据库。例如:要将 Firebird 用作嵌入式数据库,最少只需要一个 DLL。您可以将该 DLL 放在安装程序中,这样用户就无需安装任何内容。

1
Sqlite是另一个选项(1个DLL也可以)。 - arthurprs
虽然我喜欢Nexus DB这个替代方案,但在我看来,TClientDataSet是最好的选择,更不用说它已经随着Delphi版本的更新被打包了这么久了。 - user497849

7
作为一种替代方案,您可以考虑使用免费的TDbf数据库。它可以直接编译到应用程序中,对于轻量级使用非常可靠。
此外,如果您记得当DBase是标准桌面数据库平台的时候,那么您可能已经知道如何使用它了。:-)
您可以在http://tdbf.sourceforge.net找到它。
(如果最近似乎没有太多活动,则是因为它已经存在10年并且非常稳定)。
只是一个想法。

谢谢。我真的很喜欢TDBF。我刚刚安装了它。我会试验一下它。我得看看它是否支持二进制字段。 - Gabriel
1
回复:无活动 - 那是因为dBase(以及它的所有分支)格式已经过时了。 - Free Consulting
嗨Worm,我看到了。可悲的是,最糟糕的部分是文档不存在。http://stackoverflow.com/questions/4920159/i-need-some-info-about-dbase-field-types - Gabriel
@Altar,至少年纪大意味着也非常有名 :-) - Free Consulting
测试 TDBF 非常稳定。但是如果您想将应用程序升级到 Delphi 的 Unicode 版本(谁知道您的成功未来会如何?),可能会遇到问题。 - Arnaud Bouchez

7
你可以尝试使用SQLite。它是一个出色的嵌入式数据库,快速可靠,而且价格无法抵挡(开源、公有领域)。有许多Delphi包装器可供选择,或者如果你想要轻量级解决方案,也可以直接使用该库。

1
+1 for SQLite。与大多数(可能是所有)其他关系型数据库相比,SQLite易于使用、灵活且超级快速。 - Marek Jedliński

4

两个开源解决方案(适用于 Delphi 6 至 XE):

  1. 一种ORM面向解决方案,可以使用SQLite或纯Delphi存储数据。它可以作为独立的应用程序或客户端/服务器模式。

  2. 一种非常快速的纯Delphi NoSQL表格存储引擎(Synopse Big Table)。示例基准测试能够在800毫秒内存储带有一个整数和一个文本字段的100万条记录(具有自动索引创建功能)。您可以创建自己的表列,然后通过Late-Binding访问字段内容。


+1 我还没有时间测试这个表格,但我100%确定它像所有synopse产品一样写得很好且可靠。干杯!A. - user497849

3
如果有一些预算可以使用,可以尝试使用 AnyDAC。它提供了本地和嵌入式 SQLite 访问,因此您甚至不需要安装外部 DLL。请参考:AnyDAC

UniDac更好,http://www.devart.com/unidac/,但这是我的个人意见… - user497849
真的吗?我很想听更多关于它的信息。我正在使用AnyDAC,感觉很不错,但我对UniDAC并不了解。 - Leonardo Herrera
1
什么?我对UniDac有过不好的经历。比较一下AnyDAC和UniDac的SQLite驱动程序 - AnyDAC是无与伦比的。静态链接、加密、他们的服务组件、文档。 - oodesigner

1

我已经尝试过以下轻量级的方案:

  • NexusDB - 商业软件,对于我的需求来说太大了,增加了很多开销
  • DISQLite - 功能强大,但使用起来比较困难
  • kbmMemTable - 商业软件,未为试用用户提供文档(除非你先购买文档,这违背了试用概念的目的)
  • TDBF - 免费但不再维护,而且完全缺乏文档
  • Synopse BigTable - 看起来是我需要的解决方案。它只包含2个PAS文件。

在某些情况下,自定义系统可能比通用系统更适合。因此,针对我的需求,我将定制自己的系统。因为我知道数据的大小/类型,所以我可以创建完全适合我的数据的字段。这样做可以使数据库更小、更快(而且是免费的)。 :)

解决方案:如何将动态数据(未知数量的字段)存储到文件中?


1

自从2003年发布以来,该代码并未得到积极维护。 - Thorsten Engler
1
@Thorsen:我知道,但是我猜它对于Delphi 7来说也可以吧? - Jørn E. Angeltveit
1
上一个发布版本的FlashFiler中有许多错误,据我所知自从它成为开源项目以来就没有对FF进行任何工作。此外,它还存在一些基本的设计问题。这就是我从头开始开发NexusDB作为FlashFiler的精神继承者的原因之一。我可能不太客观 ;) 但在我看来,考虑到提问者的要求,NexusDB的免费嵌入式版本比FlashFiler更好。 - Thorsten Engler
@Thorsten(这次两个t...:),我不熟悉NexusDB,但我知道你在这个项目上做得很好。赞!我毫不怀疑NexusDB比FF更好,我只是想让OP知道这个项目。 - Jørn E. Angeltveit

0

kbmMemTable真的很糟糕。它无法试用,因为除非您单独付费,否则此商业组件的帮助文件是不可用的。因此,没有手册=没有试用机会。 - Gabriel

-2

虽然手册是需要付费的,但该组件实际上是可免费获得的,其中包括一个非常完整的演示应用程序,展示了许多功能。此外,互联网上有大量关于如何使用它的信息。

请使用www.codenewsfast.com或google.com进行搜索。

最好的祝愿, Kim Madsen kbm@components4developers.com


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接