从excel表格APPEND出奇怪的错误

我在Visual FoxPro中的APPEND FROM语句有问题。 我不能做一个APPEND从Excel表没有得到这个错误:

函数名称丢失(

我正在处理一些存储在FoxPro数据库中的遗留数据。 我正在读它,在.NET中处理它,然后将它写回到一个新的FoxPro数据库。 但是,写作部分不工作。 不幸的是使用其他数据库不是一个选项。 是的,我是一个FoxPro新手。

我确实得到了INSERT语句,但是如果我可以从外部文件中获取APPEND并且能够保存备注字段,这将会非常有用。 Afaik你不能用FoxPro中的CSV文件,只用Excel和其他一些格式 – 而不是CSV。

为了演示这个问题,我使用了Visual Foxpro附带的地址簿示例数据库。

我在V.FP的查询窗口中运行这个查询:

USE "ADDRESS BOOK!ADDRESSES" APPEND FROM D:\tmp\excel_data2.xls FIELDS (addressid, firstname) DELIMITED XLS 

.xls文件是一个Excel 97-2003工作簿,如下所示:

 A | B ------------------------ 23 | Sample 1 ------------------------ 24 | Sample 2 

我认为这个文档的语法应该是正确的: http : //msdn.microsoft.com/en-us/library/aa977271( v= vs.71).aspx

然而,运行这个查询只是给了我关于“function名称是失踪(”我已经尝试了各种各样的重写和这个查询的变化,我可以想到的,但我无法弄清楚是什么问题任何帮助将不胜感激,谢谢。

LAK是正确的,但我会澄清你的应用程序和未来可能遇到与Excel导入。 如果您的表格与Excel中的列顺序不匹配,则可能会遇到问题。 通常我input一个游标,我知道字段的顺序和格式。 然后我会追加。 一旦在表格的游标版本中,我可以追加到任何其他表格,循环,进行数据清理等。

说你的地址表有ID,姓氏,名字,地址……的结构,但是你的Excel文件有ID,名字+姓氏作为单个字段,地址,你知道你需要把它parsing成合适的第一个/最后一个字段。 这将是使用临时游标的一个很好的例子。 如果光标有比Excel更多的列,他们只会来这里骑,而且是空白的,但在那里你可以根据需要使用。

 create cursor C_TmpFromExcel; ( IDCol int,; FullName c(40),; Address c(35),; FirstName c(20),; LastName c(20) ) append from D:\tmp\excel_data2.xls type xls */ VERY BASIC example to split the name replace all lastname with left( fullname, at("," , FullName ) -1 ) replace all firstname with substr( fullname, at( ",", FullName ) +1 ) select LiveAddressTable append from C_TmpFromExcel 

当将一个表(或游标)与另一个表(或光标)一起附加时,VFP将按照相同的列名处理匹配,并忽略那些列在其他情况下是额外的并且不需要的(例如“FullName”列的示例 – 与提取的名字作为额外)。

不要偷表演,但这是我的工作原理:

确保XLS文件存储在Excel 5.0 / 95格式(基本上是一个古老的Excel格式,但绰绰有余的数据input)。

closuresExcel文件,否则会在另一个应用程序中看到文件被locking/打开的错误。

我用下面的修改APPEND FROM语句,它的工作:

 USE "ADDRESS BOOK!ADDRESSES" APPEND FROM D:\tmp\excel_data2.xls FIELDS addressid, firstname XLS