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

时间:2015-05-06 12:48:00

标签: foxpro dbf visual-foxpro

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

表格的格式不同,如下所示:

名称中包含requests的表格不包含列b8_,名称中包含'NUMEROSBIS3'的表格列为tsn_

如果我想从容器中删除表,我执行下一个语句:

'NUMEROSBIS3'

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

这两项行动的区别是什么?为什么表SELECT * FROM b8_20130811(表'NUMEROS3BIS'前缀)的表在tsn_语句和表上的另一个表(select前缀)上得到错误&# 39; t抛出错误?

我必须说,在每个动作中,物理文件永远不会被移除或移动或任何东西。

1 个答案:

答案 0 :(得分:2)

我无法完全确认,但可能发生的事情是REMOVE表只是从实际的数据库容器中删除了表,但是将原始表保留为目录中的FREE-TABLE。

一旦桌子成为" Free"表并且不绑定到数据字典,它不再支持长度超过10个字符的列名(原始设计最大列名长度)。那么你的专栏" NUMEROSBIS3"是11个字符,因此被截断为只有#34; NUMEROSBIS"在免费表格中。

查询第二个表时,由于它没有11个字符的列名,因此没有错误。巧合的是,没有其他列的名称长度超过10个字符。

每条评论都有编辑。

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

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

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