Filemaker重复字段和ODBC

时间:2010-01-22 16:18:38

标签: odbc filemaker

所以我将一个旧的filemaker数据库转移到MySQL,一些重复字段导致我出现一些问题。我已经读过ODBC标准支持这些字段,只有当它们的类型是“Text”并且每个重复都与某个分隔符(see page 47 (PDF))连接时。但是,我只是无法重现这一点。我得到的只是第一次重复。

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

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

如果你能让它发挥作用,请发表答案。但我想你必须使用csv export来解决这个问题。

答案 2 :(得分:0)

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

答案 3 :(得分: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")时,它将返回具有该名称的第一列值。这很愚蠢,但是有效。