当前位置:主页>delphi教程/企业管理软件> 文章内容

多数据库支持, 专家新手通通欢迎

发布时间:2010-01-29 | QQ免费站
1楼: 对多数据库的支持我整理如下, 不知道是否有更好的方法: 方法1:编写标准SQL92, 所有SQL封装到单独的单元文件中 优点:开发简单 缺点:由于各种数据库的语言的不同,函数不同,对于功能需求强点的SQL可能无法实现,无法对特定的数据库SQL进行优化 方法2:自己使用一种SQL语言,然后自己开发一个编译器,自动把SQL翻译成 多种数据库语言 优点:开发简单,是一个比较好的方案 缺点:开发编译器工作较大,对编译器的兼容性要求高,当有些SQL无法转为特定数据库的时候就麻烦了,能做到部分对特定的数据库SQL进行优化 方法3:定义统一的接口,多数据库实现这个接口,客户端开发的时候只能使用接口处理数据,不能再编写SQL 优点:能根据需要优化特定数据库,添加新的数据库支持很简单,能减少数据操作和软件的耦合,利于开发(我个人比较倾向这种),复杂的功能可以用特定的接口过程实现 缺点:定义接口标准比较麻烦(不知道那位有相关经验),开发需要统一使用该接口 由于我的系统比较大(100万行代码左右)我比较倾向使用方法3, 欢迎大家给意见
字串2

2楼: 我倾向方法3,优点嘛:扩展性好,易维护,降低耦合等等 开发时可合理使用几种设计模式
字串6

3楼: 沒相過搞這些,技術性太強 字串7

4楼: to delfier: 你有开发过类似系统吗? 你觉得接口如何定义好,我要定义一些标准的数据操作 如 Select, 要考虑多表关联,数据分组等等 字串4

5楼: 我建议方法2,不需要开发编译器,只需要做个SQL解析器就行了,这个在sourceforge有delphi编的开放源码的.可以选最通用的SQL SERVER作为原本,把其它SQL语句翻译过去就行了,特殊的无法实现的采用存储过程实现就行了. 这样做了,一劳永逸,以后你开发的其它软件也同样可以使用,方法3局限大,可扩展性差,以后你每开发一个软件新增的功能都要改接口,迄不是很烦. 字串3

6楼: 只需要做个SQL解析器就行了,这个在sourceforge有delphi编的开放源码的 叫什么名字的?

字串1

7楼: 名称记不清了,搜delphi sql应该可以找到的 字串7

8楼: 使用方案3的话可以参考 java、.NET 平台下的 hibernate 解决方案。 字串9

9楼: 谢谢,关于hibernate看过一下,没做很深入的研究,应该有参照的地方 关于方案3, 我准备分2部分实现 第一部分: 标准的数据操作,如:select,insert,update 第二部分: 复杂的业务操作 很复杂的业务操作,当然也可以用存储过程 字串9

10楼: to zhtx: sourceforge.net 上的SQL解析器,离我的目标差距很大,不过我在国外倒是找到成熟的产品了,叫SwisSQL,有兴趣的朋友去看一下

字串3

11楼: 我不知道我的方法属于你的哪个方案。 我在我的系统中已这样做,不过我的系统可能比较小吧。 设一个全局变量,MySqlType:Integer; 然后根据数据库类型设它的值为1或2或3或4或5或6等。 然后系统中有SQL语句的地方都对应多写几个,运行时根据MySqlType的值选择。 其实SQL语句的标准还是很统一的,这样搞工作量也不见得大多少。 字串1

12楼: 我觉得第二种比较容易实现。
字串8

13楼: 同意zhtx的观点,写一个解析器,比较简单。方法3,比较繁琐,不容易实现!! 字串3

14楼: 我认为如果不是以后会开发很多的项目,不要用3。 我自己想做的是统一的开发平台,而不只是SQL一层。 SQL层差别很大,会给编程带来不一样的手法。比如,返回多个记录集。 我倾向于开发不同数据库的模块,这样性能最高。(我只开发一个平台)。 其实,楼主想问的是“怎样定义统一的接口”,我认为应该再高一层定义,比如单一结构、主细结构、树形结构,是否带关连事务(影像其他表)等。我说的可能和你想的不一样,但应该再高一点,不应是insert ,update,delete 等。
字串8

15楼: 2好

字串8

16楼: 首先谢谢各位朋友的关心,关注。 to:lovewh119 你的方法我最早就是那么做得,后来程序规模大了增加新数据库支持麻烦的很,并且需要很久的测试,有些地方你可能漏改了。 to songjungz: 你的建议非常好,我这里以后肯定会开发很多的系统,我的目的就是定一次通用接口或找一种通用方法,解决多数据库问题,以后就不需要再从这方面考虑问题了。 至于我说的想法不知道是否和你的想法一致 “第一部分: 标准的数据操作,如:select,insert,update” 我的意思这个并不是SQL, 而是定一个接口,传入需要的参数,根据不同的数据库生成不同的sql,目前我的想法就是处理一些简单的定义,对于非常复杂的数据处理通过存储过程或新的接口实现, 例子如下: function Select(P: TSelectPars): TClientDataSet; function Delete(P: TDeletePars): Boolean; function Update(P: TUpdatePars): Boolean;

字串9

17楼: 哈,没研究过,不过接口应该是用虚基类吧,当然函数也可以,有点不象面向对象。 好像主要是参数的问题,你可以总结一下,以前遇到的sql语句,看看那些参数能归结。 还有就是功能最大化,比如insert 可以返回 KEY ID,不要再查询一次,UPDAET,DELETE ORCALE 不支持复合条件可以加上去。理想一下,应该支持那些功能,而以前数据库没支持的。 主要难度是那些复杂的SELECT 象报表,和存储过程,很难定义成通用的参数,或者定义后参数就成了SQL了。
字串6

18楼: “主要难度是那些复杂的SELECT 象报表,和存储过程,很难定义成通用的参数“ 有同感 这个是没法用通用的方法处理的,象报表和复杂的统计分析我想只有统过 定一个接口函数,或者通过存储过程来实现了,目前来看还是可行的,需要考虑接口参数定义的便利性,不能太复杂了
字串1

19楼: remobject好像也有处理这种情况的一套方法,你到网站上看看
字串5

20楼: NHibernate, Hibernate
字串7

21楼: 谢谢,我去看看 to 青出于蓝: delphi 下没有这个框架的实现

字串6

22楼: 看介绍不是处理多数据库的,是一个remoting framework RemObjects SDK™ 3.0 The RemObjects SDK is the award winning remoting framework for Delphi, Kylix and .NET. It allows you to build cross-platform multi-tier applications to remotely access objects residing on a server from clients inside a LAN or across the Internet.
字串7

23楼: Data Abstract is the most innovative data-access framework for Delphi. Used in combination with the RemObjects SDK , it allows you to create RemObjects services that access any database providing a clear separation between data-access and business-logic. Key features of Data Abstract include: Complete abstraction of different databases: use the same code for Microsoft SQL Server, InterBase, Oracle, MySQL, DBISAM, DB/2, etc. Continue using the best available data access components for each job, such as SDAC or ADOExpress for Microsoft SQL Server, ODAC for Oracle, IBObjects for InterBase, etc without the need to replace TDatasets at design time Easily create your own data access driver (source for all included drivers is provided as sample) Driver libraries for ADO, dbExpress*, DBISAM*, IBX, IBObjects*, MyDAC*, SDAC*, ODAC*, DOA* Build your applications with a “stateless“ focus for maximum scalability and seamless cluster integration Design your data-access layer in an innovative RAD way using the Schema Modeler Minimize SQL-dialect differences through the use of Data Abstract‘s macro processor Automatic SQL-generation when explicit SQL control is not required Support for regular expressions for client-side data-validation Full support for Master/Detail transactional updates Object oriented, cross-database SQL-manipulation using the TDAWhere class 字串3

24楼: 刚才没看到, 这个好像对头了 字串9