一、有必要了解INI文件的结构:

;注释

[小节名]

关键字=值

...

---- INI文件允许有多个小节,每个小节又允许有多个关键字, “=”后面是该关键字的值。

---- 值的类型有三种:字符串、整型数值和布尔值。其中字符串存贮在INI文件中时没有引号,布尔真值用1表示,布尔假值用0表示。

---- 注释以分号“;”开头。

二、定义

---- 1、在Interface的Uses节增加IniFiles;

---- 2、在Var变量定义部分增加一行:

myinifile:Tinifile;

---- 然后,就可以对变量myinifile进行创建、打开、读取、写入等操作了。

三、打开INI文件

myinifile:=Tinifile.create('program.ini');

--- 上面这一行语句将会为变量myinifile与具体的文件 program.ini建立联系,然后,就可以通过变量myinifile,来读写program.ini文件中的关键字的值了。

---- 值得注意的是,如果括号中的文件名没有指明路径的话,那么这个Program.ini文件会存储在Windows目录中,把Program.ini文件存储在应用程序当前目录中的方法是:为其指定完整的路径及文件名。下面的两条语句可以完成这个功能:

Filename:=ExtractFilePath(Paramstr(0))+'program.ini';

myinifile:=Tinifile.Create(filename);

四、读取关键字的值

--- 针对INI文件支持的字符串、整型数值、布尔值三种数据类型,TINIfiles类提供了三种不同的对象方法来读取INI文件中关键字的值。

--- 假设已定义变量vs、vi、vb分别为string、 integer、boolean类型。

vs:=myinifile.Readstring('小节名','关键字',缺省值);

vi:=myinifile.Readinteger('小节名','关键字',缺省值);

vb:=myinifile.Readbool('小节名','关键字',缺省值);

--- 其中缺省值为该INI文件不存在该关键字时返回的缺省值。

五、写入INI文件

---- 同样的,TInifile类也提供了三种不同的对象方法,向INI文件写入字符串、整型数及布尔类型的关键字。

myinifile.writestring('小节名','关键字',变量或字符串值);

myinifile.writeinteger('小节名','关键字',变量或整型数值);

myinifile.writebool('小节名','关键字',变量或True或False);

---- 当这个INI文件不存在时,上面的语句还会自动创建该INI文件。

六、删除关键字

---- 除了可用写入方法增加一个关键字,Tinifile类还提供了一个删除关键字的对象方法:

myinifile.DeleteKey('小节名','关键字');

七、小节操作

--- 增加一个小节可用写入的方法来完成,删除一个小节可用下面的对象方法:

myinifile.EraseSection('小节名');

--- 另外Tinifile类还提供了三种对象方法来对小节进行操作:

--- myinifile.readsection('小节名',TStrings变量);可将指定小节中的所有关键字名读取至一个字符串列表变量中;

--- myinifile.readsections(TStrings变量);可将INI文件中所有小节名读取至一个字符串列表变量中去。

---- myinifile.readsectionvalues('小节名',TStrings变量);可将INI文件中指定小节的所有行(包括关键字、=、值)读取至一个字符串列表变量中去。

八、释放

在适当的位置用下面的语句释放myinifile:

myinifile.distory;

九、一个实例

---- 下面用一个简单的例子(如图),演示了建立、读取、存贮INI文件的方法。myini.ini文件中包含有“程序参数”小节,和用户名称(字符串)、是否 正式用户(布尔值)和已运行时间(整型值)三个关键字。程序在窗体建立读取这些数据,并在窗体释放时写myini.ini文件。

--- 附源程序清单

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

inifiles, //配置操作文件

StdCtrls, ExtCtrls;

type

TForm1 = class(TForm)

Edit1: TEdit;

CheckBox1: TCheckBox;

Edit2: TEdit;

Label1: TLabel;

Label2: TLabel;

Timer1: TTimer;

Label3: TLabel;

procedure FormCreate(Sender: TObject);

procedure FormDestroy(Sender: TObject);

procedure Timer1Timer(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

var

myinifile:TInifile;

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);

var

filename:string;

begin

filename:=ExtractFilePath(paramstr(0))+'myini.ini';

myinifile:=TInifile.Create(filename);

edit1.Text:= myinifile.readstring('程序参数','用户名称','缺省的用户名称');

edit2.text:= inttostr(myinifile.readinteger('程序参数','已运行时间',0));

checkbox1.Checked:= myinifile.readbool('程序参数','是否正式用户',False);

end;

procedure TForm1.FormDestroy(Sender: TObject);

begin

myinifile.writestring('程序参数','用户名称',edit1.Text);

myinifile.writeinteger('程序参数','已运行时间',strtoint(edit2.text));

myinifile.writebool('程序参数','是否正式用户',checkbox1.Checked);

myinifile.Destroy;

end;

procedure TForm1.Timer1Timer(Sender: TObject);

begin

edit2.Text:=inttostr(strtoint(edit2.text)+1);

end;

end.

===================================================================================

在数据库应用程序的开发过程中,应用程序端和数据库服务器之间的连接方式是开发人员必须考虑的一个问题。很多情况都是开发人员编程时在设计期间配置好应用程序与数据库的连接,程序完成后打包生成安装文件,再在各客户端的计算机上安装。在这种情况下,要求数据库服务器及数据库都不能变动,否则客户端程序就无法连接到数据库服务器,从而造成应用程序无法使用。如果能够不论数据库服务器及数据库如何变动,都可以在各客户端配置数据库连接的话,就可以很好地解决这个问题,并且能够让开发出来的应用程序更加灵活,具有更好的移植性能。

数据库应用程序的开发工具中,delphi以快速、方便以及易于调试等优点而成为很多开发人员的首选工具。利用delphi,可以很方便地在应用程序客户端动态配置数据库连接。

首先有必要简单介绍一下ini配置文件的结构。

ini文件一般都有几个小节,每个小节可以有数个关键字,其格式为:

〔小节〕

关键字=值

关键字的值有三种类型:字符串、整数和布迩值。在本文中我们只使用字符串类型。在delphi中用readstring和writestring来读取和写入(覆盖)配置文件中的字符串值。

以下以利用ini配置文件和delphi自带的ADO控件来说明如何实现动态配置数据库连接这一功能。

这个程序要实现的功能是:程序运行时,先读取数据库连接的配置文件,如果正确则连接上数据库,程序正常运行;如果配置文件不存在或者不正确,无法连接上数据库,则询问是否重新设置配置文件,如回答“是”,就打开配置数据库连接窗口,配置成功后将正确的配置重新写入配置文件,程序正常运行。

先在程序数据模块中放入ADOConnection控件;在程序主窗口的单元文件uses里加上inifiles、ADOConEd和数据模块单元,申明两个变量:filename(String类型)和databaseset(Tinifile)。

主窗口的Activeate事件代码如下:

procedure TfmMain.FormActivate(Sender: TObject);

var filename:string;

databaseset:Tinifile;

begin

filename:=ExtractFilePath(Paramstr(0))+'databaseset.ini'; //设置配置文件的路径为执行程序目录,如果不设置目录的话程序会把配置文件放到windows系统目录中去。

databaseset:=TInifile.Create(filename);

//with fmDataModule do//这一句我在DELPHI6中没有通过调试,也不知道是什么意思,就画出来了

begin

try   //连接数据库

ADOConnYK.Close;  //ADOConnYK为ADOConnection控件

ADOConnYK.ConnectionString:=databaseset.ReadString('ykconn','connstr',''); //读取数据库连接配置字符串

ADOConnYK.Open; //如正确,连接上数据库

Except      //配置文件不存在或者不正确,无法连接到数据库

if Application.MessageBox('无法连接到数据库,要重新设置连接吗?','提示',MB_YESNO+MB_ICONQUESTION)=IDYES then

begin

ADOConnYK.Close;

if EditConnectionString(ADOConnYK) then //重新配置连接属性

begin      databaseset.WriteString('ykconn','connstr',ADOConnYK.ConnectionString); //用正确的配置字符串覆盖配置文件中的相应的关键字值。

ADOConnYK.Open;  //正确配置后连接上数据库

end;

end

else

begin

ShowMessage('数据库连接设置不正确,请与管理员联系后再使用本系统');

Application.Terminate;

end;

end;

FreeAndNil(databaseset); //释放配置文件所占资源

end;

end;

delphi 创建数据库配置文件(TIniFile)的更多相关文章

  1. 创建数据库配置文件ini(转)

    一.有必要了解INI文件的结构: ;注释 [小节名] 关键字=值 ... ---- INI文件允许有多个小节,每个小节又允许有多个关键字, “=”后面是该关键字的值. ---- 值的类型有三种:字符串 ...

  2. MVC CodeFirst简单的创建数据库(非常详细的步骤)

       最近在学习MVC的开发,相信有过开发经验的人初学一个新的框架时候的想法跟我一样最关心的就是这个框架如何架构,每个架构如何分工,以及最最关键的就是如何与数据库通信,再下来才是学习基础的页面设计啊等 ...

  3. Oracle 11g静默安装软件+手工创建数据库

    由于是二次跳转+远程操作,无法使用图形界面,不能直接图形界面安装.采用静默安装软件+手工创建数据库的方式完成需求. 静默模式安装Oracle软件,配置监听程序 手工建库 检查各组件是否符合要求 1. ...

  4. SQL Server 创建数据库邮件

    一. 背景 数据库发邮件通知数据库的运行状态(状态可以通过JOB形式获取)和信息,达到预警的效果. 二. 基础知识 msdb系统数据库保存有关Job,Database Mail,Nodifyicati ...

  5. 使用Entity Framework通过code first方式创建数据库和数据表

    开发环境 WIN10 Entity Framework6.0  MVC5.0  开发工具 VS2015  SqlServer2012 1.创建上下文Context继承DbContext,并创建其他的业 ...

  6. 主窗体里面打开子窗体&&打印饼图《Delphi 6数据库开发典型实例》--图表的绘制

    \Delphi 6数据库开发典型实例\图表的绘制 1.在主窗体里面打开子窗体:ShowForm(Tfrm_Print); procedure Tfrm_Main.ShowForm(AFormClass ...

  7. sql server 脚本创建数据库邮件

    sql server 脚本创建数据库邮件代码: --脚本创建数据库邮件 --1.开启数据库邮件 RECONFIGURE WITH OVERRIDE GO RECONFIGURE WITH OVERRI ...

  8. delphi 创建DBASE和FOXPRO两类DBF数据文件的差异

    delphi 创建DBASE和FOXPRO两类DBF数据文件的差异,主要有几点: 1.创建方法不同 DBASE的创建方法: Self.Table1.Close; Self.Table1.Active ...

  9. 使用Code First 创建数据库

    这是一个控制台程序,作用是通过Code First创建数据库. 1.添加EntityFrameWork的引用. 2.添加类 CodeFirstTest1.cs using System; using ...

随机推荐

  1. 9个Java初始化和回收的面试题

    1.Java中是如何区分重载方法的? 通过重载方法的参数类型和顺序来进行区分的. 注意:若参数类型和顺序均相同时,不管参数名是否相同,编译器均会报错,提示方法已经被定义.且不能根据返回值类型来区分,如 ...

  2. 通配符的匹配很全面, 但无法找到元素 'cache:advice' 的声明

    EB-INF\classes\spring-jdbc.xml] is invalid; nested exception is org.xml.sax.SAXParseException; lineN ...

  3. 30余套系统模版|DIV+CSS网页模板|简洁大气系统模板

    30余套系统模版|DIV+CSS网页模板|简洁大气系统模板.都是一些后台系统的模版,很适合开发一些管理系统,办公系统,网站后台系统等.使用很广泛,很实用的系统模版. 下载地址: 点击下载

  4. Info.plist和pch文件的作用,UIApplication,iOS程序的启动过程,AppDelegate 方法解释,UIWindow,生命周期方法

    Info.plist常见的设置 建立一个工程后,会在Supporting files文件夹下看到一个“工程名-Info.plist”的文件,该文件对工程做一些运行期的配置,非常重要,不能删除 注:在旧 ...

  5. HDU - 4815 Little Tiger vs. Deep Monkey (长春赛区C题)

    题意:有A,B两个人.n道题目.每题有相应的分数.B答对题目的概率是0.5.求A不输给B的概率不小于P要拿的最低分数 思路:DP,dp[i][j]来表示B答了前i题后分数为j的概率,,然后通过B的概率 ...

  6. 多线程下的NSOperation和NSOperationQueue的使用

    多线程下的NSOperation和NSOperationQueue的使用 NSOperation和NSOperationQueue的介绍: NSOperation是Cocoa中的一个抽象类,用来封装单 ...

  7. 从页面底部向上弹出dialog,消失时逐渐向下(转)

    我想实现一个效果,从底部向上逐渐弹出.如下图所示: 1.点击 显示 按钮时,一个dialog对话框从底部慢慢向上弹出. 2.关闭dialog时, dialog缓慢的移动向底部消失.很平滑的效果.   ...

  8. CDOJ 92 Journey(LCA&RMQ)

    题目连接:http://acm.uestc.edu.cn/#/problem/show/92 题意:给定一棵树,最后给加一条边,给定Q次查询,每次查询加上最后一条边之后是否比不加这条边要近,如果近的话 ...

  9. 线程技术 ☞ Future模式

    线程技术可以让我们的程序同时做多件事情,线程的工作模式有很多,常见的一种模式就是处理网站的并发,今天我来说说线程另一种很常见的模式,这个模式和前端里的ajax类似:浏览器一个主线程执行javascri ...

  10. try{...} catch {...} finally{...} 各种情况代码的执行情况

    try { int i = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("in the 'try'"); } ca ...