关于使用Delphi XE2进行数据库编程的问题

时间:2011-10-15 01:07:51

标签: database delphi sockets delphi-xe2 dbexpress

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

对于客户端Win32应用程序是否有任何方法可以对数据库访问的更改进行透明化?也就是说,如果我分发了100个客户端应用程序并且我想更改数据库访问的密码,那么更新每个客户端应用程序将是一个问题。

建议单独连接到客户端应用程序的数据库吗?

我尝试测试DBExpress(与Delphi XE2捆绑在一起)和AnyDAC连接到我的远程MySQL数据库,但我遇到了VendorLibs的问题。是否有一种方便的方法来解决这个问题,而无需安装我想测试的每个RDBMS?

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

任何人都可以推荐非常好的书籍来了解DataSnap,中间件应用程序等等吗?

提前致谢。

2 个答案:

答案 0 :(得分:1)

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

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

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

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

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

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

重要的是要记住,DataSnap只附带Delphi的Enterprise,Ultimate和Architect版本......它在Pro或Starter中不可用!

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

希望您发现此信息有用!

答案 1 :(得分:0)

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

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

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

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

在引入新图层时,必须设计可扩展性并将其编码到该图层中。数据库服务器的设计和编码是可扩展的,坏的中间层可能成为瓶颈。

MySQL通常会对你用来连接的lib有什么挑剔,其他数据库则较少。