如何在delphi中组合AdoQuery sql语句中的字段?

问题描述 投票:1回答:2
with AdoQuery do
   begin
     Close;
     SQL.Clear;
     SQL.Add('SELECT (name+' '+surname+' '+father) as initihal, address from user');
     Open;
   end;

如何在姓氏和父亲之间增加空间?我想在DbGrid中看到这样的结果

LionelAndrésMessi

delphi ado
2个回答
0
投票

ADO层/后端服务器应该可以返回一个列值,该值是一个包含许多列值和字符串文字的表达式。

当你试图用Delphi源代码构建你的SQL语句时(很少有一个好主意,你)你需要从编译器的角度以语法正确的方式表达你想要的东西,并从中产生所需的结果。你的RDMS。为此,SQL.Add(...)中除了外部两个之外的所有单引号都需要加倍,否则在编译时会出现语法错误。

但是,即使您已经这样做了,您的SQL仍然可能无法在运行时正确执行,具体取决于您的结果集中的列命名是否可被后端服务器消化。最好使用可用于RDMS的任何查询工具创建和测试Select语句,然后只有在从RDMS的pov中正确运行后才尝试在Delphi中进行设置。

顺便说一句,如果你习惯使用QuotedStr函数构建你想要的列值,你会遇到更少的问题 - 你显然需要语法练习所以我让你在在线帮助中查看。

此外,如果您需要通过指定Where子句来约束结果集,请确保以最小化SQL包含来自用户的输入文本时出现的Sql Injection(https://en.wikipedia.org/wiki/SQL_injection)风险的方式执行此操作。这样做的赌注方式是使用参数化的Where子句。


0
投票

如果使用内联SQL,则必须转义引号字符或使用返回空格的函数。您将无法更新结果。另一个选择是在Delphi ADOQuery组件中添加计算字段,并在OnCalcFields中执行组合客户端。

with AdoQuery do
   begin
     Close;
     SQL.Clear;
     SQL.Add('SELECT name+'' ''+surname+'' ''+father as initihal, address from user');
     Open;
   end;

如果将SQL Server用于数据库,则可以使用space()函数。

with AdoQuery do
   begin
     Close;
     SQL.Clear;
     SQL.Add('SELECT name+ space(1) + surname+ space(1) +father as initihal, address from user');
     Open;
   end;
© www.soinside.com 2019 - 2024. All rights reserved.