1

我知道并且听说在 Delphi (XE2) 中有很多方法可以连接到数据库服务器:套接字、datasnap、webservices、远程数据模块 (¿?)、dbExpress 和其他第三方,如 UniDAC。我通常使用 UniDAC,但我想知道何时以及如何正确使用它们。显然 DataSnap 是 Delphi 的旗舰。我还没有找到有用的教程来回答这些问题。那么对于 Win32 应用程序,在开发客户端应用程序时,考虑到安全性、灵活性和可扩展性,推荐选择哪种方式?

有没有办法让客户端 Win32 应用程序对数据库访问的更改透明?也就是说,如果我分发了 100 个客户端应用程序并且我想更改数据库访问的密码,那么必须更新每个客户端应用程序将是一个问题。

是否建议为客户端应用程序建立与数据库的唯一连接?

我尝试测试 DBExpress(与 Delphi XE2 捆绑)和 AnyDAC 以连接到我的远程 MySQL 数据库,但 VendorLibs 出现问题。有没有一种方便的方法来解决这个问题,而不必安装我想测试的每个 RDBMS?

DBExpress 是免费的还是我必须为更多功能付费?

任何人都可以推荐非常好的书籍来学习 DataSnap、中间件应用程序等?

提前致谢。

4

2 回答 2

1

如果您有多个分布式客户端,您可能希望使用多层解决方案(如 DataSnap 或 DataAbstract),其中在服务器端运行单个持久数据连接,每个客户端只需连接到该服务器应用程序即可请求数据。

DataSnap 提供多种不同的客户端/服务器连接解决方​​案:Socketed、REST 等,因此您可以自行决定哪种方式最适合您的系统。

DataAbstract 似乎是市场上最流行的多层数据应用程序解决方案之一(如果不是的话),我碰巧知道许多开发人员出于各种原因对它发誓(安全性是其中之一,易用性是另一个原因)。

我一直认为,如果您的客户端应用程序需要直接连接到数据库,那么您做错了!

如果您正在寻找有关 DataSnap 的更多信息,在最近的 CodeRage 活动中有一些有趣的会议。您可以在Embarcadero 的 CodeCentral 子站点(免费)下载/观看任何这些会话。

至于书籍,最好的选择永远是 Marco Cantú 的 Delphi 手册(特别是 XE 书籍,它仍然主要适用于 XE2 的 DataSnap)。

重要的是要记住,DataSnap 仅随 Delphi 的 Enterprise、Ultimate 和 Architect 版本提供......它在 Pro 或 Starter 中不可用!

不过,您始终可以在自己的服务器层上使用 ODBC 连接到任何 ODBC 数据库(包括 MySQL、MSSQL、Oracle ......甚至是 MS Access,如果您想享受“过去的爆炸”),然后使用任何网络您喜欢的套接字解​​决方案(例如随 Delphi [所有版本] 作为标准附带的 Indy)将您的客户端应用程序链接到服务器层!看看 TADOConnection、TADOQuery 等。

希望您发现此信息有用!

于 2011-10-25T17:39:31.237 回答
0

根据实际应用需求,您必须在 2 层(数据库和胖客户端)或 n 层(数据库、应用程序服务器、瘦客户端)解决方案之间进行选择。2 层解决方案更易于开发,n 层更复杂。

dbExpress、UniDAC、ecc。是数据库访问库。Datasnap、Web 服务等是 RPC(远程过程调用)框架,可用于访问远程数据(使用服务器端的 db 访问库)。套接字只是非常低级的通信设备。

因此,您必须使用这些组件的堆栈来构建数据库访问层。例如,您可以使用 dbExpress 访问 DB 和 Datasnap 作为中间层。

从安全的角度来看,Datasnap 非常不安全,但由于使用了算法和密码/证书管理,因此 DCOM 实施。如果您将数据库密码存储在客户端中,那么无论如何您都会遇到很大的安全问题。有一些方法,如操作系统认证等,允许使用用户帐户安全性连接到数据库。使用到数据库的单个“连接”可能意味着失去一些(或大部分)安全性,因为数据库访问控制将仅限于该连接用户的权限。此外,审计可能会丢失。

引入新层时,必须设计可伸缩性并将其良好编码到该层中。数据库服务器被设计和编码为可扩展的,一个糟糕的中间层可能成为一个瓶颈。

MySQL通常对你用来连接的他的库很挑剔,其他数据库则较少。

于 2011-12-22T12:06:58.853 回答