我有一个整数或字符串列表,需要将其作为Delphi DataSet的参数传递。怎么做?
这是一个例子。MyQuery类似于:
select * from myTable where intKey in :listParam
我将参数设置为列表或数组或其他内容:
MyQuery.ParamByName('listParam').AsSomething := [1,2,3];
它将导致此查询发送到sql服务器:
select * from myTable where intKey in (1, 2, 3)
如果该解决方案也可以与字符串一起使用,则执行以下查询会更好:
select * from myTable where stringKey in :listParam
变得:
select * from myTable where stringKey in ('a', 'b', 'c')
我相信这是一个简单的问题,但是“ IN”并不是搜索网络的好关键字。
请回答如何在IDE中配置参数,查询以及如何传递参数。
我正在使用Delphi 7。
编辑 :我正在考虑的答案是“ 不可能直接做 ”。如果有人给我一个没有恶意的答案,那么接受的答案将被更改。
AFAIK,这是不可能直接。
您必须将列表转换为纯文本的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']);