我的程序原来是用ADOConnection连接SQL Server数据库的,现在我想在ini文件中写,再在程序中调用ini文件连接数据库,这样我只要修改ini文件中的相关的地方就能使程序连到不同的数据库上。但我不知道ini文件里该写些什么,另外程序中该如何写连接语句?还望指教,谢谢!

解决方案 »

  1.   

    ADOConnection的
    connectionstring:=看delphi自动生成的,根据下面的组合[DATABASE]
    NAME=sa
    PASSWORD=
    SERVER= esu
    DATABASE= crmtemp
      

  2.   

    DATABASE.INI
    [SQL Server]
    ConnectString=Provider=SQLOLEDB.1;Password=sa;Persist Security Info=True;User ID=sa;Initial Catalog=PSMDB;Data Source=TPfunction InitDBConnect :String;
    var
      Buff: array[0..255] of char;
      WinDir: String;
      FIni: TIniFile;
    begin
      GetWindowsDirectory(Buff, SizeOf(Buff));
      WinDir := Buff;  if FileExists(WinDir + '\database.ini') then
      begin
        FIni := TIniFile.Create(WinDir + '\database.ini');
        try
          Result := FIni.ReadString('SQL Server', 'ConnectString','');
        finally
          FIni.Free;
        end;
       end
       else
         raise ENotFindConfig.Create('找不到系统配置文件database.ini');
       if Length(Result)= 0 then ENotFindConfig.Create('系统配置文件database.ini被破坏');
    end;
      

  3.   

    那如何才能进行ini文件中的语句判断啊?也就是说当ini文件中指的数据库信息错误时,例如出一个showmessage提示用户数据库库连接失败,该写在哪啊?还望指教,谢谢!
      

  4.   

    楼上的各位兄弟,别费力气了,ADOConnection对应的UDL文件实际就是一个INI文件,可以通过一个TINIFILE对象来直接读取啊其实你建立程序的时候就给ADOConnection指定他的ConnectionString属性,或者自己建立一个UDL文件(先建立一个文本文件,然后去DOS下改扩展名为UDL文件),然后双击打开DATA LINK PROPERTIES对话框,在里面编辑,最后你可以用NOTEPAD打开看看内容,就是一个INI文件,里面的那个连接字符串和CONNECTIONSTRING属性完全一致至于在程序中如何写,用下面的代码
    procedure GetUserDataBaseConnection;
    var
      DBIni:TIniFile;
    begin
      DBIni:=TIniFile.Create;
      DBIni.LoadFromFile(...{the path of the udl file u just created here!})
      ADOConnection1.ConnectionString:=DBIni.Text;  //将取出的连接字符串赋给ADOConnection控件的相关属性
      DBIni.Free;
    end;
      

  5.   

    楼上的各位的方法都很好,可如果对一个没用过文件的人来说,对其中的内容就不知道怎么写了,下面是我的方法:开始时你可以用ADOConnection控件边接到数据源,但不用激活它,然后在程序的OnCreate事件中写如下代码:
    var Ini: Tinifile;
    begin
      Ini :=Tinifile.Create(ExtractfilePath(Application.ExeName)+'yhwlScm.ini');
      try
        ini.WriteString(StrRection,'Password',sc.getBlockStr(sc.GetBlockStr(ConnectionString,2,';'),2,'=')) ;
        ini.WriteString(StrRection,'User ID',sc.getBlockStr(sc.GetBlockStr(ConnectionString,4,';'),2,'=')) ;
        ini.WriteString(StrRection,'Initial Catalog',sc.getBlockStr(sc.GetBlockStr(ConnectionString,5,';'),2,'=')) ;
        ini.WriteString(StrRection,'Data Source',sc.getBlockStr(sc.GetBlockStr(ConnectionString,6,';'),2,'=')) ;
      finally
        Ini.Free;
      end;
    end;
      //代码中的Sc.getBlockStr是获取指定字符的前或后的一个字符串
      这样当程序一运行系统就自动把要联系的相关信息写到yhwlScm.ini文件中了.当下次要读此文件时:
    var ini:Tinifile;
        Password,Userid,InitialCatalog,Server:string;
    begin
      result:='';
      ini:=Tinifile.Create(ExtractfilePath(Application.ExeName)+'yhwlScm.ini');
      try
        PassWord:=ini.readstring(StrSection,'Password','');
        Userid:=ini.readstring(StrSection,'User ID','');
        InitialCatalog:=ini.readstring(StrSection,'Initial Catalog','');
        Server:=ini.readstring(StrSection,'Data Source','');
        if (password='')and(userid='')and(InitialCatalog='')and(Server='') then result:=''
        else
        result:='Provider=SQLOLEDB.1;Password='+passWord+';Persist Security Info=True;User ID='+Userid+';Initial Catalog='+InitialCatalog+';Data Source='+Server;
      finally
        ini.free;
      end;
    end;
      

  6.   

    上面的方法都不错,我已经试成功了!但现在我想知道的是如何写出错信息,也就是当数据库连接不上时(有可能ini文件没写对,有可能数据库没打开),例如出一个showmessage('数据库连接失败,请检查后重试!'),并终止程序,而不是系统出一个出错信息,不知到该写在和处,还望指教!谢谢!
      

  7.   

    首先检查ADOConnection中是否有值,如果有则如下:
    try 
      ADOConnection.connected:=true;
    except
      showmessage('数据库连接失败,请检查后重试!');
    end
      

  8.   

    qxj(borland中国)哪有啊!你的程序中都是判断ini文件是否存在的,哪有判断里面语句是否正确的啊?请指明,谢谢!
      

  9.   

    [DataBase]
    ConnectString=Provider=SQLOLEDB.1;Password=;Persist Security Info=false;User ID=sa;Initial Catalog=库名;Data Source=服务器名Function InitDBConnect : String;
    var
        DataBaseIniFile:TIniFile;
        filename:string;
    begin
        filename:=ExtractFilePath(paramstr(0))+'INI\DataBase.ini';
        if FileExists(filename) then
        begin
            DataBaseIniFile := TIniFile.Create(filename);
            try
                Result := DataBaseIniFile.ReadString('DataBase', 'ConnectString','');
            finally
                DataBaseIniFile.Free;
            end;
       end;
    end;procedure TForm1.FormCreate(Sender: TObject);
      ADOConnection1.ConnectionString:=InitDBConnect;