1. 程式人生 > 實用技巧 >Delphi:如何將列表作為引數傳遞給SQL查詢?

Delphi:如何將列表作為引數傳遞給SQL查詢?

我有一個整數或字串列表,需要作為Delphi DataSet的引數傳遞.怎麼做?

這是一個例子. MyQuery是這樣的:

select * from myTable where intKey in :listParam

我將一個引數設定為列表或陣列或其他內容:

MyQuery.ParamByName('listParam').AsSomething := [1,2,3];

並將導致此查詢傳送到sql server:

select * from myTable where intKey in (1,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,3]);
SQL.Text := 'select * from myTable where stringKey in '+ListToText(['a','c']);