0

私はあきらめると思います。XBaseJを使用してNTXファイルを編集しようとしましたが、次のエラーが発生しました。

org.xBaseJ.xBaseJException:フィールドが見つかりませんt

APIは言う

org.xBaseJインデックスで定義されたフィールドがデータベースのフィールドと一致しません

しかし、フィールドは同じです。

これが私のコードです:

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ファイルを編集しようとした人はいますか?

ここで本当に助けが必要です:-(

4

1 に答える 1

0

私はこの正確な問題を自分で抱えていました。したがって、明らかにNTXファイルは独自の形式であり、オープンソースのxBaseJはそれらを使用できません。インデックスを更新したくない場合は、それが機能します。そうでない場合は、別の解決策を見つける必要があります...幸いなことに、私は私のために機能しているものを持っています:

注:これはMacでは少し異なる場合があります。私はMacを所有していないためわかりませんが、必要に応じて違いを解決できます。Linuxでも異なる可能性があります。現在、Linuxボックスが機能していないため、テストできません。恐れ入りますが、これをWindowsで機能させるために必要なのはこれまでだけです。

(1)リソースの収集:ここに移動:http ://devzone.advantagedatabase.com/dz/content.aspx?Key = 20&Release = 19 Data Architect UtilityとODBCドライバーをダウンロードします(他のドライバーの1つも機能する可能性がありますが、実際にAdvantageDatabaseサーバーを購入する必要があるJDBCドライバーを使用する場合、ODBCドライバーは無料です。選択してください)

(2)データベースの説明:データアーキテクトユーティリティを開き、新しいデータディクショナリを作成します(ファイルメニュー)。サーバータイプとしてローカルサーバーを選択し、データベースをDBFを含むフォルダーに設定します。新しいディクショナリでテーブルを右クリックして[既存のものを追加]を選択し、開いているダイアログのタイプドロップダウン(デフォルトでは非表示)からDBFテーブルを選択し、dbfsを選択します。テーブルタイプとしてClipperを選択し、テーブルに対して[OK]を押します。次に、各テーブルを右クリックし、[既存のインデックスの追加]を選択して、使用するNTXインデックスを指定します。データアーキテクトを使用してファイルを編集すると、インデックスが更新されます。

(3)ODBCドライバーのセットアップ「データソース(ODBC)」(Windowsのコントロールパネル)に移動し、[システムDSN]タブをクリックし、[追加]をクリックして、[アドバンテージ]を選択し、SQL ODBCを合理化して、名前(この名前)を付けます。コードで使用されるため、静的であるか、構成ファイルに入れるか、引数として渡す必要があります)、[データディクショナリ]にチェックマークを付け、手順(2)で作成された.ADDファイルを参照します。 DBF:

テーブルタイプ=クリッパーアドバンテージロック=互換性のある使用可能なサーバータイプ=(実際のアドバンテージサーバーを購入した場合を除き、ローカルサーバー[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インデックスを使用する他の方法にまだ出会っていないため、これが役立つことを願っています。

于 2013-03-01T11:50:00.973 に答える