我在Visual FoxPro中的APPEND FROM语句有问题。如果没有收到此错误,我无法从Excel工作表中执行APPEND:
缺少函数名称(
我正在处理存储在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
然而,运行此查询只会给我一个关于&#34的错误;函数名称丢失了("。我已经尝试过各种各样的重写和此查询的变体,但我能想到,但是我无法弄清问题是什么。感谢任何帮助,谢谢。
答案 0 :(得分:2)
不要偷走节目,但这就是我的工作方式:
确保XLS文件以Excel 5.0 / 95格式存储(基本上是一种古老的Excel格式,但数据输入已足够)。
关闭Excel文件,否则您将收到有关在另一个应用中锁定/打开文件的错误。
我使用了以下修改过的APPEND FROM语句,它起作用了:
USE "ADDRESS BOOK!ADDRESSES"
APPEND FROM D:\tmp\excel_data2.xls FIELDS addressid, firstname XLS
答案 1 :(得分:1)
LAK是正确的,但我会澄清您的应用以及将来可能遇到的Excel导入。如果您的表与Excel中的列顺序不匹配,则可能会遇到问题。通常我导入到一个游标,我知道字段的顺序和格式。然后我会追加。一旦进入表的游标版本,我就可以附加到任何其他表,循环它,进行数据清理等。
说你的地址表有它的ID,LastName,FirstName,Address的结构......但是你的Excel文件有ID,FirstName + LastName作为单个字段,Address你知道你需要解析它到适当的第一个/最后一个字段这将是使用临时游标的一个很好的例子。如果光标的列数多于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&#34 ; column - vs FirstName提取为额外的。)