Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi ADO SQL语法错误_Sql_Delphi_Syntax - Fatal编程技术网

Delphi ADO SQL语法错误

Delphi ADO SQL语法错误,sql,delphi,syntax,Sql,Delphi,Syntax,我在处理以下代码行时遇到语法错误。特别是在AQ_Query.Open上 procedure THauptfenster.Button1Click(Sender: TObject); var option: TZahlerArray; begin option := werZahlte; AQ_Query.Close; AQ_Query.SQL.Clear; AQ_Query.SQL.Add('USE wgwgwg;'); AQ_Query.SQL.Add('I

我在处理以下代码行时遇到语法错误。特别是在AQ_Query.Open上

procedure THauptfenster.Button1Click(Sender: TObject);
var
    option: TZahlerArray;
begin
    option := werZahlte;
    AQ_Query.Close;
  AQ_Query.SQL.Clear;
  AQ_Query.SQL.Add('USE wgwgwg;');
  AQ_Query.SQL.Add('INSERT INTO abrechnung ');
  AQ_Query.SQL.Add('(`datum`, `titel`, `betrag`, `waldemar`, `jonas`, `ali`, `ben`)');
  AQ_Query.SQL.Add(' VALUES ');
  AQ_Query.SQL.Add('(:datum, :essen, :betrag, :waldemar, :jonas, :ali, :ben);');
  AQ_Query.Parameters.ParamByName('datum').Value := DateToStr(mcDatum.Date);
  AQ_Query.Parameters.ParamByName('essen').Value := ledTitel.Text;
  AQ_Query.Parameters.ParamByName('betrag').Value := ledPreis.Text;
  AQ_Query.Parameters.ParamByName('waldemar').Value := option[0];
  AQ_Query.Parameters.ParamByName('jonas').Value := option[1];
  AQ_Query.Parameters.ParamByName('ali').Value := option[2];
  AQ_Query.Parameters.ParamByName('ben').Value := option[3];
  AQ_Query.Open;
end;
错误:


我使用的是MySQL Delphi 2010。

在我看来,就像你在第三个
AQ\u Query.SQL上使用反勾号一样。添加
行,当你需要使用普通单引号时。

在我看来,就像你在第三个
AQ\u Query.SQL上使用反勾号一样。添加
行,当你需要使用普通单引号时

  • USE和INSERT是两种不同的SQL 命令
  • MySQL不支持这样做 称为“批次”
  • =>您必须逐个调用这些命令

  • USE和INSERT是两种不同的SQL 命令
  • MySQL不支持这样做 称为“批次”

  • =>您必须逐个调用这些命令

    使用sql脚本中的数据库

    AQ_Query.SQL.Add('INSERT INTO wgwgwg.dbo.abrechnung ');
      AQ_Query.SQL.Add('(`wgwgwg.dbo.abrechnung.datum`, `wgwgwg.dbo.abrechnungtitel`, `wgwgwg.dbo.abrechnungbetrag`, `wgwgwg.dbo.abrechnungwaldemar`, `wgwgwg.dbo.abrechnungjonas`, `wgwgwg.dbo.abrechnungali`, `wgwgwg.dbo.abrechnungben`)');
    
      AQ_Query.SQL.Add(' VALUES ');
    
      AQ_Query.SQL.Add('(:datum, :essen, :betrag, :waldemar, :jonas, :ali, :ben);');
      AQ_Query.Parameters.ParamByName('datum').Value := DateToStr(mcDatum.Date);
      AQ_Query.Parameters.ParamByName('essen').Value := ledTitel.Text;
      AQ_Query.Parameters.ParamByName('betrag').Value := ledPreis.Text;
      AQ_Query.Parameters.ParamByName('waldemar').Value := option[0];
      AQ_Query.Parameters.ParamByName('jonas').Value := option[1];
      AQ_Query.Parameters.ParamByName('ali').Value := option[2];
      AQ_Query.Parameters.ParamByName('ben').Value := option[3];
    

    您还可以建立到wgwg的新连接,并将您的AQ_查询引用到新连接,使用sql脚本中的数据库

    AQ_Query.SQL.Add('INSERT INTO wgwgwg.dbo.abrechnung ');
      AQ_Query.SQL.Add('(`wgwgwg.dbo.abrechnung.datum`, `wgwgwg.dbo.abrechnungtitel`, `wgwgwg.dbo.abrechnungbetrag`, `wgwgwg.dbo.abrechnungwaldemar`, `wgwgwg.dbo.abrechnungjonas`, `wgwgwg.dbo.abrechnungali`, `wgwgwg.dbo.abrechnungben`)');
    
      AQ_Query.SQL.Add(' VALUES ');
    
      AQ_Query.SQL.Add('(:datum, :essen, :betrag, :waldemar, :jonas, :ali, :ben);');
      AQ_Query.Parameters.ParamByName('datum').Value := DateToStr(mcDatum.Date);
      AQ_Query.Parameters.ParamByName('essen').Value := ledTitel.Text;
      AQ_Query.Parameters.ParamByName('betrag').Value := ledPreis.Text;
      AQ_Query.Parameters.ParamByName('waldemar').Value := option[0];
      AQ_Query.Parameters.ParamByName('jonas').Value := option[1];
      AQ_Query.Parameters.ParamByName('ali').Value := option[2];
      AQ_Query.Parameters.ParamByName('ben').Value := option[3];
    

    你也可以建立一个到WGWG的新连接,并将你的AQ_查询引用到新连接

    Yep,这就是错误消息所指向的那一行,我在那里没有看到任何其他内容……实际上,因为反勾中的项目显然是列名,根本不需要任何标点符号。你可以用方括号括住列名([datum]、[titel]、[betrag]……虽然不是必需的。错误消息指向INSERT语句,而不是列列表。(第2行是INSERT语句,第1行是USE语句)请看Dmitry的答案-我认为他是对的。我不认为您可以使用ADO查询对象来执行脚本,只执行单个语句。是的,这就是错误消息所指向的行,我在其中没有看到任何其他内容…实际上,由于backticks中的项显然是列名,因此不需要任何类型的点号完全不需要。可以用方括号括住列名。“([datum]、[titel]、[betrag]……尽管不是必需的。错误消息指向INSERT语句,而不是列列表。(第2行是INSERT语句,第1行是USE语句)。请看Dmitry的回答-我认为他是对的。我认为您不能使用ADO查询对象来执行脚本,只能执行一条语句。好的。我现在有两条不同的语句。不过,我需要调用AQ_query.ExecSql来插入。Open不起作用,因为它说:“AQ_查询不返回任何数据。”但是,它不会在DBGrid中更新。如何更新它?是的,对于返回结果的查询,您使用Open,否则使用ExecSQL。原始问题中的DBGrid功能在哪里?!好的。我现在有两个不同的语句。但是,我需要调用AQ_Query.ExecSQL来插入。Open不起作用,因为它说:“AQ_查询不返回任何数据。”但它不会在DBGrid中更新。如何更新它?是的,对于返回结果的查询,您使用Open,否则使用ExecSQL。原始问题中的DBGrid功能在哪里?!wgwgwg.dbo.abrethnung.datum中的dbo来自哪里?数据库所有者(dbo)dbo是具有执行数据库中所有活动的隐含权限的用户。使用数据库的sysadmin固定服务器角色的任何成员都将映射到每个数据库中名为dbo的特殊用户。此外,sysadmin固定服务器角色的任何成员创建的任何对象都自动属于dbo。请参阅:该dbo来自何处在数据库所有者(dbo)的wgwg.dbo.abrethnung.datum中dbo是具有执行数据库中所有活动的隐含权限的用户。使用数据库的sysadmin固定服务器角色的任何成员都将映射到每个数据库中名为dbo的特殊用户。此外,sysadmin固定服务器角色的任何成员创建的任何对象都自动属于dbo。请参阅: