gpt4 book ai didi

Delphi Tstringlist,获取字符串作为带引号、逗号分隔的字符串?

转载 作者:行者123 更新时间:2023-12-02 04:18:24 24 4
gpt4 key购买 nike

我有一个 Tstringlist,其中包含数据库表中使用的键列表。我想要一种简单的方法来生成一个包含所有键的字符串,每个键用逗号分隔并用单引号引起来。这样它就可以在 SQL 'IN' 语句中使用例如WHERE FieldX IN ('一','二','三')

我尝试过使用 quotechar,但在读取逗号文本时它会被忽略。例如以下代码

procedure junk;
var
SL : Tstringlist;
s : string;
begin
SL := Tstringlist.Create;
SL.Delimiter :=','; //comma delimiter
SL.QuoteChar := ''''; //single quote around strings
SL.Add('One');
SL.Add('Two');
SL.Add('Three');
try
s := SL.commatext;
showmessage(s);
finally
SL.Free;
end; //finally
end; //junk

显示消息一、二、三 - 不带任何引号。

我知道我可以从长远来看,就像

procedure junk;
var
SL : Tstringlist;
s : string;
i : integer;
begin
SL := Tstringlist.Create;
SL.Delimiter :=','; //comma delimiter
SL.Add('One');
SL.Add('Two');
SL.Add('Three');
try
s := '';
for I := 0 to SL.Count - 1 do
begin
s := s + ',' + '''' + SL[i] + '''';
end;
delete(s,1,1);
showmessage(s);
finally
SL.Free;
end;//finally
end;

但是有没有更简单的方法使用 Tstringlist 本身的属性?

最佳答案

如果您使用的是 D2006 或更高版本,则可以使用 CLASS HELPER:

USES Classes,StrUtils;

TYPE
TStringListHelper = CLASS HELPER FOR TStrings
FUNCTION ToSQL : STRING;
END;

FUNCTION TStringListHelper.ToSQL : STRING;
VAR
S : STRING;

FUNCTION QuotedStr(CONST S : STRING) : STRING;
BEGIN
Result:=''''+ReplaceStr(S,'''','''''')+''''
END;

BEGIN
Result:='';
FOR S IN Self DO BEGIN
IF Result='' THEN Result:='(' ELSE Result:=Result+',';
Result:=Result+QuotedStr(S)
END;
IF Result<>'' THEN Result:=Result+')'
END;

这段代码:

SL:=TStringList.Create;
SL.Add('One');
SL.Add('Two');
SL.Add('Number Three');
SL.Add('It''s number 4');
WRITELN('SELECT * FROM TABLE WHERE FIELD IN '+SL.ToSQL);

然后将输出:

SELECT * FROM TABLE WHERE FIELD IN ('One','Two','Number Three','It''s number 4')

关于Delphi Tstringlist,获取字符串作为带引号、逗号分隔的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33780081/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com