【问题标题】:Convert Visual Foxpro dbf to dBaseIII将 Visual Foxpro dbf 转换为 dBaseIII
【发布时间】:2013-11-03 20:10:54
【问题描述】:

编辑:我发现这个错误是由于新的数据文件是 Visual Foxpor dbf 形式而引发的,而我的主文件是 dBaseIII。有关如何以编程方式将 VFP 更改为 dBaseIII 的任何建议?


我正在打开两个 .dbf 文件。一个是主文件,一个是包含新数据的文件。我希望将新数据插入主文件。

我正在连接到保存文件的目录,如下所示:

 Connection connection = null;
                    String dbString = "jdbc:odbc:Driver={Microsoft dBASE Driver (*.dbf)};DBQ=" + dealerSNS + "\\";

                    try
                    {
                        System.out.println("Opening Database Directory " + dealerSNS );
                        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
                        connection = DriverManager.getConnection(dbString, "", "");
                        System.out.println("Connection established!");
                    }
                    catch (ClassNotFoundException cnfEx)
                    {
                        System.out.println("* Unable to load driver! *");
                        System.exit(1);
                    }
                    catch (SQLException sqlEx)
                    {
                        System.out.println(dbString);
                        System.out.println("* Cannot connect to database! * SQL = " + sqlEx);
                        System.exit(1);
                    }

然后我调用我准备好的语句:

 try
        {
        String update = "INSERT INTO fullSNS SELECT * FROM newSNS";
         PreparedStatement ps = connection.prepareStatement(update);
               ps.executeUpdate();
                  System.out.println("query: " + ps+ " worked!");
                           }
                           catch (SQLException se)
                           {
                                se.printStackTrace();  

                           }

两个 .dbf 具有完全相同的字段并且位于同一个目录中,所以我不确定我做错了什么,它不会将它们链接起来。

有什么建议/想法吗?

我的堆栈跟踪如下所示:

java.sql.SQLException: [Microsoft][ODBC dBase Driver] External table is not in the expected format.
at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6964)
at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7121)
at sun.jdbc.odbc.JdbcOdbc.SQLExecute(JdbcOdbc.java:3156)
at sun.jdbc.odbc.JdbcOdbcPreparedStatement.execute(JdbcOdbcPreparedStatement.java:215)
at sun.jdbc.odbc.JdbcOdbcPreparedStatement.executeUpdate(JdbcOdbcPreparedStatement.java:137)
at ads.SmooshNMoveFiles.checkNSmoosh(SmooshNMoveFiles.java:116)
at ads.ActiveTimer.reportToWork(ActiveTimer.java:82)
at ads.ActiveTimer.run(ActiveTimer.java:28)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:304)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:178)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)

【问题讨论】:

    标签: java sql dbf visual-foxpro


    【解决方案1】:

    这取决于表格的“dBaseIII”方向。一些较早的版本具有不同的文件头信息,这可能是问题所在。在这种情况下,您可能需要一次性打开 VFP 版本表并将其复制为 dBaseIII 格式,然后将其移动到连接的生产路径中。

    如果您使用 Microsoft Visual Foxpro OleDb Provider,您可以连接到表所在的路径,并执行类似的脚本

    USE YourTable
    COPY to NewVersion TYPE FOXPLUS
    

    较旧的 dBASE 文件格式的缺点是它无法识别相应的索引文件而不被显式打开并且不会优化查询...但同样基于非常旧的 dBASE 文件格式。

    Here's one showing a sample SQL Command for execution

    【讨论】:

    • 我意识到我的问题可以通过另一种方式解决,但这对我自己和可能遇到此类问题的其他人来说是最有用的答案。太棒了,谢谢!很好的解释和整个示例。
    【解决方案2】:

    如果您有 Visual Foxpro 可用,DRapp 转换为 FOXPLUS(与 dBase III 兼容)格式的方法将很有效。如果不, here's documentation on the DBF format.

    您可以编辑文件的第一个字节以反映 dBase III 格式:0x2F 对应于没有备注的简单 dBase III/Foxbase DBF,如果有备注,则为 0x8A(备注将是带有与 .DBF 同名,但具有 .DBT 扩展名)。

    显然,如果您决定使用十六进制编辑器进行编辑,请务必保存 DBF 的备份副本。

    【讨论】:

    • 我的版本不需要 VFP,只需要 VFP OleDBProvider,它还允许用户根据之前 OleDB 处理的示例链接执行脚本。
    猜你喜欢
    • 2012-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多