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)