一、有必要了解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;

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

  1. delphi 创建数据库配置文件(TIniFile)

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

  2. mysql数据库my.ini配置文件中文详解

    mysql数据库my.ini配置文件中文详解 mysqld程序–目录和文件 basedir = path 使用给定目录作为根目录(安装目录). character-sets-dir = path 给出 ...

  3. MYSQL创建数据库时候直接指定编码和排序规则

    安装我 在网上搜索的结果执行 代码: sudo gedit /etc/mysql/my.cnf 设置了默认编码为 UTF8 代码: [client]port            = 3306sock ...

  4. MySQL数据库执行sql语句创建数据库和表提示The 'InnoDB' feature is disabled; you need MySQL built with 'InnoDB' to have it working

    MySQL创建数据库 只想sql文件创建表时候提示 The 'InnoDB' feature is disabled; you need MySQL built with 'InnoDB' to ha ...

  5. oracle10G 数据库名、实例名、ORACLE_SID 及创建数据库- hl3292转载修改(实践部分待校验)

    数据库名.实例名.数据库域名.全局数据库名.服务名 , 这是几个令很多初学者容易混淆的概念.相信很多初学者都与我一样被标题上这些个概念搞得一头雾水.我们现在就来把它们弄个明白. 一.数据库名 什么是数 ...

  6. 数据库入门(mySQL):创建数据库

    基于JetBrains DataGrip创建数据库.SQL语句创建数据库 MySQL数据库存储引擎和数据类型 创建数据库表及基本操作 导出数据库.删除数据库.导入数据库 一.基于JetBrains D ...

  7. 数据库my.ini配置

    数据库my.ini配置 通过配置文件统一配置的目的:统一管理 服务端(mysqld) .客户端(client) 配置了 mysqld(服务端) 的编码为utf8,那么再创建的数据库,默认编码都采用 1 ...

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

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

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

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

随机推荐

  1. Redis学习1

    Redis 学习记录 简介 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zs ...

  2. Geek to Live: Set up your personal Wikipedia

    http://lifehacker.com/163707/geek-to-live--set-up-your-personal-wikipedia Filed to: Wikipedia Captur ...

  3. Matlab多项式回归实现

    多项式回归也称多元非线性回归,是指包含两个以上变量的非线性回归模型.对于多元非线性回归模型求解的传统解决方案,仍然是想办法把它转化成标准的线性形式的多元回归模型来处理. 多元非线性回归分析方程 如果自 ...

  4. SSM环境下配置log4j输出sql和异常到控制台和本地日志文件中

    1.引入日志依赖包 <!--解决Spring使用slf4j输出日志与log4j冲突的问题--> <dependency> <groupId>org.slf4j< ...

  5. Mysql的transaction实现(转)

    (http://www.blogjava.net/i369/archive/2007/04/29/108906.html) transaction在数据库编程中是一个重要的概念,这样做可以控制对数据库 ...

  6. CSS3伪类使用方法实例

    有时候在网页设计中会涉及到很多看上去很繁琐的设计图,这时候都会很让人头疼,那么这时候伪类就可以来帮助你解决问题了. 下面有一段实例大家可以参考一下: <!DOCTYPE html> < ...

  7. 如何将centos7自带的firewall防火墙更换为iptables防火墙

    用惯了centos6的iptables防火墙,对firewall太无感了,那么如何改回原来熟悉的iptables防火墙呢? 1.关闭firewall防火墙 [root@centos7 html]# s ...

  8. 816 Ambiguous Coordinates (many cases problem)

    https://www.cnblogs.com/Java3y/p/8846955.html -- link of the problem 816 IDEA: check the dot and int ...

  9. CRUD全栈式编程架构之控制器的设计

    页面 这里界面我采用jquery miniui来做的,当你完全了解了整个设计之后可以轻松切换到其他的js框架,个人认为类似muniui,easyui等等这类可以将web界面做得和winform类似的框 ...

  10. jQuery实现网页右下角悬浮层提示

    最近有同事提到类似网页右下角的消息悬浮提示框的制作.我之前也做过一个类似的例子,很简单.是仿QQ消息.现在感觉之前的那个例子只是说了实现原理,整体上给你的感觉还是太丑,今天为大家带来一个新的例子.是D ...