应该在RemoteDataModule的oncreate事件里面写,听我的没错,因为我马上完成的一个系统就是这样实现的可以贴一段代码给你看看: procedure Tmyserver.RemoteDataModuleCreate(Sender: TObject); begin if sig=false //一个判断条件,如果第一个客户端已经将数据库连接 上了,那么其它人登录时就不在打开数据库了,否则就报错 then begin FindServerSocket1.Active:=true; //这是我连接socket,和数据 库无关 FindServerSocket1.Open; FindServerSocket1.Socket.Lock; sig:=true; OpenDate; end;
end; procedure Tmyserver.OpenDate; begin if adoconnection1.Connected=false then begin ADOConnection1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+s_strSystemPath+'database\Ò½½ÌËزĿâ.mdb;Persist Security Info=False'; //动态设置adoconnection1的connectionstring ADOConnection1.Connected:=true; datamodule6.ADOTable1.Connection:=adoconnection1; DataModule6.ADOTable1.Active:=true; datamodule6.ADOTable2.Connection:=adoconnection1; DataModule6.ADOTable2.Active:=true; datamodule6.ADOTable3.Connection:=adoconnection1; DataModule6.ADOTable3.Active:=true; datamodule6.ADOTable4.Connection:=adoconnection1; DataModule6.ADOTable4.Active:=true; datamodule6.ADOTable5.Connection:=adoconnection1; DataModule6.ADOTable5.Active:=true; datamodule6.ADOTable6.Connection:=adoconnection1; DataModule6.ADOTable6.Active:=true; datamodule6.ADOTable7.Connection:=adoconnection1; DataModule6.ADOTable7.Active:=true; datamodule6.ADOTable8.Connection:=adoconnection1; DataModule6.ADOTable8.Active:=true; datamodule6.ADOTable9.Connection:=adoconnection1; DataModule6.ADOTable9.Active:=true; end else exit;end;
具体的讨论可参考这个
http://expert.csdn.net/Expert/topic/1109/1109132.xml?temp=.2380335
procedure Tmyserver.RemoteDataModuleCreate(Sender: TObject);
begin
if sig=false //一个判断条件,如果第一个客户端已经将数据库连接
上了,那么其它人登录时就不在打开数据库了,否则就报错
then
begin
FindServerSocket1.Active:=true; //这是我连接socket,和数据
库无关
FindServerSocket1.Open;
FindServerSocket1.Socket.Lock;
sig:=true;
OpenDate;
end;
end;
procedure Tmyserver.OpenDate;
begin
if adoconnection1.Connected=false
then
begin
ADOConnection1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+s_strSystemPath+'database\Ò½½ÌËزĿâ.mdb;Persist Security Info=False'; //动态设置adoconnection1的connectionstring
ADOConnection1.Connected:=true;
datamodule6.ADOTable1.Connection:=adoconnection1;
DataModule6.ADOTable1.Active:=true;
datamodule6.ADOTable2.Connection:=adoconnection1;
DataModule6.ADOTable2.Active:=true;
datamodule6.ADOTable3.Connection:=adoconnection1;
DataModule6.ADOTable3.Active:=true;
datamodule6.ADOTable4.Connection:=adoconnection1;
DataModule6.ADOTable4.Active:=true;
datamodule6.ADOTable5.Connection:=adoconnection1;
DataModule6.ADOTable5.Active:=true;
datamodule6.ADOTable6.Connection:=adoconnection1;
DataModule6.ADOTable6.Active:=true;
datamodule6.ADOTable7.Connection:=adoconnection1;
DataModule6.ADOTable7.Active:=true;
datamodule6.ADOTable8.Connection:=adoconnection1;
DataModule6.ADOTable8.Active:=true;
datamodule6.ADOTable9.Connection:=adoconnection1;
DataModule6.ADOTable9.Active:=true;
end
else
exit;end;
ok
我的问题是能够实现异常处理
比如说一旦动态连接失败
弹出服务器设置窗口(自己创建的,用来修改ini文件),进行设置.
问题是在RemoteDataModuleCreate
个事件里加入异常处理根本弹不出来我定义的那个设置服务器窗口
在服务器的主窗口中怎么对RemoteDataModule中的控件进行操作
procedure TMainForm.FormCreate(Sender: TObject);
var
ConIniFile: TIniFile;
begin
ClientCount:=0;
DisplayClient; ConnectionStr:='';
ConIniFile := TIniFile.Create(MWorkPath+'AdoCon.ini');
ConnectionStr:= ConIniFile.ReadString('connection', 'constr', 'null') ;
ConIniFile.Free;
end;// 设置ini,这样设置应该不会有异常
procedure TMainForm.N2Click(Sender: TObject);
var
InitialString: WideString;
ConIniFile: TIniFile;
s:string;
begin
InitialString:='';
InitialString:=PromptDataSource(Handle,'');
if InitialString<>'' then begin
ConIniFile := TIniFile.Create('./AdoCon.ini');
ConIniFile.WriteString('connection', 'constr', InitialString) ;
ConIniFile.Free;
MessageDlg('设置生效,请重新启动服务器!', mtError, [mbOk], 0);
end;
end;// 设置connectstring
procedure TCostRDM.RemoteDataModuleCreate(Sender: TObject);
var
// 2002-7-9 dyf
XMLFileName: string;
ConnctProp:TConnctProp;
begin
DataDM:=TDataDM.Create(nil); if MainForm.ConnectionStr<>'null' then begin
acCost.Connected:=False;
acCost.ConnectionString:= MainForm.ConnectionStr;
acCost.Connected:=True;
end;
// 2002-7-9 dyf
//读取连接的配置文件
XMLFileName:=MWorkPath + 'connparams.xml'; //配置文件的全路经
XMLDocument1.filename:=XMLFileName;
XMLDocument1.active:=true;
ConnctProp:=TConnctProp.Create;
ConnctProp.LoadFromXMLDoc(self,XMLDocument1); Inc(MainForm.ClientCount);
MainForm.DisplayClient;
end;