首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

BCB里将数据库从ACCESS改为SQL Server后字段not found解决方法

2012-03-29 
BCB里将数据库从ACCESS改为SQL Server后字段not found下面一语句:RatioTable-FieldByName(BRatio)-AsF

BCB里将数据库从ACCESS改为SQL Server后字段not found
下面一语句:
RatioTable->FieldByName("BRatio")->AsFloat 
其中RatioTable是个TTable控件,在ODBC里建立了相关DSN.刚开始是指向一个Access数据库的.运行没问题.

现在因故要在SQL Server里做,在SQL Server建立了数据库及同Access里相同的表RationTable,在ODBN又建立一个DSN,指向新的数据库.现将RatioTable的DatabaseName属性改为新的DSN,TableName属性指向相同的一个表RatioTable,查FieldDefs里可以看到RatioTable表里的BRatio属性.
可一程序一运行到这条语句时就跳出错误,
RaiseException class EDatabaseError with message 'RatioTable: Field 'BRatio'not found' , process stopped.

百思不得其解,特向诸位大侠请教.谢谢

[解决办法]
从网上找到的,供参考.

想得到xx表日期在8月的所有表
select name from sysobjects where name >= 'xx040801' and name < 'xx040901'

后,取结果集
执行后来 Query1->FieldByName("name")->AsString;
为什么语句中错误,说没有name字段
有什么更好的方法?
而且sysobjects有25个字段,查询后,Query1中得到的字段只有24个,name确实没了,原来的第二项id变成了第一项

找到原因了
是由于sysobjects中的name字段是nvarchar类型,是UNICODE字符型的,只要把其转换成varchar类型就可以了。
SELECT CAST(name AS VARCHAR) AS table_name FROM sysobjects WHERE name >= 'xx040801' AND name < 'xx040901'

也可以用CONVERT(VARCHAR, name)转换
如果是Sybase的话只能用CONVERT(VARCHAR, name)

热点排行