如何读取类似于INI文件的内容?(100分)

  • 主题发起人 主题发起人 guqiu
  • 开始时间 开始时间
G

guqiu

Unregistered / Unconfirmed
GUEST, unregistred user!
例如,
[SQL]
select * from MyTable where KeyValue=:KeyValue and OtherField=:OtherField
[Params]
KeyValue=Integer
OtherField=String
我该怎么把[SQL]节点下的这个SQL读到SqlQuery的SQL值中?
 
1:当文本读,做处理
2:写的时候就按照标准ini文件
 
ini文件第一段改成:
[SQL]
Text=select * from MyTable where KeyValue=:KeyValue and OtherField=:OtherField

uses IniFiles;

var
IniFile: TIniFile;
KeyValue: Integer;
sSQL, OtherField: string;
begin
IniFile := TIniFile.Create(FileName);
sSQL := IniFile.ReadString('SQL', 'Text', '');
KeyValue := IniFile.ReadInteger('Params', 'KeyValue', 0);
OtherField := IniFile.ReadString('Params', 'OtherField', '');
with SqlQuery do //假定SqlQuery是ADOQuery
begin
Close;
SQL.Text := sSQL;
Parameters.ParamByName('KeyValue').Value := KeyValue;
Parameters.ParamByName('OtherField').Value := OtherField;
Open;
end;
end;
 
做成INI文件,直接讀。
 
a:TStrings
a:=TStringList.create

a.loadformfile
 
這個不容易麽。
 
帮你顶一个,接个小分
 
再顶一个
 
//读配置文件函数
function GetIniData(N1, N2: String): String;
var
strResult, FileName, PN1, PN2:PChar;
begin
GetMem(FileName, 100);
Try
GetMem(StrResult, 140);
GetMem(PN1,20);
GetMem(PN2,20);
try
GetPrivateProfileString(StrPCopy(PN1, N1), StrPCopy(PN2,N2),
'', strResult, 140, StrPCopy(FileName, DirString + '/Config.ini'));
Result := StrResult; //读取数据
finally
FreeMem(StrResult);
FreeMem(PN1);
FreeMem(PN2);
end;
finally
FreeMem(FileName);
end;
end;

//写配置文件函数
function WriteIniData(N1, N2, V: String): Bool;
var
FileName, PN1, PN2, PV: PChar;
begin
GetMem(FileName, 100);
Try
GetMem(PN1, 20);
GetMem(PN2, 20);
GetMem(PV, 140);
try
if V = '' then
begin
WritePrivateProfileString(StrPCopy(PN1, N1), // []中标题的名字
StrPCopy(PN2, N2), Nil,
StrPCopy(FileName, DirString + '/Config.ini'))
end
else
WritePrivateProfileString(StrPCopy(PN1, N1), // []中标题的名字
StrPCopy(PN2, N2), // 要写入"="号前的字符串
StrPCopy(PV, V), //要写入的数据
StrPCopy(FileName, DirString + '/Config.ini')); // 调用的文件名
Result := True;
finally
FreeMem(PN1);
FreeMem(PN2);
FreeMem(PV);
end;
finally
FreeMem(FileName);
end;
end;
 
在程序其他地方调用这两个函数就可以了。
 
谢谢各大虾不啬赐教。可是我不想写成标准INI格式的。
 
来自:hzjzxp, 时间:2008-1-24 8:49:59, ID:3869482
1:当文本读,做处理
2:写的时候就按照标准ini文件
能不能来个例子看看?谢谢
 
你不想写成标准INI格式有什么特别意义吗。
 
呵呵,我见过这么写的,自己折腾很久没弄出来,所以想知道这是怎么实现的,
没什么特别意义。
 
INI中有ReadSectionValues这个方法。可以读出某个节点下所有的值。
能不能写个类似的代码,能把[SQL]节点下的语句取出来?
哪位大虾指导指导啊?
 
晕,有现成的不用绕这么大弯做什么呢?
想对内容加密的话,只要适当的转换一下字符就是了.
 
来自:sbzldlb, 时间:2008-1-24 9:35:51, ID:3869504
a:TStrings
a:=TStringList.create

a.loadformfile

==========
这个方法不错,然后你就循环遍历这个STRINGLIST并且用条件判断你的特征字串,用pos/copy两个函数获取等于号以后的字符串,这样道理上是可行的。
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
535
import
I
后退
顶部