zoukankan      html  css  js  c++  java
  • 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']);
  • 相关阅读:
    杭电1466------简单的dp
    hdu2037-----------贪心, 活动安排问题
    两个钟表问题。
    杭电HDU1042(有点坑的高精度)
    hd1496---->这道题是水水的数论吗?
    LightOJ::1077 -----奇妙的最大公约数
    并查集练兵场
    欧拉函数
    位运算---水题
    矩阵快速幂
  • 原文地址:https://www.cnblogs.com/jijm123/p/14099347.html
Copyright © 2011-2022 走看看