如何逐行读取文本文件内容到ADOConnection的ConnectionString属性中用以设置连接到服务器合数据库等的属性,特别是将程序做成安装文件后是否可以在安装过程中读取,即当更换服务器后只要修改文本文件就能正确使用软件,而不用重新修改程序、打包、逐台客户机重新安装。Thanks a lot!

解决方案 »

  1.   

    同意  rikky(读书、心知、生活)  ;Var   MyIni : TIniFile ;
      
      
      MyIni := TIniFile.Create(FileNameWithPath) ;
      with MyIni do
      begin
        with ADOConnection1 do 
        begin  
          ConnectionString := ReadString('DataBase','ConnectionString','') ;
          LoginPrompt := False ;
          Open ;
        end ;
        Free ;
      end ;
    Ini 文件可以这样 :[DataBase]
    ConnectionString= ...
      

  2.   

    同意  rikky(读书、心知、生活)  ;Var   MyIni : TIniFile ;
      
      
      MyIni := TIniFile.Create(FileNameWithPath) ;
      with MyIni do
      begin
        with ADOConnection1 do 
        begin  
          ConnectionString := ReadString('DataBase','ConnectionString','') ;
          LoginPrompt := False ;
          Open ;
        end ;
        Free ;
      end ;
    Ini 文件可以这样 :[DataBase]
    ConnectionString= ...
      

  3.   

    只要你保存的时候是把ADOConnection.ConnectinString的值保存到文件中的
    就不需要逐行分析读取了
    直接读一行的值赋给ADOConnection.ConnectinString就行了
      

  4.   

    同意楼上各位的说法,用INI文件不过,我强烈推荐使用UDL文件,更灵活,其实UDL也是INI,不过UDL使用更加方便。
      

  5.   

    我是这样处理的,从注册表读服务器名,如ADOConnection连接失败,弹出对话框,输入服务器名,重新连接,连接成功输入注册表。
      

  6.   

    procedure Tfrm_START.FormCreate(Sender: TObject);
    var
      LocalVer, RemoteVer: Integer;   //本地版本号 、服务器版本号
      Reg: TRegistry;
      RegBase, ServerName, LocalFilePath, RemoteFilePath, FileName, Address, Host, Port, Service, s: String;
      Save_Cursor:TCursor;
    begin
      Reg := TRegistry.Create;
      RegBase := '\SoftWare\BlueSky\FileAutoDownLoad\';
    //读注册表找服务器-------------------------------
      try
        Reg.RootKey := HKEY_LOCAL_MACHINE;
        if Reg.OpenKey(KeyName,true) then
          ServerName := UpperCase(Reg.ReadString('ServerName'));   //读注册表中服务器名称;
      finally
        Reg.CloseKey;
      end;
      ConnectionIsValid(ServerName);  //按注册表中数据库服务器名进行数据库连接
      while (not ServerIsValid) do  //找不到数据库服务器
      begin
        ServerName := '服务器名';
        if not InputQuery('信息', '服务器名不正确,请重新输入:            ', ServerName) then  //退出
        begin
          NoNew := 0;
          Exit;
        end
        else   //有返回的数据库服务器名
        begin
          ConnectionIsValid(ServerName); //按输入的数据库服务器名进行数据库连接
        end;
      end;  LocalFilePath := UpperCase(Application.ExeName);
      FileName := ExtractFileName(LocalFilePath);
      try
        qryTemp.SQL.Text := 'select * from DL_FILE where DLFILE01 =:FilePath';
        qryTemp.Parameters.Items[0].Value := FileName;
        qryTemp.Open;
        if (not qryTemp.IsEmpty ) then
        begin
          RemoteFilePath := qryTemp.FieldValues['DLFILE02'];
          RemoteVer := qryTemp.FieldValues['DLFILE03'];
        end
        else
        begin
          MessageDlg('在数据库服务器表DL_FILE中找不到'+FileName+'对应的版本记录!'+#13+'无法下载最新版本的应用程序。请与软件供应商联系。', mtWarning ,[mbYes],0);
        end;
        qryTemp.SQL.Text := 'select * from DL_SERVER';
        qryTemp.Open;    if (not qryTemp.IsEmpty ) then
        begin
          Address := qryTemp.FieldValues['DL_SERVER01'];
          Host := qryTemp.FieldValues['DL_SERVER02'];
          Port := qryTemp.FieldValues['DL_SERVER03'];
          Service := qryTemp.FieldValues['DL_SERVER04'];      if (Reg.OpenKey(RegBase, true)) then
          begin
            s := Trim(Reg.ReadString(FileName));
            if s = '' then  LocalVer := 0
            else LocalVer := StrToInt(s);
            //LocalVer := (s="" ? 0:StrToInt(s));
            Reg.WriteString('',FileName);
            Reg.WriteString(FileName,IntToStr(RemoteVer));
            Reg.CloseKey;
            if (Reg.OpenKey(RegBase + 'CurrentFile', true)) then
            begin
              Reg.WriteString('LocalFilePathName',LocalFilePath);
              Reg.WriteString('RemoteFilePathName',RemoteFilePath);
            end;
            Reg.CloseKey;
            if (Reg.OpenKey(RegBase + 'ServerParameter', true)) then
            begin
              Reg.WriteString('Address',Address);
              Reg.WriteString('Host',Host);
              Reg.WriteString('Port',Port);
              Reg.WriteString('Service',Service);
            end;
            Reg.CloseKey;
          end;
          if (RemoteVer <> LocalVer) then
            NoNew := 2
          else NoNew := 1;
        end
        else NoNew := 1;
      finally
        Reg.Free;
      end;
    end;//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 连接数据库 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    procedure Tfrm_START.ConnectionIsValid(ServerName: String);
    Var
      Reg : TRegistry;
      ConnStr : String;
    begin
      ConnStr := 'Provider=SQLOLEDB.1;';
      ConnStr := ConnStr+ 'Password=scchuser2002;';
      ConnStr := ConnStr+'Persist Security Info=True;';
      ConnStr := ConnStr+'User ID=scchuser;';
      ConnStr := ConnStr+'Initial Catalog=LTMRPDB;';
      ConnStr := ConnStr+'Data Source=';
      ConnStr := ConnStr+ UpperCase(ServerName)+';';
      ConnStr := ConnStr+'Use Procedure for Prepare=1;';
      ConnStr := ConnStr+'Auto Translate=True;';
      ConnStr := ConnStr+'Packet Size=4096;';
      ConnStr := ConnStr+'Use Encryption for Data=False;';
      ConnStr := ConnStr+'Tag with column collation when possible=False;';
      try
        ADOCON_LOADVer.Connected := false;
        ADOCON_LOADVer.ConnectionString := ConnStr;
        ADOCON_LOADVer.Connected := true;
      except
        ADOCON_LOADVer.Connected := false;
      end;
      if ADOCON_LOADVer.Connected  then
      begin
        ServerIsValid := true;
        Reg := TRegistry.Create;
        try
          Reg.RootKey := HKEY_LOCAL_MACHINE;
          if Reg.OpenKey(KeyName,true) then
          begin
            Reg.WriteString('ServerName',ServerName);   //写入注册表;
          end;
        finally
          Reg.Free;
        end;
      end
      else ServerIsValid := false;
    end;