标题
[CLQ的Delphi大全教程] X.X 使用 数据库
clq
浏览(0) +
2004-08-28 12:05:01 发表
编辑
关键字:
Delphi最大的优势就是对数据库的访问上. 至少有一半的软件公司是依赖此生存的.
对于Delphi来说访问db,access,sql server,oracle,sybase这样的数据库都可以用近乎相同的方法,这实在是一个巨大的好处. 更为强悍的是delphi的第三方数据库控件相当的庞大!并且质量非常之高,这是任何一个其他语言都不能与之相提并论的.
1.常规的访问
访问数据库主要是三方面 "database"->"datasource"->"datacontrol"把这三类控件相互连接起来就可以用了,这个过程可以完全依赖设置一下控件的"属性"就可以了. 这个大家应该都会吧,我暂时就不多说了. 有大量的第三方控件在"database","datacontrol"而"datasource"基本上是不用改动的--只起一个桥梁的作用.
2.常规访问的实战建议
在使用delphi时访问数据库有太多的方法,有些人喜欢直接写SQL;有些人喜欢全部写在数据库的存储过程中,只是用delphi调用一下就完了;还有一些人喜欢直接使用delphi控件的功能来完成删除,增加这样的操作.很难说哪种方法更好,但我想我下面的建议是比较重要的.
写在存储过程中是很多认为自己在写大型程序的人喜欢用的,因为对程序的修改很多情况下就是改存储过程就完了,并且也方便别的程序共用(呵呵).以前我的公司非常喜欢用这个方法.这个方法有两个致命的弱点,首先是存储过程对子函数的支持非常差,如果组织得不好,那么会写下非常多的重复代码.我们曾经维护过很多"东软"的代码都是这样写的,为了在返回值中多加一个字段,有时我们要改100个地方的代码!!!难怪东软总在强调中国程序员的低成本优势--呵呵,以它这种方式没有低成本这一条它都活下去吗?(当然不只它一家这样)
如果说这种方法还可以用"人海战术"来解决的话,那么还有一种情况就不同了.还是在那个公司,原来的代码都是建立在sql server上的,但是有大量的用户是在oracle之上的.好了这下死了!我们那个公司不得不找oracle的人员来协助修改那些sql server的存储过程!直到我离开这家公司时这个工作还没完成...
如果使用完全sql的方式也会碰到上面的第二个问题(转换到别的数据库),因为不同的数据库,SQL语法还是有很多不同的.
依赖delphi自身的控件功能也会有其他问题,比如在转换浮点数时会丢掉精度(至少在sql server中是如此),这时候就要求你知道解决的办法绕开这些"bug".如果实在解决不了就只好暂时用sql先代替了.(上面的那个问题可以将ADOQuery等控件的..BCD..属性关闭就可以了,另外数据库中也有浮点数本身的问题,大部分情况下不能用单精度的浮点数--一个特例在日本时东芝公司死活要在一个字段中使用单精度,原因不明[s:7] )
终上所述,最好的方法是SQL与delphi控件功能相结合.不要用存储过程.我想一定会有无数的人反对我放弃存储过程的思想.不过你想想,mysql里的存储过程你用过吗? 或者应该说除非必要不要使用存储过程(可惜这种必要我从未发现过).
2.1 几个非常重要的"小技巧"
暂先说几个 :)
大家知道ttable,query,adotable,adoquery中可以通过".append"方法加一个记录,用".delete"方法可以删除一条记录,还有修改等等的方法.但是当它们有时却会工作不了,特别是在访问sql server,access,oracle中经常发生. 其实这个说来话长了,您只要记住每个数据库表都要设一个主键,要修改数据集中要包含有这个主键字段就可以了.
访问oracle可以用adoquery控件.
尽量写这样的SQL代码: "select ... from ... where 1=1 and ...". 好了,下次再说这个"1=1"的故事. [s:12]
NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.