2

有一个服务正在运行,它监视服务器上文件夹中的文件。每当将文件复制到此文件夹时,都会移动文件,并通过 ODBC 连接将记录写入 filemaker pro 数据库。在同一个过程中,我需要新创建行的 ID 来在另一个表中创建相关记录(具有外键约束)。在 Microsoft SQL Server 中,我将使用 @@identity 来执行此操作,在 Oracle 中,我将使用 sequence.CURRVAL。如何在 Filemaker 中获取新创建行的标识字段?

4

3 回答 3

4

我不是 FileMaker 的 ODBC 接口的经验丰富的用户,但我可以建议一个可行的解决方案。

我假设您正在使用 INSERT 语句将数据导入 FileMaker,您要在其中创建记录的表中有一个“ID”号字段,并且 ID 字段设置为自动输入序列号数字。如果是这种情况,根据 FileMaker 的 ODBC 文档支持 MAX 函数。

SELECT MAX (Table.ID) FROM Table
于 2009-02-12T17:49:43.947 回答
2

不幸的是,FileMaker ODBC 没有执行此操作的内置函数。这是一个真正的问题。

问题源于 FileMaker 没有内置对主键的支持。当然,几乎每个表都有一个唯一 ID,但 FileMaker 没有任何内部方法可以“知道”开发人员打算将哪个字段作为主键。这使得 ODBC 引擎无法知道要回馈给您什么价值。

我认为大多数人在这种情况下最终会做的是将某种 UUID 插入到数据库中的新列中,作为他们 CREATE 的一部分。然后立即使用 where 子句中带有 UUID 的另一个查询来选择 ID。所以你必须做两个查询。第一个插入,第二个取回 ID。

于 2012-04-28T14:14:49.797 回答
1

您能否通过在插入新行之前生成唯一 ID 并将此 ID 添加到每条记录中来解决此问题?这将使您能够在创建两个记录后识别它们。

我也会问你为什么需要这个功能。将文件复制到文件夹时,您将记录添加到 2 个不同的表中。显然,我不知道解决方案是什么,所以我不能建议一种或另一种方式。

不过,此时我的建议是重新考虑将组织 FileMaker 数据的逻辑放入 ODBC 流程中。听起来原始记录应该充当标记或触发器。可以将 ODBC 进程仅作为创建记录的一种机制,而将如何使用该记录的逻辑留给另一个进程,比如 FM 脚本吗?

于 2009-02-15T20:25:13.130 回答