三层的一个难题,请高手多多指教(200分)

T

tinger

Unregistered / Unconfirmed
GUEST, unregistred user!
在三层的数据库中
我的服务端用的是DELPHI的SERVICE APPLICATION
写的,它运行后就在NT的控制面板的服务中出现了,我这是看的李维的书
写的,但是这出现了一个问题,就是当客户端连接过来的时候,就出现了
服务端退出的提示.请问这怎么解决???????
出现的信息是:
There are still active com objects in this application one or more
clients may references to these objects, so manually closeing this
application man cause those client application(s) to fail
 
你先不用SERVICE APPLICATION试试。
 
是的。我现在也遇到了。
过去一直用都没有遇到过。
但是重新装了系统后,再写就会出现这个问题。
周末特意看了window2000的关于NTservice的书,还没有搞明白。
我很奇怪,为什么重新装了的系统就会造成这种问题。
原来都没有。
也许是delphi6搞得?
 
我没有用SERVICE APPLICATION就一切正常
 
试试再说
 
不会啊,我刚才试了一下,好好的,我一下连接了五六个客户端。
另外你选择了与桌面交互吧,否则怎么会看到信息。
 
能给一个简单的例子吗???
 
找了老半天,这是SERVER DPR:
program Project1;
uses
SvcMgr,
Unit1 in 'Unit1.pas' {Service1: TService},
Project1_TLB in 'Project1_TLB.pas',
Unit2 in 'Unit2.pas' {MyTest1: TRemoteDataModule} {MyTest1: CoClass};
{$R *.TLB}
{$R *.RES}
begin
Application.Initialize;
Application.CreateForm(TService1, Service1);
Application.Run;
end.

这是SERVER DATAMODULE:
object MyTest1: TMyTest1
OldCreateOrder = False
Left = 270
Top = 107
Height = 150
Width = 215
object DataSetProvider1: TDataSetProvider
DataSet = Table1
Constraints = True
Left = 136
Top = 28
end
object Table1: TTable
DatabaseName = 'DBDEMOS'
TableName = 'country.db'
Left = 56
Top = 24
end
end
这是客户FORM:
object Form3: TForm3
Left = 270
Top = 107
Width = 473
Height = 309
Caption = 'Form3'
object DBGrid1: TDBGrid
Left = 16
Top = 88
Width = 377
Height = 169
DataSource = DataSource1
TabOrder = 0
end
object Button1: TButton
Left = 172
Top = 28
Width = 75
Height = 25
Caption = 'Button1'
TabOrder = 1
OnClick = Button1Click
end
object ClientDataSet1: TClientDataSet
Aggregates = <>
Params = <>
ProviderName = 'DataSetProvider1'
RemoteServer = DCOMConnection1
Left = 68
Top = 28
end
object DataSource1: TDataSource
DataSet = ClientDataSet1
Left = 100
Top = 28
end
object DCOMConnection1: TDCOMConnection
ServerGUID = '{E8D6F5E4-055C-46E7-BF94-13EC70FDA1A3}'
ServerName = 'Project1.MyTest1'
Left = 36
Top = 28
end
end
客户PAS:
unit CLUnit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, DBClient, MConnect, Grids, DBGrids, StdCtrls;
type
TForm3 = class(TForm)
ClientDataSet1: TClientDataSet;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
DCOMConnection1: TDCOMConnection;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form3: TForm3;
implementation
{$R *.dfm}
procedure TForm3.Button1Click(Sender: TObject);
begin
ClientDataSet1.Open;
end;

end.

注意:服务程序要加执行参数-INSTALL进行安装,然后在NT服务控制面板中启动。
D:>Project1.exe -install (提示安装成功)
否则程序会在十几秒内自动退出(你该不是因为没安装自动退出吧,我看很像耶)。
 
楼上老兄:
 我不知道你有没有在win2000在测试,这样的例子我在NT中测试没有问题,但一到了Win2000中就出现了这样的问题
 
to btxiaoyao: 我就是在WIN2000下啊.
Win2000AS
 
你把那个提示功能关了不就得了,不过我想可能是你的程序那里出问题(RDM.OnCreate),
以致构造函数出错,引起程序退出,不过又有客户连接着,所以那个提示出来了。
关闭COM的退出提示。在RDM中的
initialization
ComServer.UI.... := False;
//属性忘了好像是以UI开头的。
TCom....
end.
 
多人接受答案了。
 
顶部