【问题标题】:FireDAC: How to avoid "Cannot describe type" error? (on a postgres geometry column)FireDAC:如何避免“无法描述类型”错误? (在 postgres 几何列上)
【发布时间】:2018-03-30 06:16:46
【问题描述】:

我已阅读文档 (http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Defining_Connection_(FireDAC)) 必须将连接参数“UnknownFormat”设置为“BYTEA”,以避免此错误。 但是,我 设置了该参数,但仍然出现该错误。

详情: 一个带有 FDConnection 和 FDQuery 的简单 VCL 表单应用程序。测试了 FDConnection 并将 UnknownFormat 参数设置为 ufBYTEA。 在从表中选择几何字段的 FDQuery 中放置一条 SQL 选择语句。执行时出现错误。

【问题讨论】:

    标签: postgresql delphi postgis firedac bytea


    【解决方案1】:

    使用 PostgreSQL 10.1、PostGIS 2.4.3 在 Delphi Tokyo 10.2.3 中复制。问题报告RSP-20251

    但我认为这无关紧要,因为我猜您只是返回了原始几何数据(因为它们由 PostGIS 存储)而没有正确的geometry output。这是因为当您返回数据时,例如在 WKB 格式中,使用 ST_AsBinary 函数,该列将由语句描述。

    因此,请检查您的 SQL 命令并检查您是否没有返回原始 geometry。如果是这样,请返回正确的geometry output

    【讨论】:

    • 这至少解决了我的问题,非常感谢! (但我仍然不明白为什么会出现该错误消息)
    • 不客气!它解决了您的问题,因为您不应该处理原始内部 PostGIS 数据格式。正如我所说,我无法使用上述工具重现您所描述的内容。我已经检查了 Tokyo 源代码,它已正确实现(仅当 UnknownFormat 连接参数默认为 Error 时才会引发异常)。并且 PostGIS 在返回原始几何时返回未描述的列做得很好。
    • 您指的是函数 TPgTypesManager.Describe(以 FireDAC.Phys.PGWrapper 为单位)吗?当我在调试器(Tokyo 10.2.3)中单步执行它时,永远不会执行对 FConnection.UnknownFormat 的测试,因为 sType='b' (对于名称为 'geometry' 的类型),所以前面的 else 条件不满足.
    • 是的,那个。有(sType <> 'e') and (sType <> 'r'),所以条件满足。实际上,如果没有,您就不会引发该异常。但是,如果您在其中,请检查 FConnection.UnknownFormat 值。它应该不为零(实际上应该是 17)。好吧,至少只要没有任何变化(我正在运行原始东京;尚未更新)。
    • 所以我想这就是问题所在:在我的代码中,它显示为 (sType 'e') 和 (sType 'r') 和 (sType 'b')。我在 18.0 (Berlin IIRC) 下的代码没有 (sType 'b') 部分..
    猜你喜欢
    • 2021-09-13
    • 2020-04-28
    • 1970-01-01
    • 1970-01-01
    • 2015-09-04
    • 2021-06-26
    • 2017-07-16
    • 2020-12-15
    • 1970-01-01
    相关资源
    最近更新 更多