一尘不染

Delphi:如何将列表作为参数传递给SQL查询?

sql

我有一个整数或字符串列表,需要将其作为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。

编辑 :我正在考虑的答案是“ 不可能直接做 ”。如果有人给我一个没有恶意的答案,那么接受的答案将被更改。


阅读 127

收藏
2021-03-10

共1个答案

一尘不染

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']);
2021-03-10