通过数据库连接参数保证程序可移植性

ZDNet软件频道 时间:2009-04-10 作者:赛迪网 yuanjing | 天新网 我要评论()
本文关键词:Mssql SQL SQL Server 数据库 SQL Server
在设计数据库应用程序的时候,经常需要将一些信息从程序中独立出来,以保证程序的可移植性。其中最重要的信息就是数据库的连接参数。

下面要做的工作就是编写代码,在程序执行的时候从INI文件中读取数据库连接参数,为此,我编写了下面的代码:

  
  //RWini.pas
  {
  模块名称:配置文件读写
  编写人:blue
  编写日期:2003-4-26
  模块功能:从系统配置文件中读取系统运行所需的各项参数
       将系统运行所需的各项参数写入系统配置文件
       生成数据库连接字符串
  }
  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.
 

在程序数据模块的Create事件中添加下面的代码:

  
  procedure TDM.DataModuleCreate(Sender: TObject);
  var
   confForm : TConf;
  begin
   conn.ConnectionString := RWini.getConnStr;
   try
    conn.Open;
   except
    on Err : EOLEException do
    begin
     confForm := TConf.Create(self);
     confForm.ShowModal; 
    end;
   end;
  end;

这样,在程序执行过程中,将自动从INI文件中读取数据库连接参数,连接数据库,如果连接出现错误,将显示参数配置窗口,让用户配置数据库连接参数。配置窗口的代码如下:

  
  //上面的代码省略
  uses RWini;
  
  {$R *.dfm}
  
  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;
  
  procedure TConf.btnCancelClick(Sender: TObject);
  begin
   close;
  end;
  
  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;

Mssql

SQL

SQL Server

数据库

SQL Server


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134