我在我的应用程序中使用 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/