如何使用 .ini 文件中的动态 SQL 查询?

问题描述 投票:0回答:1

我是 Delphi 和软件编程的新手。

我想找到一些使用

.ini
文件中的查询的建议。

我的目的是,当我首先在 DBGrid 中选择一些文件名,然后单击显示我选择的文件名的按钮,如果它们正确,则单击“确定”以使用文件名执行查询。

在这种情况下,每次选择文件名都会改变。那么,如何在

.ini
文件中执行查询以获得动态结果?

首先,这是

Queries.ini
文件中的文本:

[Query]
QSELECTEDFN=SELECT * FROM TEST_01 WHERE FILE_NAME IN (:FILE_NAME);

这是我的代码:

ini := TIniFile.Create('C:\file dir\Queries.ini');
try
  qSlctdByFN := ini.ReadString('QUERY', 'QSELECTEDFN', '');
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Text := qSlctdByFN;
  ADOQuery1.Parameters.ParamByName('FILE_NAME').Value := slselectedFN.CommaText;
  ADOQuery1.Active := true;
finally
  ini.Free;
end;

当我选择

1.txt
2.txt
时,查询应该是:

SELECT * FROM TEST_01 WHERE FILE_NAME IN ('1.txt,2.txt');

当我仅选择

3.txt
时,查询应该是:

SELECT * FROM TEST_01 WHERE FILE_NAME IN ('3.txt');
mysql delphi dynamic ini
1个回答
1
投票

您不能将 SQL 参数与

IN
子句一起使用。

处理此问题的另一种方法是将文件名放入

TStringList
中,将其
QuoteChar
设置为单引号 (
'
) 字符,然后使用
StringReplace()
来替换SQL 中的
':FILE_NAME'
具有
TStringList.DelimitedText
值。

ini := TIniFile.Create('C:\file dir\Queries.ini');
try
  qSlctdByFN := ini.ReadString('QUERY', 'QSELECTEDFN', ''); 
finally
  ini.Free;
end;
files := TStringList.Create;
try
  files.Assign(slSelectedFN);
  files.QuoteChar := #39;
  ADOQuery1.SQL.Text := StringReplace(qSlctdByFN, ':FILE_NAME', files.DelimitedText, []);
finally
  files.Free;
end;
ADOQuery1.Active := true;
© www.soinside.com 2019 - 2024. All rights reserved.