关于ADO和三层结构的问题!!!!!
我用DELPHI写数据库程序时,一般均用ADO。从未用过BDE之类。我的问题是ADO目前能没满足应用的要求吗,毕竟他与BDE相比还较年轻。
一。有何种情况,BDE可以做,而ADO做不了?请用过的讲讲吧。
二。另外,大家都知道在decisioncube中用的是ODBC联接数据库,很麻烦,有没有办法用ADO做?
三。有哪位用过DELPHI7?它用的ADO支持ADO.NET吗?此个关于问题二中的情况解决了吗?
四。ADO.net用的是不是就是ADO 2.7
五。有哪们可以给我一个基本的三层结构的标准解决方法。我的意思是客户端用什么,RemoteDataModule中用什么?此外有多种联接方法(dcom,corba,tcpip,ect),到底用哪种比较好。
请高手多多指教。mailto:nicksolo@eyou.com
问题点数:0、回复次数:17Top
1 楼greenlotus(云水居士)回复于 2003-04-04 20:30:13 得分 0
一个三层的例子:
应用服务器的编写:
(1)新建一个工程
(2)点击“File”“New”“Other”,选择Multiter页标签的Remote Data Module
(3)设置CoClassName(例:输入TestServer),点击OK就会进入Remote Data Module编辑框
(4)在编辑框中可以添加任何与数据库相连的组件,既然你的机器上装了sql server ,你就可以 添加一个ADOConnection和ADOTable,进行数据库的连接设置。这里我要提醒一句,就是在用ADOConnection连接数据库的时候,最好把登陆数据库的密码保存下来,并且ADOTable1.active不要设置为True!!!然后再添加一个DataSetProvider1(在Data Access页中),并将其DataSet设置为TADOTable1.
(5)编译运行此程序,就算注册了
客户端的编写:
(1)新建一个工程文件
(2)在其中添加SocketConnection1(在DataSnap页中),将它的Host设置为你的应用服务器所在的机器名,在ServerName的下拉列表框中选择应用服务器的名称,port默认为211(注意:TSocketConnection靠的是TCP/IP协议进行通讯,所以要在应用服务器端需额外运行Scktsrvr.exe程序,该程序在..\\Borland\Delphi6\Bin目录里)
(3)然后添加一个ClientDataSet1(在Data Access中),将其RemoteServer设置为SocketConnection1,将PorviderName设置为DataSetProvider1,
(4)再添加一个DataSouce1和一个DbGrid1,将DataSouce1.DataSet设置为ClientDataSet1,DBGrid1.DataSource设置为DataSource1
(5)在FormCreate中编写代码如下:
procedure TForm1.FormCreate(Sender:TObject);
begin
SocketConnection1.Connected:=True;
ClientDataSet1.Active:=True;
end;
(6)编译运行,你的客户端就可以读取Sql Server数据库中的数据了!
Top
2 楼greenlotus(云水居士)回复于 2003-04-04 20:33:00 得分 0
声明:我可不是什么高手了,我仅仅是做过这个尝试而已!Top
3 楼nicksololynn(霹雳游侠)回复于 2003-04-06 20:22:41 得分 0
多谢了,老兄。但是我还是有个问题,那就是如何选择联接控件:DCOM,SOCKET,BORBA好像还有其他的。请说说它们分别适合用在什么场合下,各有什么优缺点。Top
4 楼greenlotus(云水居士)回复于 2003-04-07 12:49:29 得分 0
DCOM控件用的是DCOM协议进行数据通讯
Socket用的是TCP/IP进行数据通讯
WebConnection用的是Http协议,各有所长,一般的Delphi书中都有说明Top
5 楼hait(haitao)回复于 2003-04-07 16:53:08 得分 0
一下问这么多问题,我来说两句:
1 别的连接方式(bde、odbc等)能够做的,就一般的三层开发或c/s结构的开发来说,ADO基本上都可以。
2 decisioncube当然可以用Ado,我试过。
3 现在用delphi7开发,还是等等吧。用delphi6开发已经足以,它开发的三层系统还是比较稳定的。别着急用ado。net。新技术不是我们在实际开发中所追求的,等其稳定了在用。
4 好像不能够等同。
5 client端:Tclientdataset + 连接(dcom、socket等等)
server端:remotedataset:Tdatasetprovider+ tAdoquery + tadoConnection。
Top
6 楼china_lyz(编程浪子)回复于 2003-04-07 23:43:17 得分 0
dcom分发的时候客户机需要dcom协议
socket比较好一点。不要太多的配置
给客户的时候方便一点Top
7 楼sywxy(学习DELPHI)回复于 2003-04-08 22:33:28 得分 0
Corba服务器上就无法用Ado连接数据库.Top
8 楼nicksololynn(霹雳游侠)回复于 2003-04-10 23:34:58 得分 0
hait请详细说一下如何用在Decisioncube中用ADO。请您能不能说的具体一点。我原来一直通过ODBC,在每个客户端都要配置数据源,太烦了。请高手指教。多谢。Top
9 楼hait(haitao)回复于 2003-04-14 11:54:40 得分 0
在窗体上放置一个Adoconnection和AdoQuery、Decisioncube.将Decisioncube的Dataset指向Adoqery。然后设定AdoQuery的Sql就可以了。Top
10 楼nicksololynn(霹雳游侠)回复于 2003-04-14 18:53:01 得分 0
那adoquery能提供分维吗?还要不要写代码实现分维。此外与Decision的一系列的表现还能很好的用吗?
我先试一下再说吧!有问题再给您留言吧。多谢了。Top
11 楼lyq(阿飞)回复于 2003-04-14 19:10:08 得分 0
ado发布简单,效率高Top
12 楼ralf1999(ralf1999)回复于 2003-04-14 21:22:22 得分 0
////一。有何种情况,BDE可以做,而ADO做不了?////
BDE有连接数限制,ADO没有.BDE非常灵活(可以更新视图),ADO与MTS集成的更好。
////三。有哪位用过DELPHI7?它用的ADO支持ADO.NET吗?此个关于问题二中的情况解决了吗?////
答案是否定的。
////四。ADO.net用的是不是就是ADO 2.7////
ADO.net不是ADO 2.7。
Top
13 楼nicksololynn(霹雳游侠)回复于 2003-04-15 21:52:55 得分 0
我昨天用 ADOConnection+adoquery+decisioncube试了一下,出了很多问题。一运行程序就死机,然后每次打开项目后,再打开那个窗体时,DELPHI就会自动关闭(尽管我已经把所有用到的datamodule都打开了。)Top
14 楼conchman(conchman)回复于 2003-04-16 00:47:46 得分 0
greenlotus(云水居士) 你好,
我也是刚刚学习此类编程,用你提供的方法做了,发现当SERVER和CLIENT在同一台机器上没有问题(SQL在其他机器上),但我把SERVER移到别的机器上时却不行了,现象是:在BORLAND SOCKET SERVER中可以看到已经登陆,但客户端无显示,调试客户端程序时发现,1。在为SOCKETCONNECTION选择SERVERNAME时很慢;2。无法CONNECT,尽管BORLAND SOCKET SERVER中可以看到已经登陆。
谢谢指教!!Top
15 楼greenlotus(云水居士)回复于 2003-04-16 12:55:14 得分 0
to conchman(conchman) :
你太客气,指教不敢当!!
我猜想,应用服务器(server)要在它所运行的机器上注册,另外,应用服务器要和数据库相连,所以,我们一般分发的是客户端(client)程序,我没有尝试过将应用服务器移到其他机器上的做法!
分发客户端的方法很简单,你只要把客户端的Exe文件复制到其他机器上,并且把midas.dll这个文件复制到客户端所在机器的..\\windows\system下即可,其他的什么设置都不需要。
当然如果你用的是TSocketconnection为连接控件,那么服务器端一定要运行...\\delphi\bin\scktsrvr.exe这个程序,客户端就不再需要了。Top
16 楼fansnaf(投币一元)回复于 2003-04-17 10:22:09 得分 0
gzTop
17 楼wbryfl(任远)回复于 2003-04-18 09:36:50 得分 0
TO conchman(conchman)
你的服务器端应该选择2000系统。Top




