转自:http://suguiyang.blog.51cto.com/1035725/375675

/----------------------------------------------------------//
//-------  Delphi对保存数据库连接信息的Ini文件的操作类 ------//
//-------  作用:封装对ini文件的操作                   ------//
//-------  类名称: IniOptions                         ------//
//-------  属性如下:                                  ------//
//-------    FconfigAutoLogon: Boolean (是否自动登录)  ------//
//-------    FconfigAuthenticationStyle: string        ------//
//-------    (表示身份验证方式,WindowsNT/SQLServer)   ------//
//-------    FconfigServerName: string  (服务器名称)   ------//
//-------    FconfigUserID: string      (登录名)       ------//
//-------    FconfigPassword: string    (登录密码)     ------//
//-------    FconfigDataBaseName: string(数据库名)   ------//
//-------  方法如下:                                  ------//
//-------    Function getIniFileAbsolutePath():string; ------//
//-------        1.获取Ini文件的绝对路径               ------//
//-------    Function IniFileExists():Boolean;         ------//
//-------        2.判断Ini文件是否存在                 ------//
//-------    Function createNewIniFile():Boolean;      ------//
//-------        3.创建新的Ini文件(默认配置)         ------//
//-------    procedure LoadSettings(Ini: TIniFile);    ------//
//-------        4.从Ini文件中读取配置信息到属性值中   ------//
//-------    procedure SaveSettings(Ini: TIniFile);    ------//
//-------        5.将属性值保存到Ini文件中             ------//
//-------    procedure LoadFromIniFile();              ------//
//-------        6.从Init文件中读取信息,调用1,2,3,4    ------//
//-------    procedure SaveToIniFile();                ------//
//-------        7.保存到Ini文件,调用1,2,3,5          ------//
//-------    作者: 苏贵阳    2010-8-15                ------//
//-----------------------------------------------------------//
//-------           IniOptions    使用说明             ------//
//-------  1.调用单元   uses IniOptionsUnit;           ------//
//-------  2.IniOptions.LoadFromIniFile();             ------//
//------- CB_FWQMC.Text := IniOptions.configServerName ------//
//----- 3. IniOptions.configDataBaseName:=CB_SJKM.Text; -----//
//-------  IniOptions.SaveToIniFile();                 ------//
//-----------------------------------------------------------//

unit IniOptionsUnit;

interface

uses    //使用到的包
 Classes, SysUtils, IniFiles, Forms, Windows, Messages,Dialogs;

const   //---常量定义

 IniFileRelativePath = 'ADOConnConfInfo.ini';        //---默认的Ini文件名

 //---配置文件中的关键字名称
 csIniconfigSection = 'config';
 {Section: config}
 csIniconfigAutoLogon = 'AutoLogon';
 csIniconfigAuthenticationStyle = 'AuthenticationStyle';
 csIniconfigServerName = 'ServerName';
 csIniconfigUserID = 'UserID';
 csIniconfigPassword = 'Password';
 csIniconfigDataBaseName = 'DataBaseName';

type
 TIniOptions = class(TObject)     //---定义类

 private

   //---属性定义
   {Section: config}
   FconfigAutoLogon: Boolean;
   FconfigAuthenticationStyle: string;
   FconfigServerName: string;
   FconfigUserID: string;
   FconfigPassword: string;
   FconfigDataBaseName: string;

 public

   //---方法定义
   Function getIniFileAbsolutePath():string;
   Function IniFileExists():Boolean;
   Function createNewIniFile():Boolean;
   procedure LoadSettings(Ini: TIniFile);
   procedure SaveSettings(Ini: TIniFile);
   procedure LoadFromIniFile();
   procedure SaveToIniFile();

   {Section: config}

   //--- 对属性值进行读取和保存操作,如 Get和Set
   property configAutoLogon: Boolean read FconfigAutoLogon write FconfigAutoLogon;
   property configAuthenticationStyle: string read FconfigAuthenticationStyle write FconfigAuthenticationStyle;
   property configServerName: string read FconfigServerName write FconfigServerName;
   property configUserID: string read FconfigUserID write FconfigUserID;
   property configPassword: string read FconfigPassword write FconfigPassword;
   property configDataBaseName: string read FconfigDataBaseName write FconfigDataBaseName;

 end;

var
 IniOptions: TIniOptions = nil;   //--- 生成一个对象IniOptions属于类TIniOptions

implementation

Function TIniOptions.getIniFileAbsolutePath():string;
//-------------------------------------------------------//
//------       getIniFileAbsolutePath 说明         ------//
//------  函数作用:获取Ini文件的绝对路径          ------//
//------  返回值:Ini文件的绝对路径                ------//
//-------------------------------------------------------//
var
 IniFileAbsolutePath : string;
begin
 IniFileAbsolutePath:= ExtractFilePath(application.ExeName); //获取INI文件路径。
 if IniFileAbsolutePath[length(IniFileAbsolutePath)]='' then
   IniFileAbsolutePath := IniFileAbsolutePath + IniFileRelativePath
 else
   IniFileAbsolutePath := IniFileAbsolutePath + IniFileRelativePath ;
 result := IniFileAbsolutePath ;
end;

Function TIniOptions.IniFileExists():Boolean;
//-------------------------------------------------------//
//------              IniFileExists 说明           ------//
//------  函数作用:判断Ini文件是否存在            ------//
//------  返回值:存在返回true,不存在返回false    ------//
//-------------------------------------------------------//
begin
 if FileExists(getIniFileAbsolutePath()) then
   result := True
 else   result := False;
end;

Function TIniOptions.createNewIniFile():Boolean;
//-------------------------------------------------------//
//------            createNewIniFile 说明          ------//
//------  函数作用:如果Ini文件不存在就创建新文件  ------//
//------  返回值:已存在返回false,创建成功返回TRUE------//
//-------------------------------------------------------//
var
 _file :Textfile;
 filehandle:Thandle;
begin
 if IniFileExists() then
 begin
   result := False;
 end
 else
 begin
   FileHandle:=FileCreate(getIniFileAbsolutePath());
   fileclose(FileHandle);
   AssignFile(_file,getIniFileAbsolutePath());
   rewrite(_file);
   try
     Writeln(_file,';AutoLogon用来表示是否自动登录');
     Writeln(_file,';AuthenticationStyle表示身份验证方式,WindowsNT/SQLServer');
     Writeln(_file,';ServerName表示SQL服务器名称');
     Writeln(_file,';UserID 表示登录名');
     Writeln(_file,';Password表示密码');
     Writeln(_file,';DataBaseName表示数据库名');
     Writeln(_file,'[config]');
     Writeln(_file,'AutoLogon=1');
     Writeln(_file,'AuthenticationStyle=SQLServer');
     Writeln(_file,'ServerName=(local)');
     Writeln(_file,'UserID=sa');
     Writeln(_file,'Password=');
     Writeln(_file,'DataBaseName=master');
   finally
     Closefile(_file);
   end;
   result := True;
 end;
end;

procedure TIniOptions.LoadSettings(Ini: TIniFile);
//-------------------------------------------------------//
//------              LoadSettings  说明           ------//
//------  作用:从Ini文件中读取配置信息到属性值中  ------//
//------  返回值:无                               ------//
//-------------------------------------------------------//
begin
 if Ini <> nil then
 begin
   {Section: config}
   FconfigAutoLogon := Ini.ReadBool(csIniconfigSection, csIniconfigAutoLogon, True);
   FconfigAuthenticationStyle := Ini.ReadString(csIniconfigSection, csIniconfigAuthenticationStyle, 'SQLServer');
   FconfigServerName := Ini.ReadString(csIniconfigSection, csIniconfigServerName, 'local');
   FconfigUserID := Ini.ReadString(csIniconfigSection, csIniconfigUserID, 'sa');
   FconfigPassword := Ini.ReadString(csIniconfigSection, csIniconfigPassword, '');
   FconfigDataBaseName := Ini.ReadString(csIniconfigSection, csIniconfigDataBaseName, 'master');
 end;
end;

procedure TIniOptions.SaveSettings(Ini: TIniFile);
//-------------------------------------------------------//
//------              SaveSettings  说明           ------//
//------  作用:将属性值保存到Ini文件中            ------//
//------  返回值:无                               ------//
//-------------------------------------------------------//
begin
 if Ini <> nil then
 begin
   {Section: config}
   Ini.WriteBool(csIniconfigSection, csIniconfigAutoLogon, FconfigAutoLogon);
   Ini.WriteString(csIniconfigSection, csIniconfigAuthenticationStyle, FconfigAuthenticationStyle);
   Ini.WriteString(csIniconfigSection, csIniconfigServerName, FconfigServerName);
   Ini.WriteString(csIniconfigSection, csIniconfigUserID, FconfigUserID);
   Ini.WriteString(csIniconfigSection, csIniconfigPassword, FconfigPassword);
   Ini.WriteString(csIniconfigSection, csIniconfigDataBaseName, FconfigDataBaseName);
 end;
end;

procedure TIniOptions.LoadFromIniFile();
//-------------------------------------------------------//
//------            LoadFromIniFile  说明          ------//
//------  作用:从Init文件中读取信息,调用1,2,3,4   ------//
//------  返回值:无                               ------//
//-------------------------------------------------------//
var
 Ini: TIniFile;
 FileName : string;
begin
 FileName := getIniFileAbsolutePath();
 if not IniFileExists() then createNewIniFile();
 Ini := TIniFile.Create(FileName);
 try
   LoadSettings(Ini);
 finally
   Ini.Free;
 end;
end;

procedure TIniOptions.SaveToIniFile();
//-------------------------------------------------------//
//------             SaveToIniFile  说明           ------//
//------  作用:保存到Ini文件,调用1,2,3,5         ------//
//------  返回值:无                               ------//
//-------------------------------------------------------//
var
 Ini: TIniFile;
 FileName : string;
begin
 FileName := getIniFileAbsolutePath();
 if not IniFileExists() then createNewIniFile();
 Ini := TIniFile.Create(FileName);
 try
   SaveSettings(Ini);
 finally
   Ini.Free;
 end;
end;

initialization
 IniOptions := TIniOptions.Create;

finalization
 IniOptions.Free;
end.

//---------------------------------------ADOConnConfInfo.ini-----------------------------------------//

;AutoLogon用来表示是否自动登录
;AuthenticationStyle表示身份验证方式,WindowsNT/SQLServer
;ServerName表示SQL服务器名称
;UserID 表示登录名
;Password表示密码
;DataBaseName表示数据库名
[config]
AutoLogon=1
AuthenticationStyle=WindowsNT
ServerName=111
UserID=sa
Password=
DataBaseName=111