开阔思路, 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听说好像有解决,还没试过。
今天写系统时, 在做一个基础性的任务,从 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听说好像有解决,还没试过。
相关文章推荐
- fn_listextendedproperty返回不完整的问题
- PB 数据窗口DW处理图片等大文本字段
- Oracle PLSQL Demo - 18.02.管道function[查询零散的字段组成list管道返回] [字段必须对上]
- 比较两个List列表,取得List中不同项返回
- 怎么把ftp_rawlist里的返回的文本定义成数组呢,我有办法
- 处理ResultSet查询结果并返回一个List方法---利用元数据
- 如何处理动态编译时文本的返回值问题
- 将泛型集合类(List<T>)转换成DataTable,返回的DataTable所有列的数据类型为string型,且列顺序与字符串提供的字段顺序一致
- 用json形式后台返回list前台处理例子
- mybatis 如何查找表里的某一个字段,然后返回它们的结果集list ?
- 把从数据库中查询出的一个字段封装到一个List中,返回List
- “OCIEnvNlsCreate 失败,返回代码为 -1,但错误消息文本不可用”的处理方法
- 关于用 apache cxf中对于不是返回200错误的处理 ,获取错误描述文本的方法 推荐
- 「原」valueOf() //返回某个字符串对象的原始值 20140830 ①文本处理
- 麻烦问一下单字段按查询结果精度返回结果,思路怎么做(除sql 的union合并)
- 字段返回null值,却需要进行运算怎么处理?
- linq 获取实体列表中的某个字段返回ilist<string>
- 取得JS中的参数值并无刷新传线PHP文件,PHP文件取得值后处理返回结果
- sqlserver 编辑、修改字段说明(备注) sp_addextendedproperty
- ajax提交后取得的List处理