with AdoQuery do
begin
Close;
SQL.Clear;
SQL.Add('SELECT (name+' '+surname+' '+father) as initihal, address from user');
Open;
end;
如何在姓氏和父亲之间增加空间?我想在DbGrid中看到这样的结果
LionelAndrésMessi
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
子句。
如果使用内联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;