Delphi:如何將列表作為引數傳遞給SQL查詢?
阿新 • • 發佈:2020-12-07
我有一個整數或字串列表,需要作為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; beginresult := '('; 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']);