Delphi + Zeos上的临时自动增量列,多个查询失败了吗?

时间:2013-02-27 07:50:16

标签: mysql delphi zeos

假设我的表格很简单:

CREATE TABLE Bands (Name VARCHAR(20) NOT NULL) ENGINE = INNODB;
INSERT INTO Bands VALUES ('Hammerfall'), ('Helloween'), ('Haggard'),
                         ('Therion'), ('Tarja');

并运行查询:

SET @i := 0;
SELECT @i := @i + 1 No, Name
FROM Bands
WHERE Name LIKE 'H%'

在HeidiSQL和PhyMyAdmin上运行良好:

1 Hammerfall
2 Helloween
3 Haggard

但在Delphi 2009失败并出现错误

  

SQL错误:SQL语法中有错误;查看与MySQL服务器版本对应的手册,以便在'SELECT @i:= @ i + 1附近使用正确的语法。否,名称来自乐队WHERE名称喜欢'H%'

我在TZQuery.SQL框中编写查询,查询 .SQL.Text和查询 .SQL.Add()。都失败了。

有没有办法运行该查询?

我将使用的真正查询是加入一些20多列的表来生成一些报告。 但我甚至不能让这个小东西起作用~__~

1 个答案:

答案 0 :(得分:2)

正如评论者所述,问题是双重的。

  1. 您不能在单个SQL中执行2个语句(这是针对SQL注入的保护)。

  2. 如果:,您无法使用TQuery.CheckParams = true

  3. 请注意,让InnoDB表没有明确的主键是个坏主意 问题是,如果你不创建PK,MySQL将为你创建一个隐藏的PK,这会降低连接性能。

    如果你想让InnoDB高效运行,建议你创建

    integer primary key auto_increment
    

    每个表格中的字段。