为什么是现在
如今维护 Delphi 的 Embarcadero 已弃用 Borland Database Engine。其文档写明 BDE 不会再改进、永远不会支持 Unicode、不应用于新开发,并建议改用 FireDAC。然而大多数老 Delphi 程序仍通过它读写 Paradox 或 dBase 表。
BDE 是为 32 位 Windows 和局域网文件共享设计的。共享盘上的 Paradox 表依赖锁文件和每台电脑上必须完全一致的 BDE 设置,只要有一台机器设置错误,表和索引就可能损坏。每添一台新电脑、每升级一次 Windows,都意味着又要手动安装配置一遍。
- Windows 10微软停止支持
迁移内容
程序本身,以及它所依赖的数据文件,无论现状如何。
窗体和数据感知控件
.dfm 文件中的窗体,包括
TDBGrid、TDBEdit、TDBLookupComboBox以及主从布局。它们会变成字段和操作顺序都相同的网页。Paradox、dBase 和 InterBase 数据
通过 BDE 读取的表,或 InterBase、Firebird、SQL Server、Oracle 等数据库。我们把数据迁到 SQL Server 或 MySQL,保留主键、索引和关系。
数据模块和业务逻辑
TDataModule单元中的代码,BeforePost、OnCalcFields等数据集事件中的代码,以及计算字段和查阅字段。我们把这些规则集中到服务器端的服务中。报表
QuickReport、ReportBuilder、Rave Reports 或 FastReport 报表,包括事件中带代码的报表。它们会变成内容相同的 PDF 文档。
第三方组件
来自 DevExpress、TMS、InfoPower 或 RxLib 等组件包的表格、编辑器和工具,往往只适用于某一个 Delphi 版本。我们会核实程序实际用到了其中哪些功能。
导入、导出和计划任务
与其他系统交换的文本和 CSV 文件、给会计的导出文件,以及由 Windows 任务计划程序启动的程序。它们会变成服务器上的计划任务。
网页版的样子
- 仪表板
- 商品1,284
- 出入库记录
- 供应商
- 报表
| H07V-K 电线 1.5 mm²,蓝色EL-10215 · A-03-2 | 1,850 m | |
| 断路器 C16 1P+NEL-20431 · B-01-4 | 46 件 | 低于下限 |
| 接线盒 100×100EL-30112 · B-02-1 | 312 件 | |
| LED 面板灯 60×60,36 WEL-40877 · C-05-3 | 18 件 | 低于下限 |
| 漏电保护器 40 A 30 mAEL-20455 · B-01-5 | 27 件 | |
| 电线管 20 mm,灰色EL-50310 · A-07-1 | 940 m | |
| 插座 16 AEL-60204 · B-03-2 | 9 件 | 低于下限 |
| 编码 | 名称 | 库位 | 库存 | 下限 | 单位 |
|---|---|---|---|---|---|
| EL-10215 | H07V-K 电线 1.5 mm²,蓝色 | A-03-2 | 1,850 | 500 | m |
| EL-20431 | 断路器 C16 1P+N | B-01-4 | 46 | 60 | 件 |
| EL-30112 | 接线盒 100×100 | B-02-1 | 312 | 100 | 件 |
| EL-40877 | LED 面板灯 60×60,36 W | C-05-3 | 18 | 24 | 件 |
| EL-20455 | 漏电保护器 40 A 30 mA | B-01-5 | 27 | 20 | 件 |
| EL-50310 | 电线管 20 mm,灰色 | A-07-1 | 940 | 300 | m |
| EL-60204 | 插座 16 A | B-03-2 | 9 | 40 | 件 |
库存程序在 Windows XP 下的 Delphi 中可能的样子,以及同样数据在网页应用中的样子。
拖动滑块,或使用键盘方向键。
各部分迁移后的去向
- 在 Delphi 中:窗体(.dfm)和单元(.pas)
- 在网页应用中:网页,逻辑放在服务器上
- 在 Delphi 中:通过 BDE 访问的 Paradox 或 dBase 表
- 在网页应用中:SQL Server 或 MySQL,保留主键和关系
- 在 Delphi 中:计算字段和查阅字段
- 在网页应用中:在数据库或服务中完成的计算和连接
- 在 Delphi 中:每台电脑上的 BDE 别名和设置
- 在网页应用中:在服务器上配置的一个连接
- 在 Delphi 中:QuickReport 或 FastReport 报表
- 在网页应用中:由服务器生成的 PDF 文档
- 在 Delphi 中:所有用户共用的网络驱动器
- 在网页应用中:由数据库管理的并发访问
迁移流程
48 小时内完成评估
请发给我们程序及其数据文件夹(Paradox 或 dBase 文件,或数据库备份),如有源代码(.dpr、.pas、.dfm)也请一并提供。我们会在 48 小时内回复一份书面报告:程序目前的功能、风险所在、网页版的结构设想、试点模块的固定价格以及其余部分的估价。评估免费,不附带任何义务。
试点模块
我们先在您真实数据的副本上构建应用的一部分,通常是使用最多的部分。在决定其余部分之前,员工可以在日常工作中实际使用。
同样的数据,同样的结果
我们让同一批记录分别经过 Delphi 程序和新应用,比对库存、合计和打印出的单据。我们发现的每条业务规则还会写成自动化测试,此后每次发布新版本前都会重新运行。您会收到列明每项核对结果的报告。
30 天并行运行
完整应用就绪后,Delphi 程序会与之并行使用 30 天。任何差异都会在旧程序仍在时暴露出来,我们在约定价格内修正。
常见陷阱及应对方法
BDE 和 Paradox 的工作方式
Paradox 表依赖锁文件、网络上共享的控制文件(
PDOXUSRS.NET)以及每台电脑上必须一致的 BDE 设置(如LOCAL SHARE)。索引损坏和“Table is busy”错误十分常见。迁移前,我们会修复可修复的部分,并报告无法读取的记录。字符编码
BDE 按表的语言驱动所设定的代码页存储文本,而 Delphi 2009 及以后版本使用 Unicode 字符串。带重音的字母和特殊符号正是迁移最常出错的地方,因此我们会检查每张表的编码,并与您一起比对转换后的文本样本。
藏在数据集事件中的逻辑
写在
BeforePost、OnValidate或OnCalcFields中的规则,会在每次保存或显示记录时悄然执行,只看窗体很容易漏掉。我们会在代码中找出每个事件处理程序,并列出它们执行的规则。计算字段和查阅字段
有些字段只存在于程序中,表里并没有,却像存储的数据一样出现在界面和报表上。我们把它们重建为计算值,并与原结果核对。
没有源代码的组件
有些第三方组件包当年是以针对某个 Delphi 版本编译好的单元形式购买的。如果程序依赖其中某个组件进行计算而不只是显示,我们会根据结果还原它的行为,并让两个程序处理同一批数据来加以确认。
日期和数字格式
Paradox 和 dBase 的日期字段、多年前以两位数输入的年份,以及取决于 Windows 区域设置的小数分隔符,在数据迁入 SQL 数据库时都需要明确处理。我们会列出导入过程中发现的异常,并与您一起解决。
价格和付款
评估
免费
书面报告,48 小时内
试点模块
€1,000–1,500
通常;开工时付 50%,验收时付 50%
付款条件
启动时支付 50%,验收时支付 50%。尾款须在上线和交付源代码之前付清。较大的项目按约定阶段分期付款。
评估免费。如果决定不继续,报告归您所有,无需支付任何费用。
价格固定,并在开工前以书面形式确定。如果工作内容发生变化,我们会发送新的书面报价,经您确认后才进行额外工作。
对于完整迁移,我们的目标是比一般软件公司的报价低 40% 到 60%。我们能做到,是因为我们是一家小型工作室,没有写字楼租金,也没有销售团队。
价格不含增值税。
一次真实的迁移,由测试验证
Northwind 是微软随 Access 附带的示例数据库,并不是我们的客户。我们把一份公开副本迁移到 SQLite 和 PostgreSQL,通过自动化测试将每张表、每个查询与原始数据逐一比较,并在此基础上构建了一个可运行的网页应用。案例研究给出了具体数字,等效性报告列出了每一项核对。
Northwind 是一个 Access 数据库,但对于 Delphi,我们采用同样的方法:迁移,用同样的数据将结果与原始程序比较,并让新旧程序并行运行。

常见问题
我们的 Delphi 程序使用网络盘上的 Paradox 表,数据能迁移吗?
能。我们直接读取 Paradox 或 dBase 文件,转换到 SQL Server 或 MySQL,并在迁移前后比对记录数和合计。损坏的记录会报告给您,不会被悄悄丢弃。
能不能直接升级到新版 Delphi?
可以,对有些程序这也是更合理的做法:应用仍是 Windows 程序,用 FireDAC 替换 BDE,并更新代码。如果需要在任何浏览器中使用、每台电脑都无需安装,网页应用更合适。两种方案都可行时,评估报告会加以比较。
我们没有源代码,有问题吗?
不一定。我们可以从正在使用的程序、数据文件以及操作录屏入手。有源代码时评估会更精确;信息不足的地方,我们会明确指出。
你们支持哪些 Delphi 版本?
从上世纪 90 年代早期的 Borland 版本到当前的 Embarcadero 版本,用任何版本编写的程序都可以。版本主要影响字符串处理和可用组件,我们会在评估中注明。
网页应用能继续使用我们的 Firebird 或 InterBase 数据库吗?
能,前提是还有其他程序依赖它。这时网页应用连接同一个数据库,更换数据库可以以后再做,也可以不做。
30 天并行运行期间会发生什么?
员工在新应用中工作的同时,Delphi 程序仍可随时使用,方便他们用实际业务核对结果。这期间发现的任何差异,都在约定价格内修正。
联系我们
请选择您方便的联系方式。我们会在一个工作日内用中文通过电子邮件回复您。
把文件发给我们
如果程序是用 Access、Excel、VB6、Delphi 或早期 .NET 开发的,您在发送文件后 48 小时内即可收到一份免费的书面评估。
- 复制一份文件,如您愿意,可使用测试数据。
- 把它附在表单或邮件中,最好放进有密码保护的压缩包,并另行发送密码。如有需要,我们会先签署保密协议。
- 48 小时内:收到评估报告和试点模块的固定价格。
我们在意大利办公。