2014-08-29 46 views
0

我在Visual FoxPro中的APPEND FROM語句有問題。我不能做一個APPEND從Excel表沒有得到這個錯誤:從excel表格APPEND出奇怪的錯誤

Function name is missing (

我正在處理一些存儲在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

但是,運行此查詢只是給我關於「函數名稱丟失(」我錯過了各種各樣的重寫和變量這個查詢是我可以想到的,但我無法弄清楚問題所在。任何幫助將不勝感激,謝謝。

+2

你試過它不圍繞字段列表中括號?錯誤表示:通常在左括號前有一個函數名。 – 2014-08-29 16:02:04

+1

不僅不需要括號,還應刪除「DELIMITED」一詞。 – LAK 2014-08-29 17:25:55

+0

感謝您的提示,我會在明天回去工作時試試這個! – Grubl3r 2014-08-31 15:38:25

回答

0

不出風頭,但是這是我得到了它的工作:

確保XLS文件存儲在Excel的5.0/95格式(基本上是一個古老的Excel格式,但綽綽有餘數據錄入)。

關閉Excel文件,否則會在另一個應用程序中看到關於該文件被鎖定/打開的錯誤。

我用下面的修正APPEND FROM語句和它的工作:

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

您最好使用Excel ODBC驅動程序,即Microsoft Office Connectivity SDK,它可讓您將工作簿視爲數據庫,對其運行SELECT語句等,並可使用所有Excel文件格式。 – 2014-09-03 07:24:33

+0

我明白了,但是我可以通過.NET應用程序以編程方式控制事物嗎?我需要用盡可能少的人機交互對foxpro數據進行一些自動操作。 – Grubl3r 2014-09-03 08:57:27

+0

絕對 - 它是一個32位ODBC/OLEDB驅動程序,例如:http://c-sharp-tutorials-4-0.blogspot.ie/2012/05/connect-to-excel-using-odbc-in- c.html – 2014-09-03 09:42:41

1

LAK是正確的,但我會澄清您的應用程序和未來可能遇到的Excel導入。如果您的表格與Excel中的列順序不匹配,則可能會遇到問題。通常我會導入一個遊標,我知道這些字段的順序和格式。然後我會追加。一旦在表格的遊標版本中,我可以追加到任何其他表格,循環訪問,進行數據清理等。

假設您的地址表具有ID,姓氏,名字,地址...的結構但是你的Excel文件有ID,FirstName + LastName作爲一個單獨的字段,地址,你知道你需要將它解析爲正確的第一個/最後一個字段。這將是使用臨時遊標的一個很好的例子。如果光標有比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將由相同的列名處理匹配並忽略那些其中列(多個)是否則額外和不需要(如樣品「全名」列 - 與名字解壓爲額外)。

+0

這是一個很好的把戲知道,但有點以外的問題。但是,謝謝你的提示! – Grubl3r 2014-09-01 07:36:52