以Bpl的方式多人开发一个项目所遇到的问题
尝试以Bpl的方式多人开发一个项目
DELPHI7+DBEXPRESS+SQL2000
我所负责的是系统框架,子功能模块以BPL的方式多人开发,
现在想所有模块共用一个SqlConnection连到SQL服务器中
并能保证无论是设计期还是运行期都可以很好地运作。
我现在的做法是将数据链接做在一公用Bpl的DataModule中,其它模块需要数据链接的就将包加入其中,但在设计时却需要将公用包打开,并先激活DataModul,子模块的数据控件才能找到公用链接,所以感觉不是很方便。
有哪位高手可以给个更好的方法,谢!
问题点数:50、回复次数:12Top
1 楼wweijie(可爱小果果)回复于 2003-12-04 13:32:55 得分 0
我们的办法是运行时用代码指定,不在设计时访问数据库。Top
2 楼HsyPrg(图灵心)回复于 2003-12-04 13:36:14 得分 0
但我想让其它兄弟能在设计时很方便使用,有没有好办法?Top
3 楼HZ_ZMD(爱到哪里都会犯错)回复于 2003-12-04 13:38:42 得分 5
你最好是设置好导出文件路径
.EXE和.BPL在一个路径
.DCP也导出来
.DCP也导出来
用相对路径设置!
.DCP包含了编译文件信息
不用激活其链接文件
Top
4 楼HsyPrg(图灵心)回复于 2003-12-04 14:02:45 得分 0
我以指明了导出路径,还是不行<HZ_ZMD(爱到哪里都会犯错>前辈试过这类问题没有?Top
5 楼HsyPrg(图灵心)回复于 2003-12-04 14:10:42 得分 0
还有,我在公用包里定义一个FORM类,作为所有模块的父类,并把此窗口加入Respostories中
所以,每一个子模块包的主窗口都将NEW->OTHER里选择此FORM并继承下来,再把公用包加入其中后编译与运行都没问题,只是在设计的时候却需要同时将公用包的DPK打开,否则无法编辑模块中的Form,错误为:"找不到父类"。高手们,帮帮忙吧,只要解决,我立马加分。再谢!Top
6 楼gencan(无敌)回复于 2003-12-04 14:23:54 得分 0
你把你的公用包,在每个人的DELPHI中安装一下,就可以了。
不过,我认为你这样做不好:1、运行速度很慢;2、没有达到设计包的目的,没有体现出
包的优势;
Top
7 楼jxc163(一寒)回复于 2003-12-04 14:38:46 得分 5
我有一个关于数据模块的包例子,不知你是否有用。Top
8 楼HsyPrg(图灵心)回复于 2003-12-04 16:06:38 得分 0
首先感谢各位前辈的应答(这里的人气果然比CSDN旺)
我这里用一个公用DataModul的意思是想降低SQL服务器的负荷,因为每一个Module都建一个到相同数据库的SqlConnection的话,总是不明智的。
我现行的做法,运行是没问题,只是设计时不太方便.
TO gencan(无敌) :
你可能没明白我的意思.
TO jxc163(一水寒):
非常想参考下,hsycy@sfihk.com 不胜感激!
Top
9 楼gong_hui2000(gong_hui2000)回复于 2003-12-05 21:17:23 得分 20
我的做法:
1. Main.exe + 多个 bpl, Main以 LoadPackage/unLoadPackage 方式与 bpl工作
2. LoadPackage 时,将主程序中的 SQLConnetion 传到 bpl 中
3. 每个bpl 中有自己的 DataModule,也有一个 SQLConnetion, 它仅用于设计期,一旦被 主程序 Load,就将 传来的 SQLConnection 替代原有的设计期的组件(做一个通用方法实现替换SQLConnection的功能)
//下面是 BCB 代码,用于替换 TSocketConnection, 类似于 SQLConnection
void __fastcall SetRemoteServer(TSocketConnection *SocketCon,TComponent *ParentComponent)
{
TComponent *Temp;
TClientDataSet *tmpDataSet;
for(int i=0;i<ParentComponent->ComponentCount;i++)
{
Temp=ParentComponent->Components[i];
if (dynamic_cast<TClientDataSet *>(Temp) != NULL)
{
tmpDataSet=(TClientDataSet *)Temp;
tmpDataSet->RemoteServer=SocketCon;
}
}
}
Top
10 楼qixin000(小齐)回复于 2003-12-05 21:47:55 得分 5
为了设计期方便,每个人在自己的bpl里静态加一个connection,到程序发布时,在去掉即可;
只是为了设计方便,但程序代码必须还是按发布时的写就行了;
我做的项目就是这样做的,很方便;
app(main,首先创建commonDM,然后依次创建其他功能块)
commonDM.bpl(adoconnontion,commonForm)
module1.bpl(静态引入connection,发布时删掉,里面的所有连接用commonDM.bpl中的连)
module2.bpl(静态引入connection,发布时删掉,里面的所有连接用commonDM.bpl中的连)
module3.bpl(静态引入connection,发布时删掉,里面的所有连接用commonDM.bpl中的连)Top
11 楼codehunter008(马里奥)回复于 2003-12-05 21:55:08 得分 15
我们是这样做的,
在我们的系统部分中写好了DataMoudle,都连接好,然后现在系统部分写个模板窗体,这个窗口Uses了这个DataMoudle,然后将这些部分作为开发的基本模块,都加到工程中。
下面的程序员写的时候就从模板上继承,很方便的!无论是在设计期,还是运行期都运行良好!Top
12 楼7838205(我爱Delphi)回复于 2003-12-06 15:43:56 得分 0
codehunter008 的主意不错!应该可行!Top




