You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Delphi中如何为SQL查询的字符串参数添加单引号?代码修正

Delphi生成SQL语句时字符串未加单引号的语法问题修复

原Delphi代码

var
  strng,value,UserName : WideString;
  Query :  Smplquery;
begin
  strng := 'table';
  value := 'column';
    
  Username := 'CN=ABC[EXT] XYZ, AB=HELLO EFG,AB=SDRTY0045,AB=DW,AB=BNKM,HB=SWCD,HB=4QW,HB=PKL';
  Query := CreateSmplquery();
    
  Query.SelectStatement:= format('select * from %s where CONVERT(VARCHAR,%s'+') = (select convert(varchar,%s'+'))',[strng, value, UserName]);
  Query.Run;
end;

当前生成的错误SQL(语法问题:字符串未被单引号包裹)

select *
from table
where CONVERT(VARCHAR,column) = (select convert(varchar,CN=ABC[EXT] XYZ, AB=HELLO EFG,AB=SDRTY0045,AB=DW,AB=BNKM,HB=SWCD,HB=4QW,HB=PKL))

目标SQL语句

select *
from table
where CONVERT(VARCHAR,column) = (select convert(varchar,'CN=ABC[EXT] XYZ, AB=HELLO EFG,AB=SDRTY0045,AB=DW,AB=BNKM,HB=SWCD,HB=4QW,HB=PKL'))

修复方案

只需在format函数的SQL模板中,给对应UserName的占位符加上单引号(注意Delphi中字符串里的单引号需用两个单引号转义),修改后的代码如下:

var
  strng,value,UserName : WideString;
  Query :  Smplquery;
begin
  strng := 'table';
  value := 'column';
    
  Username := 'CN=ABC[EXT] XYZ, AB=HELLO EFG,AB=SDRTY0045,AB=DW,AB=BNKM,HB=SWCD,HB=4QW,HB=PKL';
  Query := CreateSmplquery();
    
  Query.SelectStatement:= format('select * from %s where CONVERT(VARCHAR,%s) = (select convert(varchar,''%s''))',[strng, value, UserName]);
  Query.Run;
end;

内容的提问来源于stack exchange,提问作者Lucas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 20:55:03