我正在尝试使用带有 DBF/MDX 数据文件的 BDE 将 Delphi 应用程序迁移到使用本地数据文件的 DBExpress。
简单地用 TClientDataset 替换 TTable 组件会导致涉及索引属性的错误。
我用谷歌搜索了一下,我发现的只是 Bob 博士的一篇文章,没有提到索引,也没有演示如何使用排序方法。所有其他文章都是对 DBExpress 的一般描述,没有与我相关的细节。
是否有任何要遵循的步骤的教程/示例?
遗憾的是,TClientDataset 本地文件不能替代 BDE 作为本地数据库引擎。基本上,它们是内存数据集,能够将数据保存在磁盘上。但是它们缺少您可以在 BDE 中找到的许多功能。如果您的需求很小,它们可以工作(您可以在客户端数据集 TIndexDefs 属性中定义索引),但它们可能不是您所需要的。
此外,TClientDataset 不是与 dbExpress 相关的组件。它们实际上是与 MIDAS(后来重命名为 Datasnap)一起引入的,作为多层应用程序中远程数据集的客户端(因此得名)对应物(磁盘存储的能力允许断开连接的操作)。
dbExpress 是一个数据访问层,可以通过“驱动程序”与不同的数据库服务器一起工作,就像 ODBC/BDE/OLEDB 一样。决定在 dbExpress 中只包含单向数据集,重用现有 TClientDataset 的缓存/游标功能来提供双向游标和缓存。如果您仅使用 TClientDataset,则根本不使用 dbExpress,并且 TClientDataset 可以与实现所需接口(包括 BDE 接口)的任何数据集一起使用。
如果您正在寻找小型和免费引擎(MySQL 仅在您的应用程序是 GPL 时免费),您应该查看 SQLite、Firebird(如果您只需要本地访问,则有一个“嵌入式”版本)或 Postgres 等替代品,或者还有其他几种引擎可以从商业引擎的精简版本(即 SQL Server Express 和 Oracle Express)中获得,或者是相对便宜的引擎。
你找不到这样做的人是有原因的。这不仅仅是一个坏主意,它可能几乎是不可能的。
我想建议您放弃使用 ClientDataSet 的想法,因为它不会被认为是“您将需要的唯一数据库”,并考虑使用 IBObjects [商业!] 加上 Firebird [免费],或 dbExpress + Delphi 附带的受支持的 SQL Db 或 Interbase Express (IBX) 组件。
您会发现您需要一个完整的关系 SQL dbms,即使是非常小的或轻量级的,来替换 BDE 甚至是您可能已经习惯于使用 dBase、Access 或 Paradox 表的功能集。
在这种情况下,通常的教程完全适用于您的情况。