在三层数据库中我想在服务器应用程序启动时才设置远程数据模块中的adoconnection的connectionstring属性,通过读取ini文件中的信息,如果连接失败弹出服务器设置窗口
进行设置连接,这种效果在c/s模式下我做过
但是在三层数据库里实现不了,要是200分不过我在加
如何实现?

解决方案 »

  1.   

    可以实现,在服务器端的ADOConnection的BeforeConnect事件中写就可以了,设计时将ADOConnection的Connected设为False
    具体的讨论可参考这个
    http://expert.csdn.net/Expert/topic/1109/1109132.xml?temp=.2380335
      

  2.   

    可以呀!根c/s的每区别,我就是动态读取UDL的,放在DM创建事件中就可以了。
      

  3.   

    应该在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;
      

  4.   

    Tmyserver.RemoteDataModuleCreate
    ok
      

  5.   

    上面的方法我知道我也实现了这样的效果
    我的问题是能够实现异常处理
    比如说一旦动态连接失败
    弹出服务器设置窗口(自己创建的,用来修改ini文件),进行设置.
    问题是在RemoteDataModuleCreate
    个事件里加入异常处理根本弹不出来我定义的那个设置服务器窗口
      

  6.   

    还有
    在服务器的主窗口中怎么对RemoteDataModule中的控件进行操作
      

  7.   

    服务器主窗体不可能对RemoteDataModule中的控件进行操作,因为主窗体创建时RemoteDataModule还不一定创建
      

  8.   

    另外贴出我的代码:// 从ini中读取
    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;