感觉不一样的,乖乖~~~不知道各位是不是有这种感觉 ⊙_⊙ ) 世事难预料。 想不到在D7下捣鼓了一会儿就搞定了。 想不到比用ADO调用还更简单方便! ⊙ō⊙ 由于以前没有用过dbExpress做过项目,对dbExpress是不怎么了解的。只是大概的知道D7中新增加了TsimpleDataset,替换了D6中的TSQLClientDataSet。通过这次调试,发现D7版的dbExpress的确是新增了一些新东东,比D6版确是有很多改进,更易用且安全快捷! 今天上午又做了一个简单的三层Demo,做了同样测试,发现也很爽! ^ō^ 现在我就把在D7下用dbExpress调用Oracle存储过程(返回数据集)的整个调试过程和在调试过程中的一些想法写下来,给有这方面需求的朋友做一下参考,同时也作为我在大富翁论坛上的第一篇写作笔记。 ^_^二、几点说明: 在开始之前,先做几个短暂的总结性说明,这样介绍下面的操作步骤时就会更容易说明白: 1.D6和D7的dbExpress版本是不一样的,Delphi6中是dbExpress 1.0,Delphi7中是dbExpress 2.0。dbExpress作为Borland新一代的跨平台的数据访问引擎,是大有发展潜力的,跨平台是其最大特点。但是dbExpress自身目前仍需完善(比如现在支持的数据库还不是很多、健壮性有待提高等)。让我们拭目以待,期待Delphi8的问世。^_^ 2.用Delphi6调试Oracle的存储过程的时候,发现有如下情况: &;lt;1&;gt;将存储过程写在Oracle的包内,当TSQLStoredProc连接到TSQLConnection时,对象监视器StoredProcName属性中,下拉列表是空白,显示不出任何存储过程的名字, TSQLStoredProc没有自动得到当前的任何存储过程。(可以手工添加存储过程名,形
式如&;ldquo;包名.存储过程名&;rdquo;) &;lt;2&;gt;将存储过程写在Oracle的包外,当TSQLStoredProc连接到TSQLConnection时, TSQLStoredProc能自动得到当前表空间中的存储过程名称,在对象监视器StoredProcName属性的下拉
列表中可供选择。所以在上面提到的CSDN的帖子中RockYuan说&;ldquo;存储过程放包外面&;rdquo;,指的就是这么回事。 3.D6和D7的dbExpress中TSQLStoredProc组件的属性是有一些不同的。最明显的是 D6的TSQLStoredProc只有StoredProcName这个属性,而D7的的TSQLStoredProc除了有StoredProcName这个属性外,还有个属性PackageName。这就使我们能够方便的调用Oracle中的包及包中的存储过程。 这一点很重要(太伟大了!),我们下面要用到PackageName这个属性的。 4.既然D7的TSQLStoredProc组件提供了PackageName属性,我们就把存储过程按照惯例写在包内,PackageName属性对应包名,StoredProcName属性对应存储过程名,这样易于组织、管理和方便使用,逻辑上也清晰。(这就是&;ldquo;懒&;rdquo;的好处。有名人曾说过:这个社会之所以在进步,是因为人们总是想变的更&;ldquo;懒&;rdquo;一点。还有一句话叫做&;ldquo;有资源不用等于浪费!&;rdquo;^ō^ )三、调试过程: 下面就开始一步一步来调试,先说明一下我的调试环境: D6的调试操作环境: Win2K Pro + D6 + upd2 + Oracle817 D7的调试操作环境: Win2K Server + D7 + Oracle817 好的,现在开始写这个示例了: 1。在Oracle数据库中建立数据表,结构如下: /* TSRES是表空间的名称,Subject是表名称 */ CREATE TABLE &;quot;TSRES&;quot;.&;quot;Subject&;quot;( &;quot;ID&;quot; NUMBER(16) NOT NULL, &;quot;CODE&;quot; VARCHAR2(20), &;quot;TITLE&;quot; VARCHAR2(40), &;quot;DXDM&;quot; VARCHAR2(20), constraint PK_Subject primary key (&;quot;ID&;quot;) ); 2。在SQL_PLUS中创建