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']);
  • 相关阅读:
    解决com.xpand.. starter-canal 依赖引入问题
    缓存预热加入二级缓存
    缓存预热的实现
    ShardingSphere 中有哪些分布式主键实现方式?
    ShardingSphere 如何实现系统的扩展性
    如何系统剖析 ShardingSphere 的代码结构?
    SharingSphere的数据脱敏
    ShardingSphere的分布式事务
    Qt 事件过滤器原理(installEventFilter函数)
    Qt Event 以及 Event Filter 事件处理
  • 原文地址:https://www.cnblogs.com/jijm123/p/14099347.html
Copyright © 2011-2022 走看看