FoxPro - 使用INTO TABLE对列名进行字符限制

时间:2015-03-02 15:10:58

标签: foxpro visual-foxpro

我们的一个系统仍在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

我是否正确地认为这是某种内置的截断,并且它是否记录在任何地方?我可以覆盖任何类型的设置来修复它吗?

2 个答案:

答案 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