2013-02-26 35 views
0

我想我會放棄,我試圖用XBaseJ編輯NTX文件,我得到這個錯誤:NTX或NDX文件

org.xBaseJ.xBaseJException: Field not found t

的阿比說

org.xBaseJ Fields defined in Index do not match Fields in database

但這些字段是相同的。

這裏是我的代碼:

DBF db = new DBF("C:/somepath/myDBF.dbf"); 

db.useIndex("C:/somepath/pc1.ntx", "rut"); 
db.useIndex("C:/somepath/pc2.ntx", "rs"); 

db.getField("RUT").put("123456"); 
db.getField("RS").put("SomeCompany"); 
db.getField("TIPO").put("2"); 
db.getField("TDOC").put("6"); 

db.write(); 
  1. 沒有人得到這個錯誤嗎?
  2. 有沒有人試過用java編輯ndx或ntx文件?

請我真的需要一些幫助這裏:-(

+0

添加您的代碼以瞭解問題 – 2013-02-26 17:17:28

+0

感謝@Real現在進行了編輯。 – RicardoGonzales 2013-02-26 17:25:12

回答

0

我有這個確切的問題我自己。因此很明顯,NTX文件是一種專有格式和suce開源xBaseJ不能使用它們,如果你不」 t想要更新任何索引它的工作,否則你必須找到另一種解決方案...幸運的是,我有一個工作對我來說:

注意:這可能有點不同,在Mac上,我不知道因爲我沒有自己的一個,但是如果你需要的話我可以確定它們之間的差異,在Linux上它也可能不同,我的Linux機器已經死了,所以我無法測試它恐怕,我只有需要在Windows上完成這項工作。

(1)收集資源: 去這裏:http://devzone.advantagedatabase.com/dz/content.aspx?Key=20&Release=19 下載數據架構師工具和ODBC驅動程序(一個與其他車手也可以工作,但如果你想使用JDBC驅動程序,你必須實際購買的優勢數據庫服務器,ODBC驅動程序是免費的,您的選擇)

(2)描述數據庫: 現在打開數據架構工具並創建一個新的數據字典(文件菜單)。選擇本地服務器作爲服務器類型,將數據庫設置爲包含DBF的文件夾。在你的新詞典中右擊表格並選擇「Add Existing」,在打開的對話框中從類型下拉列表中選擇DBF表格(默認隱藏它們)並選擇你的dbfs。選擇Clipper作爲表格類型,然後按OK鍵。接下來,右鍵單擊每個表並選擇添加現有索引,併爲其使用NTX索引。現在,如果您使用數據架構師編輯文件,它將更新索引。 (3)設置ODBC驅動程序 轉到「數據源(ODBC)」(在Windows的控制面板中),然後單擊系統DSN選項卡,然後單擊添加,選擇Advantage,簡化SQL ODBC,爲其提供一個名字(這個名字將在代碼中使用,所以要麼需要是靜態的,要麼放在一個配置文件中/作爲參數傳遞),勾選「數據字典」並瀏覽到步驟(2)創建的.ADD文件在相同的文件夾DBFS:

表類型=快船 優勢鎖定=兼容 可用的服務器類型=(只選擇本地服務器[ALS],除非你買的實際利用服務器)

其餘的選項應該是(我沒有提到的選項不應該有所作爲。

(4)一些示例Java代碼的

String dbfConnectionUrl = "jdbc:odbc:SML_ODBC"; //Set the ODBC URL 
Connection dbfCon = null; //A connection 
PreparedStatement dbfUpd = null; //I am using a prepared statement here but jsut regular statements work just as well 

    dbfCon = DriverManager.getConnection(dbfConnectionUrl); //Connect to the database, NOT the DBF, the database is the folder containing all the DBFs 
    dbfUpd = dbfCon.prepareStatement("UPDATE DBFName SET OPENVOL = ?, SLPERVOL = 0, TFPERVOL = 0 WHERE SCAN = ? AND STORE = ?"); //Then use regular old SQL same as any other JDBC driver, note that you use the name of the DBF (.DBF not needed) as the table names. 

    //Setting my variables 
    dbfUpd.setBigDecimal(1, 10); 
    dbfUpd.setString(2, "0000000000001"); 
    dbfUpd.setString(3, "02")); 
    dbfUpd.executeUpdate(); //Update 

很明顯,你可以很愉快地使用如下語句"INSERT INTO myDBF (RUT, RS, TIPO, TDOC) VALUES ('123456', 'SomeCompany', '2', '6');"做你的榜樣。

所以在初始設置後,它真的很容易:)希望這會有所幫助,因爲花了我幾個月的時間才找到這個解決方案,我還沒有遇到任何其他使用Java中的NTX索引的方法。