Filemaker重复字段和ODBC

3
所以我正在将一个旧的filemaker数据库转移到MySQL,一些重复字段给我带来了一些问题。我读到ODBC标准支持这些字段,只有当它们的类型是“文本”并且每个重复项都用某个分隔符连接起来(见第47页(PDF))。然而,我就是无法复制这个。我只得到第一个重复项。
如果我将数据库导出为.csv格式,则字段会被正确地连接起来,因此我并不完全困住了,但如果可能,我想能够通过ODBC连接获得相同的结果。谢谢!
4个回答

3

使用JDBC和Filemaker 12,我可以使用方括号访问重复字段,就像它是以索引1开始的表格一样。在ODBC中应该也是相同的。当然,我建议进行规范化,但知道还有其他选项也可能会有所帮助。


1
在我的经验中,关于重复字段的文档是虚假的。 :)
如果你能让它工作,请务必发布一个答案。但我想你可能需要使用CSV导出来解决问题。

2
最终,在各种论坛上搜索后,我得出结论:这些重复字段是魔鬼的杰作,因此应该从目前存在的每个FileMaker数据库中禁止使用。所以,我不得不使用解决方法 :/ - Afrosimon
1
根据我的经验,每当有疑问时,就假设FMXDBC文档在某些方面或全部是错误的。而且,是的,大多数花哨的FM功能都是纯粹的恶魔。一定要测试测试测试,看看这个怪物的真实行为。解决问题是FM集成特殊地狱中的关键。 - zanlok

0

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


0

我想提供有关@Signix上面答案的详细信息。我能够从JDBC中获取重复字段,但这很棘手。在FileMaker“ODBC和JDBC指南”的第30页上,它指出:

Note FileMaker repeating fields are supported like arrays.

Example

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") 时,它会返回具有该名称的第一列值。这很愚蠢,但它确实有效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接