我们的一个系统仍在Visual FoxPro数据库上运行。这是我生命中的祸根。
在调查最近的错误时,我发现它是由一个名不副实的列引起的。原始数据库有一个名为SELECTIONS
的表,其中一列名为mediumValue
,长度为11个字符。该错误是由另一个基于该列重命名为mediumValu
的数据的表引起的。
问题的根源似乎是这句话:
SET DELETED ON
SELECT selections.*;
FROM ;
SELECTIONS;
WHERE
//criteria
INTO TABLE Result.dbf
如果您只运行没有INTO TABLE
的选择,则该列显示为mediumValue
。但是使用INTO TABLE
,生成的Result.dbf
表的列名为mediumValu
。
我是否正确地认为这是某种内置的截断,并且它是否记录在任何地方?我可以覆盖任何类型的设置来修复它吗?
答案 0 :(得分:2)
截断到外部表是正确的。在VFP中,数据库容器(.dbc)允许表的列名长度超过默认的最大值10个字符,对于" free"表(即:不与数据库关联)。因此,原始的11个字符可能是有效的,因为它是数据库容器的一部分。
现在,如果您正在执行此操作以进行某些临时处理以处理程序其他区域中的数据,则可以随时选择
INTO CURSOR C_MyTestResults readwrite
这样,它就是一个内存表,并将保留完整的列名长度。 READWRITE子句允许您在工作时更改游标数据,就像它本身就是一个表一样。
我喜欢使用" C _"作为表结果别名的前缀,所以我知道它是一个" CURSOR"而不是生产表,并且知道我不会根据手头的任务搞乱生产数据。
答案 1 :(得分:1)
如果需要执行vfp命令select ..into table..
,且字段名称超过10个字符,则必须使用database
子句。
例如:
SELECT selections.*;
FROM ;
SELECTIONS;
WHERE
//criteria
INTO TABLE Result.dbf DATABASE dbUser
如果您没有数据库(dbUser.dbc),可以创建它:
create database c:\dbUser