According to the documentation, that should be done like this:
SELECT MSysObjects.name
FROM MSysObjects
WHERE
MSysObjects.TYPE IN (1,4,6)
AND MSysObjects.name NOT LIKE '~*'
AND MSysObjects.name NOT LIKE 'MSys*'
ORDER BY MSysObjects.name
But, unfortunately, there is no way to grant Admin access to MSysObjects (GRANT is an invalid query).
The next one does work:
MyConnection.GetTableNames(tn);
But that also includes all the other objects, like queries.
How do I find out if something is a table?