AnyDac aka FireDac 无法生成更新查询

Posted

技术标签:

【中文标题】AnyDac aka FireDac 无法生成更新查询【英文标题】:AnyDac aka FireDac cannot generate update query 【发布时间】:2014-06-30 19:14:11 【问题描述】:

我已经使用 UniDac 很长时间了,并决定继续使用 FireDac,因为在继续使用后它具有良好的异步方法,我发现我的数据编辑不再工作它给我一个错误:

[FireDAC][物理]-330。无法生成更新查询。更新表未定义。

我在这里尝试做的是我有一个 TFDStoredProc 组件,它从数据库中获取所有数据并让我编辑它,使用 unidac 我可以轻松地编辑数据而不会出现这样的问题:

StoredProc.Edit;
StoredProcCreatedID.Value := SomeValue;
StoredProc.Post;

它有效,但使用 AnyDac 却没有,我尝试手动指定 UpdateTable,这会导致另一个问题:

[FireDAC][Phys][ODBC][Microsoft][SQL Server Native Client 11.0][SQL Server]列名“CreatedID”无效。

我正在使用 Microsoft SQL Server 2012 FireDac 8.0 和存储过程来获取结果有什么想法吗?

附言

查询如下所示

SELECT 
    CreatedBy as CreatedID,
    usr.UserName as CreatedBy
FROM 
    Sales
LEFT JOIN 
    Users usr ON usr.ID = Sales.CreatedBy

FireDac 更新构建器似乎无法识别字段上的别名,我们将不胜感激。

【问题讨论】:

你试过没有别名的查询吗? 不行,别名在查询中的作用非常大。 【参考方案1】:

好吧,我知道问题出在哪里,似乎如果您在查询中为字段指定别名,则 Origin 属性将设置为别名,而不是我下载的真实字段CNPack 对于 delphi 开发人员来说是必须的,它也是免费的,运行组件选择器并将我所有的别名字段更改为它们的真实字段并且它可以工作,但这仍然是 FireDac 组件中的一个大问题,因为它无法识别别名字段,让我们希望它会在未来得到修复,以便为每个查询指定它应该更新的表以及如果您从一个大项目迁移到我的案例中的 220 多个存储过程,哪些字段可以分配工作。

【讨论】:

以上是关于AnyDac aka FireDac 无法生成更新查询的主要内容,如果未能解决你的问题,请参考以下文章

使用带有anydac(现在为firedac)脚本的参数获取错误

AnyDAC (FireDAC) - 在 TBlobField.GetAsString 之后打开事务

从 Anydac 移动到 Firedac 时 NULL 丢失

使用 AnyDAC (FireDAC) 从 SQLite 表中读取切片数据 (MBTiles) 的最有效方法是啥?

KB4484218 更新后 FireDAC MSAcc ODBC 驱动程序损坏

使用 FireDac 仅更新重复行中的 1 个(无主键或唯一字段)