3

所以我将一个旧的文件制作器数据库转移到 MySQL,一些重复的字段给我带来了一些问题。我读过 ODBC 标准支持这些字段,只有当它们的类型是“文本”并且每个重复都与某个分隔符连接时(参见第 47 页(PDF))。但是,我无法重现这一点。我得到的只是第一次重复。

如果我将数据库导出为 .csv 格式,则这些字段会正确连接,所以我不会完全卡住,但如果可能的话,我希望能够通过 ODBC 连接获得相同的结果。谢谢!

4

4 回答 4

3

使用 JDBC 和 Filemaker 12,我可以使用括号访问重复字段,因为它是从索引 1 开始的表。它在 ODBC 中应该是相同的。当然,我建议标准化,但知道还有其他选择会有所帮助。

于 2012-11-15T21:31:19.793 回答
1

以我的经验,关于重复字段的文档是一个谎言。:)

如果您可以使其正常工作,请发布答案。但我想你必须使用 csv 导出来解决问题。

于 2010-01-24T14:11:09.200 回答
0

我对此的建议是将重复字段标准化为 FileMaker 中的单独表,然后执行数据传输。您可以在 FileMaker 中创建相关表,然后使用脚本使用重复字段值填充表。如果您在编写这样的脚本时需要帮助,请告诉我。

于 2010-01-26T07:04:17.330 回答
0

我想在上面提供有关@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")它时,它会返回具有该名称的第一列值。这很愚蠢,但它有效。

于 2019-08-23T21:01:25.577 回答