在 DBC 数据库中找不到变量 'varName'

Variable 'varName' is not found on DBC database

我有一个 DBC 容器,里面有很多 DBF table。

table的格式不一样,像这样:

tables with b8_ on the name does not contain the column 'NUMEROSBIS3' and tables with the tsn_ on the name 有列 'NUMEROSBIS3'

如果我想从容器中删除 table 我执行下一条语句:

EXECSCRIPT([REMOVE TABLE tsn20150426])

使用此语句,table 已从 DBC 容器中删除,但如果我执行如下 select 语句: SELECT * FROM tsn20150426 然后我得到错误 Variable 'NUMEROS3BIS' is not found。但是,如果我执行 EXECSCRIPT([REMOVE TABLE b8_20130811])(不包含 'NUMEROS3BIS 列的 table(删除 table)然后我执行 SELECT * FROM b8_20130811 我得到数据没有错误!

这两个动作有什么区别?为什么带有列 'NUMEROS3BIS' 的 table(table 上的 tsn_ 前缀)在 select 语句和另一个 table 上出现错误( b8_ table) 上的前缀不会引发错误?

我不得不说,在每次操作中,物理文件都不会被删除或移动或做任何事情。

我不能完全确认,但可能发生的情况是 REMOVE table 只是从实际的数据库容器中删除 table,但将原始的 table 保留为 FREE- TABLE 仍在目录中。

一旦table是"Free"table并且没有绑定到数据字典,它不再支持超过10个字符的列名(原始设计最大列名长度) .因此,您的 "NUMEROSBIS3" 列是 11 个字符,因此在免费 table.

中被截断为仅 "NUMEROSBIS"

查询第二个 table 时,因为它没有 11 个字符的列名,所以没有错误。巧合的是,没有其他列的名称超过 10 个字符。

根据评论进行编辑。

如果您仍然需要 11 个字符的列名,内存游标结果集的列名仍然可以超过 10 个字符。所以你必须调整你的查询,比如

select ;
      T1.*, ;
      T1.NUMEROSBIS as NUMEROSBIS3 ;
   from ;
      tsn20150426 T1 ;
   into ;
      cursor C_SomeResultAlias readwrite

然后您将仍然有 10 个字符的版本和 11 个字符的版本以符合您的其余应用程序逻辑。