Hi Jonathan
After a bit of fiddling I developed the following. Please let me know if I am using the wrong system table
SELECT COUNT(RDB$RELATION_NAME) AS TablesCount
FROM RDB$RELATIONS
WHERE RDB$RELATION_NAME = '<
>'
>Might this be what you're after?
>
>FUNCTION GETPRIMARYKEY(lcSQLTable)
>*--Passed the name of a Firebird table, returns its primary key
>*--Assumes giHandle contains previously-established connection handle
>LOCAL lcSQL
>TEXT TO lcSQL NOSHOW PRETEXT 15
> SELECT RDB$FIELD_NAME AS COLUMN_NAME
> FROM RDB$INDEX_SEGMENTS I
> INNER JOIN RDB$RELATION_CONSTRAINTS C
> ON C.RDB$INDEX_NAME=I.RDB$INDEX_NAME
> WHERE RDB$CONSTRAINT_TYPE='PRIMARY KEY' AND
> RDB$RELATION_NAME=?m.lcSQLTable
>ENDTEXT
>SQLEXEC(giHandle,lcSQL)
>RETURN COLUMN_NAME