【问题标题】:Insert Into statement using arrays in Delphi isn't working在 Delphi 中使用数组的 Insert Into 语句不起作用
【发布时间】:2016-11-01 11:25:20
【问题描述】:

所以我正在为学校做一个 Delphi 7 项目,需要我将 SQL 与 Delphi 程序集成。我使用 Microsoft 访问作为我的数据库。我正在尝试在 insert into 语句中使用字符串数组,但由于某种原因,我在 INSERT INTO 语句中经常出现语法错误。我的插入代码是:

ADOQuery1.SQL.Clear;                     
ADOQuery1.SQL.Add('INSERT INTO ' + IntToStr(o) + ' (' + column[t] + ')');
ADOQuery1.SQL.Add('VALUES ("' + Stats[t] + '")');  
ADOQuery1.SQL.Add('WHERE No = "' + Stats[1] + '" ');                            
ADOQuery1.ExecSQL;

o 是表示表名的数字,column[t] 是我希望 Stats[t] 出现的列。

我该如何解决这个错误?

【问题讨论】:

  • Inttostr ?是表名吗?
  • 不要直接编写 SQL(这很难调试),而是将查询创建为临时字符串并使用调试器进行检查。一旦你看到生成的字符串是什么样子的,你也许可以自己解决问题。就目前的情况而言,我们不知道统计数据和列是什么或看起来像什么。
  • @Sami, "0 is not valid table name" - ms-access 中没有这样的限制
  • @Sami,“你能把表重命名为 '0' 吗?” - 在访问中你可以。 “这是好办法吗?” - 不。我不会用它作为表名。
  • @Sami 在我看来o(小写字母'o')是一个保存整数的变量。将您的表称为“1234”是否是一种好习惯是另一个问题。

标签: sql delphi ms-access


【解决方案1】:

您不能将WHEREINSERT 语句一起使用。

SQL INSERT INTO Statement

INSERT INTO Statement (Microsoft Access SQL)

为了获得最佳实践,了解如何使用Parameters in Queries

【讨论】:

    【解决方案2】:

    插入表格:

    ADOQuery1.Parameters.ParamByName('Col1').Value:=Va1;
    ADOQuery1.Parameters.ParamByName('Col2').Value:=Va2;
    ADOQuery1.SQL.Clear;
    ADOQuery1.SQL.Text := 'INSERT INTO YourTable Values(:Col1,:Col2)';
    ADOQuery1.ExecSQL;
    

    注意:

    不能INSERT INTO 语句中使用 WHERE 子句。

    如果名称是数字,最好重命名表格。

    【讨论】:

    • 您应该在分配 SQL 文本之后 分配参数值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-27
    • 1970-01-01
    相关资源
    最近更新 更多