gpt4 book ai didi

delphi - 如何将值列表作为 TOraQuery 的参数传递?

转载 作者:行者123 更新时间:2023-12-01 18:13:09 26 4
gpt4 key购买 nike

我有一个 TOraQuery,其 SQL 定义如下

SELECT ML.ID, Ml.detail1, Ml.detail2
FROM MY_LIST ML
WHERE
ML.ID in (:My_IDS)

如果我要即时构建这个查询,我自然会得到这样的结果:

SELECT ML.ID, Ml.detail1, Ml.detail2
FROM MY_LIST ML
WHERE
ML.ID in (14001,14002,14003)

但是,我想传入 14001,14002,14003 作为参数。

  myListQuery.Active := False;
myListQuery.ParamByName('My_IDS').AsString := '14001,14002,14003';
myListQuery.Active := True;

但是,这当然会生成 ORA-01722: invalid number。除了即时构建查询之外,我还有其他选择吗?

最佳答案

据我所知,这是不可能直接实现的。

您必须将该列表转换为纯文本的 SQL 列表。

例如:

function ListToText(const Args: array of string): string; overload;
var
i: integer;
begin
result := '(';
for i := 0 to high(Args) do
result := result+QuotedStr(Args[i])+',';
result[length(result)] := ')';
end;


function ListToText(const Args: array of integer): string; overload;
var
i: integer;
begin
result := '(';
for i := 0 to high(Args) do
result := result+IntToStr(Args[i])+',';
result[length(result)] := ')';
end;

这样使用:

SQL.Text := 'select * from myTable where intKey in '+ListToText([1,2,3]);
SQL.Text := 'select * from myTable where stringKey in '+ListToText(['a','b','c']);

或者根据您的情况:

myListQuery.SQL.Text := 'SELECT ML.ID, Ml.detail1, Ml.detail);
myListQuery.SQL.Add('FROM MY_LIST ML ');
myListQuery.SQL.Add('WHERE ');
myListQuery.SQL.Add('ML.ID in ') + ListToText([14001,14002,14003]);

关于delphi - 如何将值列表作为 TOraQuery 的参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30039017/

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