2015-03-02 40 views
0

我們的系統之一仍在Visual FoxPro數據庫上運行。這是我生命中的禍根。FoxPro - 使用INTO TABLE的列名稱限制

在調查最近的錯誤時,我發現它是由錯誤的列引起的。原始數據庫有一個名爲SELECTIONS的表,其中有一列名爲mediumValue,長度爲11個字符。該錯誤是由另一個基於該列重命名爲​​的數據引起的。

問題的根源似乎是這樣一句話:

SET DELETED ON 
SELECT selections.*; 
FROM ; 
    SELECTIONS; 
WHERE 
//criteria 
INTO TABLE Result.dbf 

如果只是運行select沒有INTO TABLE,列出現命名爲mediumValue。但是對於INTO TABLE,生成的Result.dbf表的列名爲​​。

我是否正確地認爲這是某種內置的截斷,並在任何地方記錄?有沒有我可以重寫的任何設置來修復它?

+1

的.DBF格式有10個字符的限制字段(列)名稱,AFAIK它是文件格式的限制,不能更改。 – 2015-03-02 15:16:27

+1

限制在此處描述:https://msdn.microsoft.com/en-us/library/3kfd3hw9(v=vs.80).aspx – Oleg 2015-03-02 15:46:01

回答

2

對於外部表格的截斷,您是正確的。在VFP中,數據庫容器(.dbc)允許表的列名長於「空閒」表的默認最多10個字符(即:不與數據庫關聯)​​。所以,原來的11個字符可能是有效的,因爲它是數據庫容器的一部分。現在

,如果你這樣做了一段時間處理,在程序的另一區域的數據進行工作,你總是可以選擇

INTO CURSOR C_MyTestResults readwrite 

這樣,它是一個在內存中的表和WILL保留完整的列名長度。 READWRITE子句將允許您在工作時更改遊標數據,就好像它本身也是一個表一樣。

我喜歡使用「C_」作爲表結果別名的前綴,因此我知道它是一個「CURSOR」而不是生產表,並且知道我不會根據任務手。

1

如果您需要執行帶有10個以上字符字段名稱的vfp命令select ..into table..,則必須使用database子句。

例如:

SELECT selections.*; 
FROM ; 
    SELECTIONS; 
WHERE 
//criteria 
INTO TABLE Result.dbf DATABASE dbUser 

如果你沒有爲(dbUser.dbc)一DATABSE可以創建一個:

create database c:\dbUser