所以我将一个旧的文件制作器数据库转移到 MySQL,一些重复的字段给我带来了一些问题。我读过 ODBC 标准支持这些字段,只有当它们的类型是“文本”并且每个重复都与某个分隔符连接时(参见第 47 页(PDF))。但是,我无法重现这一点。我得到的只是第一次重复。
如果我将数据库导出为 .csv 格式,则这些字段会正确连接,所以我不会完全卡住,但如果可能的话,我希望能够通过 ODBC 连接获得相同的结果。谢谢!
所以我将一个旧的文件制作器数据库转移到 MySQL,一些重复的字段给我带来了一些问题。我读过 ODBC 标准支持这些字段,只有当它们的类型是“文本”并且每个重复都与某个分隔符连接时(参见第 47 页(PDF))。但是,我无法重现这一点。我得到的只是第一次重复。
如果我将数据库导出为 .csv 格式,则这些字段会正确连接,所以我不会完全卡住,但如果可能的话,我希望能够通过 ODBC 连接获得相同的结果。谢谢!
使用 JDBC 和 Filemaker 12,我可以使用括号访问重复字段,因为它是从索引 1 开始的表。它在 ODBC 中应该是相同的。当然,我建议标准化,但知道还有其他选择会有所帮助。
以我的经验,关于重复字段的文档是一个谎言。:)
如果您可以使其正常工作,请发布答案。但我想你必须使用 csv 导出来解决问题。
我对此的建议是将重复字段标准化为 FileMaker 中的单独表,然后执行数据传输。您可以在 FileMaker 中创建相关表,然后使用脚本使用重复字段值填充表。如果您在编写这样的脚本时需要帮助,请告诉我。
我想在上面提供有关@Signix 答案的详细信息。我能够从 JDBC 中获取重复字段,但这很棘手。在 FileMaker“ODBC 和 JDBC 指南”的第 30 页,它指出:
注意 FileMaker 重复字段像数组一样受支持。
例子
INSERT INTO mytable(repField[3]) VALUES (‘this is rep 3’) SELECT repField[1], repField[2] FROM mytable
这是唯一的文档!所以理论上你可以使用这个查询:
ResultSet resultSet = fmStatement.executeQuery("SELECT id, repField[1], repField[2] FROM mytable");
但棘手的部分是得到结果。唯一的方法似乎是使用列索引。
System.out.println(resultSet.getString("repField[1]")); // fails, throws FMSQLException
System.out.println(resultSet.getString("repField[2]")); // fails, throws FMSQLException
System.out.println(resultSet.getString("repField")); // returns repField[1]
System.out.println(resultSet.getString(2)); // returns repField[1]
System.out.println(resultSet.getString(3)); // returns repField[2]
我认为原因是因为字段的命名没有括号部分。
System.out.println(resultSet.getMetaData().getColumnName(1)); // returns "id"
System.out.println(resultSet.getMetaData().getColumnName(2)); // returns "repField"
System.out.println(resultSet.getMetaData().getColumnName(3)); // returns "repField"
因此,当使用resultSet.getString("repField")
它时,它会返回具有该名称的第一列值。这很愚蠢,但它有效。