您的位置:首页 > 运维架构

开阔思路, dbExpress 中处理fn_listextendedproperty 的返回值,取得表中字段的描述性文本。

2008-07-18 03:24 246 查看
有一段时间没写博客了,出差了一个星期加上忙着要完成项目系统的任务,
今天写系统时, 在做一个基础性的任务,从 SQL Server 中读取指定表中字段的描述文本,以前用ADO没有问题,现在改用dbExpress 组件,使用 dbExpress 组件读 SQL Server 里的 fn_listextendedproperty 的返回值,返回结果字段 Value 为 TvarBytesField 类型的,

SQL 语句为:

const

sqlSelecteExtProperty = 'SELECT * FROM ::::fn_listextendedproperty (NULL, ''user'', ''dbo'', ''table'', ''%s'', ''column'', default)';

使用dbExpress 组件 TSQLQuery 或 TSQLDataset 都不能直接读取字段"Value"值来,原来fn_listextendedproperty的返回值"Value" 为 'sql_Variant"类型,到DELPHI中为TvarBytesField字段类型, 发现 dbExpress 组件读这个字段的值,不能转换成字符型的,只能用指针型Pointer读取来后再作处理,返回结果不是我需要的,实际上字段"Value"里保存的是表中列的描述性文本 Description。刚开始,我只想到如何用dbExpress 对 TvarBytesField 字段类型来作处理,花了差不多半天的时间来实现如何从TSQLQuery中读取 TvarBytesField 字段里的数据并转换成自己想要的字符,最终还是没有结果,自己走进了死胡同。

最后没办法。吃完晚饭休息一下,呵呵,思路开了,既然 dbExpress 不能很好地处理TvarBytesField,为什么我还一定要用这个类型的呢?我可以将返回结果在返回前先处理一下啊。

改一下:

const

sqlSelecteExtProperty = 'SELECT objname as column_name, cast(value as varchar(100)) as column_description FROM ::::fn_listextendedproperty (NULL, ''user'', ''dbo'', ''table'', ''%s'', ''column'', default)';

//执行示范

var

AQuery: TSQLQuery;

begin

AQuery:= TSQLQuery.create;

AQuery.Connection := SQLConnection1;

AQuery.SQL.Text := Format(sqlSelecteExtProperty, ['MyTableName']);

AQuery.Open;

ShowMessage(AQuery.FieldByName('column_description');

AQuery.Free;

end;

问题解决了。思路来得太晚了,浪费了我半天时间。不过,最后还是证明了,用dbExpress组件来处理 SQL Server 的一些数据类型返回值时,就不如ADO来得好,比如以前我用

SELECT IDENT_CURRENT('mytablename') 时发现 dbExpress 组件会报错,现在这个BUG听说好像有解决,还没试过。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐