菜菜问题,先谢大家。

durain01 2004-12-01 06:09:35
做了一个ADO方式的分布式多层应用小程序

服务器方用的是
1:Remote Data Module
其中:远程数据模块名:adotestserver
Instancing:Multiple Instance
Threading Model:Apartment
2:TADODataSet
3:TDataSetProvider

客户方用的是
1:TDCOMConnetion
2:TClientDataset
3:TDataSource
4:TDBGrid

客户方程序与服务器程序连接正常(前提:在同一台PC)
将客户方程序复制到另一个PC(同一局域网可以PING通)上运行,鼠标只在短时间变成漏斗又恢复指针形,不再有反应:(

请问为什么在同一台电脑上客户方与服务器方程序连接成功读取数据
而在不同电脑上就不可以实现了呢?

另注:该例子来自:《Delphi 5.x ADO/MTS/COM+高级程序设计篇》李维 著

先谢谢各位大师了~
...全文
48 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
durain01 2004-12-02
  • 打赏
  • 举报
回复
不知道这样给分可不可以:)
durain01 2004-12-02
  • 打赏
  • 举报
回复
谢谢两位:)
DCOM方式搞了一晚都不得其解
改用SOCKET方式就OK了:)
谢谢~~~
richard_ouyang 2004-12-01
  • 打赏
  • 举报
回复
请问为什么在同一台电脑上客户方与服务器方程序连接成功读取数据
而在不同电脑上就不可以实现了呢?
这个是你的dcom服务没有注册的问题,请先注册dcom服务,
todouwang 2004-12-01
  • 打赏
  • 举报
回复
可以ping通还不够,你看他们能相互访问么。
durain01 2004-12-01
  • 打赏
  • 举报
回复
服务器方程序:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Label1: TLabel;
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

end.

与服务器方程序在一起的远程数据模块:
unit Unit2;

{$WARN SYMBOL_PLATFORM OFF}

interface

uses
Windows, Messages, SysUtils, Classes, ComServ, ComObj, VCLCom, DataBkr,
DBClient, Project1_TLB, StdVcl, Provider, DB, ADODB;

type
TadoTestServer = class(TRemoteDataModule, IadoTestServer)
ADOConnection1: TADOConnection;
ADODataSet1: TADODataSet;
DataSetProvider1: TDataSetProvider;
private
{ Private declarations }
protected
class procedure UpdateRegistry(Register: Boolean; const ClassID, ProgID: string); override;
public
{ Public declarations }
end;

implementation

{$R *.DFM}

class procedure TadoTestServer.UpdateRegistry(Register: Boolean; const ClassID, ProgID: string);
begin
if Register then
begin
inherited UpdateRegistry(Register, ClassID, ProgID);
EnableSocketTransport(ClassID);
EnableWebTransport(ClassID);
end else
begin
DisableSocketTransport(ClassID);
DisableWebTransport(ClassID);
inherited UpdateRegistry(Register, ClassID, ProgID);
end;
end;

initialization
TComponentFactory.Create(ComServer, TadoTestServer,
Class_adoTestServer, ciMultiInstance, tmApartment);
end.

客户方程序:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DBGrids, DB, DBClient, MConnect;

type
TForm1 = class(TForm)
DCOMConnection1: TDCOMConnection;
ClientDataSet1: TClientDataSet;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

end.

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧