【问题标题】:"type mismatch expecting AutoInc actual LongWord" on FDQuery (Delphi XE6)FDQuery(Delphi XE6)上的“期望 AutoInc 实际 LongWord 的类型不匹配”
【发布时间】:2015-11-26 18:21:36
【问题描述】:

我们使用 Delphi XE6,错误的组件是 MySQL 4.1 中的 TFDQuery。

当我尝试使用组打开查询时,FDQuery 显示:

类型不匹配预期 AutoInc 实际 LongWord

在字段编辑器中,该字段是正确的,它显示AutoInc,但始终出现错误,如果我在查询中删除group by,则错误停止但结果错误,当我删除字段编辑器的所有字段时,再试一次,工作正常。

我尝试在字段编辑器中手动插入一个字段作为 Integer 字段,但它也不起作用。

我的表中有错误的字段 (NUMBOLE) 是 Integer 字段,AutoInc(来自 tabbolvenda 的主键)

  FDQuery1.Close;
  FDQuery1.SQL.Clear;
  FDQuery1.SQL.Add('select');
  FDQuery1.SQL.Add('b.NUMVENDA,');
  FDQuery1.SQL.Add('a.DATAVENDA,');
  FDQuery1.SQL.Add('b.NUMBOLE,');
  FDQuery1.SQL.Add('b.PARCELAS,');
  FDQuery1.SQL.Add('a.CODCLIENTE,');
  FDQuery1.SQL.Add('a.NOMECLIENTE,');
  FDQuery1.SQL.Add('b.DATAVTO,');
  FDQuery1.SQL.Add('a.MONTANTE,');
  FDQuery1.SQL.Add('b.DATAPTO,');
  FDQuery1.SQL.Add('if(b.EMABERTO = ''True'', ''Sim'',''Não'') as EMABERTO,');
  FDQuery1.SQL.Add('a.CUSTOVENDA,');
  FDQuery1.SQL.Add('a.LUCROVENDA,');
  FDQuery1.SQL.Add('a.COMISSAO');
  FDQuery1.SQL.Add('from tabvendas a inner join tabbolvenda b');
  FDQuery1.SQL.Add('on a.NUMVENDA = b.NUMVENDA');
  FDQuery1.SQL.Add('group by b.NUMVENDA order by b.NUMVENDA'); <--- if I remove this group by it works
  FDQuery1.Open;

FDQuery 上是否有任何属性可以使此错误消失?当我的项目使用 Zeos Query 在 Delphi 6 上时,相同的 select 不会显示任何错误消息。它只发生在 FDQuery 上。

【问题讨论】:

  • MySQL 在带有和不带有 GROUP BY 的 SELECT 列表中更改 auto-inc 列数据类型。当查询使用 GROUP BY 时,您是否创建了持久字段?

标签: mysql delphi delphi-xe6 firedac


【解决方案1】:

如果您不使用聚合函数,则 select 中的字段数必须等于 group by 中的字段数。
来自docs

SELECT expression1, expression2, ... expression_n, 
       aggregate_function (aggregate_expression)
FROM tables
WHERE conditions
GROUP BY expression1, expression2, ... expression_n;

在哪里expression1, expression2, ... expression_n - 未封装在聚合函数中且必须包含在 SQL 语句末尾的 GROUP BY 子句中的表达式。

【讨论】:

猜你喜欢
  • 2019-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-15
  • 2019-12-27
  • 2021-02-07
相关资源
最近更新 更多