请教各位前辈!
从ini文件中读出的字符串该怎样赋给ADOConnection的ConnectionString属性?请完整的写出来可以么?

解决方案 »

  1.   

    adoconnection.connectionstring:='Provider=SQLOLEDB.1;Password=didididiidd;Persist Security Info=True;User ID=sa;Initial Catalog=databasename;Data Source=localhost';
      

  2.   

    var MYini: TInifile;
        connectstr: string;
    begin
      Myini := TInifile.create('D:\myini.ini');
      connectstr := myini.readstrint('ado','connectstr','');
      if connectstr <> '' then
      begin
      if ADOConnection1.Connected then
        ADOConnection1.Connected :=false;
      ADOConnection1.ConnectionString :=trim(conncetstr);
      end;end;
      

  3.   

    可以这样设计Unit RWini : 用来封装INI文件的创建,读取与更改方法
    Unit FConf : 将信息写入INI文件的单元
    Unit DBModule : 包括一个数据源的模块,用来读取INI文件中 ADOConnection 的配置参数                            (读取,更改方法)
                          RWini------------------------------------------>DB.ini
                            |                                                  |
                            |                                                  |                        
                            |                                                  |
                            |                                                  |
                            |       ( 读取DB.ini文件,ADOConnect连结失败)      |
                          FConf <------------------------------------------DBModule
                   (根据Rwini提供的方法更改DB.Ini)                          读取DB.ini文件,连接ADOConnection                     //RWini.pas
    {
    模块名称:配置文件读写
    编写人:blue
    }
    unit RWini;
    interface
    uses INIFiles;
    const strINIname = 'db.ini';//INI文件的文件名,大家根据具体情况修改
    var
      iniParam : TINIFile;
      strLocal : String;
      procedure readParam(out server:String;out database:string;out user:string;out password:string);
      procedure writeParam(server:string;database:string;user:string;password:string);
      function getConnStr:string;implementation  procedure readParam(out server:String;out database:string;out user:string;out password:string);
      begin
        //从配置文件中读取数据库连接参数
        server := iniParam.ReadString('dbParam','Data Source','');
        database := iniParam.ReadString('dbParam','Initial Catalog','');
        user := iniParam.ReadString('dbParam','User ID','');
        password := iniParam.ReadString('dbParam','Password','');
      end;  procedure writeParam(server:string;database:string;user:string;password:string);
      begin
        //将数据库连接参数写入配置文件
        iniParam.WriteString('dbParam','Data Source',server);
        iniParam.WriteString('dbParam','Initial Catalog',database);
        iniParam.WriteString('dbParam','User ID',user);
        iniParam.WriteString('dbParam','Password',password);
      end;  function getConnStr:String;
      var
        server,database,user,password : String;
      begin
        //生成数据库连接串
        readParam(server,database,user,password);
        result := 'Provider=SQLOLEDB.1;Password=' + password + ';Persist Security Info=True;User ID=' + user + ';Initial Catalog=' + database + ';Data Source=' + server;
      end;initialization
      getDir(0,strLocal);
      iniParam := TINIFile.Create(strLocal + '\' + strINIname);finalization
      iniParam.Free;
    end.//Unit DBModule 用来检查INI的参数unit DBModule;interfaceuses
      SysUtils, Classes, DB, ADODB,
      Messages,Windows,Forms,Dialogs;type
      TDataModule1 = class(TDataModule)
        conn: TADOConnection;
        DotSource: TDataSource;
        QryDot: TADOQuery;
        QryOneDot: TADOQuery;
        OneDotSource: TDataSource;
        RealSource: TDataSource;
        QryReal: TADOQuery;
        procedure DataModuleCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      DataModule1: TDataModule1;implementationuses frmConf, RWini,ComObj, main;{$R *.dfm}procedure TDataModule1.DataModuleCreate(Sender: TObject);
    var
      confForm : TConf; //用来设置INI文件的窗口
    begin
      //读取配置文件信息
      conn.ConnectionString := RWini.getConnStr;
      try
        conn.Open;
      except
        on Err : EOLEException do
        begin
          conn.Close;
          MessageDlg('无法连接数据库,请重新输入配置信息',mtError,[mbOK],0);
          confForm := TConf.Create(self);
          confForm.ShowModal;
          Application.Terminate; //程序终止
        end;
      end;end;
    end.
    //登录窗口
    unit frmConf;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, cxLookAndFeelPainters, StdCtrls, cxButtons, cxControls,
      cxContainer, cxEdit, cxTextEdit, cxLabel, cxMaskEdit, Mask;type
      TConf = class(TForm)
        edtServer: TcxTextEdit;
        edtDatabase: TcxTextEdit;
        edtUser: TcxTextEdit;
        btnOK: TcxButton;
        btnCancle: TcxButton;
        cxLabel1: TcxLabel;
        cxLabel2: TcxLabel;
        cxLabel3: TcxLabel;
        cxLabel4: TcxLabel;
        edtPassword: TcxTextEdit;
        procedure FormShow(Sender: TObject);
        procedure btnOKClick(Sender: TObject);
        procedure btnCancleClick(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Conf: TConf;implementationuses RWini;{$R *.dfm}//将db.ini的登录信息填入窗体的各个edit组件里
    procedure TConf.FormShow(Sender: TObject);
    var
      sServer,sDatabase,sUser,sPassword : String;
    begin
      readParam(sServer,sDatabase,sUser,sPassword);
      self.edtServer.Text := sServer;
      self.edtDatabase.Text := sDatabase;
      self.edtUser.Text := sUser;
      self.edtPassword.Text := sPassword;
      self.ActiveControl := self.btnOK;
    end;//将信息写入db.ini文件 **
    procedure TConf.btnOKClick(Sender: TObject);
    var
      sServer,sDatabase,sUser,sPassword : String;
    begin
      sServer := self.edtServer.Text;
      sDatabase := self.edtDatabase.Text;
      sUser := self.edtUser.Text;
      sPassword := self.edtPassword.Text;
      writeParam(sServer,sDatabase,sUser,sPassword);
      close;
    end;procedure TConf.btnCancleClick(Sender: TObject);
    begin
      close;
    end;end.
      

  4.   

    可以这样设计Unit RWini : 用来封装INI文件的创建,读取与更改方法
    Unit FConf : 将信息写入INI文件的单元
    Unit DBModule : 包括一个数据源的模块,用来读取INI文件中 ADOConnection 的配置参数        (读取,更改方法)
      RWini------------------------------------------>DB.ini
        |                                                 |
        |                                                 |                        
        |                                                 |
        |                                                 |
        |       ( 读取DB.ini文件,ADOConnect连结失败)      |
     FConf <------------------------------------------DBModule
    (根据Rwini提供的方法更改DB.Ini)            读取DB.ini文件,连接ADOConnection                     //RWini.pas
    {
    模块名称:配置文件读写
    编写人:blue
    }
    unit RWini;
    interface
    uses INIFiles;
    const strINIname = 'db.ini';//INI文件的文件名,大家根据具体情况修改
    var
      iniParam : TINIFile;
      strLocal : String;
      procedure readParam(out server:String;out database:string;out user:string;out password:string);
      procedure writeParam(server:string;database:string;user:string;password:string);
      function getConnStr:string;implementation  procedure readParam(out server:String;out database:string;out user:string;out password:string);
      begin
        //从配置文件中读取数据库连接参数
        server := iniParam.ReadString('dbParam','Data Source','');
        database := iniParam.ReadString('dbParam','Initial Catalog','');
        user := iniParam.ReadString('dbParam','User ID','');
        password := iniParam.ReadString('dbParam','Password','');
      end;  procedure writeParam(server:string;database:string;user:string;password:string);
      begin
        //将数据库连接参数写入配置文件
        iniParam.WriteString('dbParam','Data Source',server);
        iniParam.WriteString('dbParam','Initial Catalog',database);
        iniParam.WriteString('dbParam','User ID',user);
        iniParam.WriteString('dbParam','Password',password);
      end;  function getConnStr:String;
      var
        server,database,user,password : String;
      begin
        //生成数据库连接串
        readParam(server,database,user,password);
        result := 'Provider=SQLOLEDB.1;Password=' + password + ';Persist Security Info=True;User ID=' + user + ';Initial Catalog=' + database + ';Data Source=' + server;
      end;initialization
      getDir(0,strLocal);
      iniParam := TINIFile.Create(strLocal + '\' + strINIname);finalization
      iniParam.Free;
    end.//Unit DBModule 用来检查INI的参数unit DBModule;interfaceuses
      SysUtils, Classes, DB, ADODB,
      Messages,Windows,Forms,Dialogs;type
      TDataModule1 = class(TDataModule)
        conn: TADOConnection;
        DotSource: TDataSource;
        QryDot: TADOQuery;
        QryOneDot: TADOQuery;
        OneDotSource: TDataSource;
        RealSource: TDataSource;
        QryReal: TADOQuery;
        procedure DataModuleCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      DataModule1: TDataModule1;implementationuses frmConf, RWini,ComObj, main;{$R *.dfm}procedure TDataModule1.DataModuleCreate(Sender: TObject);
    var
      confForm : TConf; //用来设置INI文件的窗口
    begin
      //读取配置文件信息
      conn.ConnectionString := RWini.getConnStr;
      try
        conn.Open;
      except
        on Err : EOLEException do
        begin
          conn.Close;
          MessageDlg('无法连接数据库,请重新输入配置信息',mtError,[mbOK],0);
          confForm := TConf.Create(self);
          confForm.ShowModal;
          Application.Terminate; //程序终止
        end;
      end;end;
    end.
    //登录窗口
    unit frmConf;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, cxLookAndFeelPainters, StdCtrls, cxButtons, cxControls,
      cxContainer, cxEdit, cxTextEdit, cxLabel, cxMaskEdit, Mask;type
      TConf = class(TForm)
        edtServer: TcxTextEdit;
        edtDatabase: TcxTextEdit;
        edtUser: TcxTextEdit;
        btnOK: TcxButton;
        btnCancle: TcxButton;
        cxLabel1: TcxLabel;
        cxLabel2: TcxLabel;
        cxLabel3: TcxLabel;
        cxLabel4: TcxLabel;
        edtPassword: TcxTextEdit;
        procedure FormShow(Sender: TObject);
        procedure btnOKClick(Sender: TObject);
        procedure btnCancleClick(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Conf: TConf;implementationuses RWini;{$R *.dfm}//将db.ini的登录信息填入窗体的各个edit组件里
    procedure TConf.FormShow(Sender: TObject);
    var
      sServer,sDatabase,sUser,sPassword : String;
    begin
      readParam(sServer,sDatabase,sUser,sPassword);
      self.edtServer.Text := sServer;
      self.edtDatabase.Text := sDatabase;
      self.edtUser.Text := sUser;
      self.edtPassword.Text := sPassword;
      self.ActiveControl := self.btnOK;
    end;//将信息写入db.ini文件 **
    procedure TConf.btnOKClick(Sender: TObject);
    var
      sServer,sDatabase,sUser,sPassword : String;
    begin
      sServer := self.edtServer.Text;
      sDatabase := self.edtDatabase.Text;
      sUser := self.edtUser.Text;
      sPassword := self.edtPassword.Text;
      writeParam(sServer,sDatabase,sUser,sPassword);
      close;
    end;procedure TConf.btnCancleClick(Sender: TObject);
    begin
      close;
    end;end.