FoxPro - 具有 INTO TABLE 的列名称的字符限制

FoxPro - character limit on column names with INTO TABLE

我们的一个系统仍然运行在 Visual FoxPro 数据库上运行。这是我生命中的祸根。

在调查最近的一个错误时,我发现它是由列名错误引起的。原始数据库有一个名为 SELECTIONS 的 table 和一个名为 mediumValue 的列,长度为 11 个字符。该错误是由另一个 table 引起的,该数据基于该数据将列重命名为 mediumValu

问题的根源似乎是这条语句:

SET DELETED ON
SELECT selections.*;
 FROM ;
     SELECTIONS;
 WHERE 
//criteria
 INTO TABLE Result.dbf  

如果您只是 运行 select 而没有 INTO TABLE,该列将显示为 mediumValue。但是对于 INTO TABLE,结果 Result.dbf table 的列名为 mediumValu.

我认为这是某种内置的 t运行cation 是否正确,是否有任何记录?有什么我可以覆盖的设置来修复它吗?

您对外部 table 的截断是正确的。在 VFP 中,数据库容器 (.dbc) 允许 tables 的列名长度超过 "free" table 的默认最大值 10 个字符(即:不与数据库关联) .所以,原来的 11 个字符可能是有效的,因为它是数据库容器的一部分。

现在,如果您这样做是为了进行一些临时处理以处理程序另一区域的数据,您总是可以 select

INTO CURSOR C_MyTestResults readwrite 

这样,它是内存中的 table 并且将保留完整的列名长度。 READWRITE 子句将允许您在工作时更改游标数据,就像它本身也是 table 一样。

我喜欢使用 "C_" 作为 table 结果别名的前缀,所以我知道它是 "CURSOR" 而不是生产 table,并且知道我不会根据手头的任务来处理生产数据。

如果需要执行vfp命令select ..into table..,字段名称超过10个字符,必须使用database子句。

例如:

SELECT selections.*;
 FROM ;
     SELECTIONS;
 WHERE 
//criteria
 INTO TABLE Result.dbf  DATABASE dbUser

如果您没有相应的数据库 (dbUser.dbc),您可以创建它:

create database c:\dbUser