【发布时间】:2012-08-17 16:50:34
【问题描述】:
我编写了一个工具,用于使用 TSQLConnection 的 GetTableNames 和 GetFieldNames 方法显示数据库结构。如何获取类似于以下列表的每个字段名称的类型(这是构建表所需的 DDL 的一部分)?
TABLE: ARTICLES
ID INTEGER NOT NULL
PRINTED SMALLINT DEFAULT 0
ACADEMIC SMALLINT
RELEVANCE SMALLINT
SOURCE VARCHAR(64) CHARACTER SET WIN1251 COLLATE WIN1251
NAME VARCHAR(128) CHARACTER SET WIN1251 COLLATE WIN1251
FILENAME VARCHAR(128) CHARACTER SET WIN1251 COLLATE WIN1251
NOTES VARCHAR(2048) CHARACTER SET WIN1251 COLLATE WIN1251
【问题讨论】:
-
@TLama:详细的表字段信息为我提供了必要的线索 - 迭代系统表肯定比使用一条记录打开查询并确定该查询的字段类型要好得多。我怎么奖励你?也许通过代码示例将您的评论变成答案。
-
谢谢!我会发布答案,但我无法验证结果(我只是希望文章中的查询有效:-),这就是我发表评论的原因。随意发布并接受您自己的答案。将它保留在这里会很有帮助,因为我们不知道我提到的网站会存在多久。
-
DBX 是关于对不同引擎的兼容性... TBXTable 有属性 ValueType[const Ordinal: TInt32]: TDBXValueType read GetValueType;将 reault 转换为特定于数据库的脚本可能是单独的任务。对于基本的 FB 类型,TIBExtract 组件可能会起作用。
-
如果您想绝对使用 "SELECT * FROM rdb$ ..." ,以下解决方案不适合您。但是如果你想要一个简单快速的方法,你可以使用带有“CreateProcess(nil, Pchar('isql.exe' +' '+ Params)”的 isql.exe 和 Params 指向一个文件,例如 myTableFieldinfo.sql。所有信息您需要在文件 myTableFieldinfo.sql 中可用