我在我的应用程序中使用 BDS 2006 PostgreSQL PostgreSQL
我有以下代码,该查询由查询组成,用于在表中查找主键值。

 Query.SQL.Clear;
 Query.SQL.Add('SELECT pg_attribute.attname,format_type(pg_attribute.atttypid, pg_attribute.atttypmod)FROM pg_index, pg_class, pg_attribute WHERE pg_class.oid = '+#39+'tablename'+#39+' ::regclass AND indrelid = pg_class.oid AND pg_attribute.attrelid = pg_class.oid AND pg_attribute.attnum = any(pg_index.indkey)AND indisprimary');
 Query.Open;

我收到语法错误消息
 General SQL error.
 ERROR: syntax error at or near ":";

我尝试使用#58代替:,但结果相同。
以下查询在我的PostgreSQL内正常运行。

关于我如何使其工作的任何看法

最佳答案

1)如果放置了BDE标记,那么我希望您使用了BDE + BDE ODBC SQLLink + PgSQL ODBC驱动程序。 BDE组件期望':'作为参数标记,而'::'作为转义序列,将其转换为':'。您有两个基本选择:

  • 设置TQuery。将ParamCheck设置为False,并手动填写Params集合;
  • 每一个':'两倍,这不是参数标记。因此,它将是'::::'

  • 2)您可以使用3d派对库(例如AnyDAC)来了解PgSQL '::'的含义。因此,他们不会将'::'识别为参数标记。

    关于delphi - Delphi BDE PostgreSQL查询执行(语法错误),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8969196/

    10-11 22:33