有一个服务正在运行,它监视服务器上文件夹中的文件。每当将文件复制到此文件夹时,都会移动文件,并通过 ODBC 连接将记录写入 filemaker pro 数据库。在同一个过程中,我需要新创建行的 ID 来在另一个表中创建相关记录(具有外键约束)。在 Microsoft SQL Server 中,我将使用 @@identity 来执行此操作,在 Oracle 中,我将使用 sequence.CURRVAL。如何在 Filemaker 中获取新创建行的标识字段?
3 回答
我不是 FileMaker 的 ODBC 接口的经验丰富的用户,但我可以建议一个可行的解决方案。
我假设您正在使用 INSERT 语句将数据导入 FileMaker,您要在其中创建记录的表中有一个“ID”号字段,并且 ID 字段设置为自动输入序列号数字。如果是这种情况,根据 FileMaker 的 ODBC 文档支持 MAX 函数。
SELECT MAX (Table.ID) FROM Table
不幸的是,FileMaker ODBC 没有执行此操作的内置函数。这是一个真正的问题。
问题源于 FileMaker 没有内置对主键的支持。当然,几乎每个表都有一个唯一 ID,但 FileMaker 没有任何内部方法可以“知道”开发人员打算将哪个字段作为主键。这使得 ODBC 引擎无法知道要回馈给您什么价值。
我认为大多数人在这种情况下最终会做的是将某种 UUID 插入到数据库中的新列中,作为他们 CREATE 的一部分。然后立即使用 where 子句中带有 UUID 的另一个查询来选择 ID。所以你必须做两个查询。第一个插入,第二个取回 ID。
您能否通过在插入新行之前生成唯一 ID 并将此 ID 添加到每条记录中来解决此问题?这将使您能够在创建两个记录后识别它们。
我也会问你为什么需要这个功能。将文件复制到文件夹时,您将记录添加到 2 个不同的表中。显然,我不知道解决方案是什么,所以我不能建议一种或另一种方式。
不过,此时我的建议是重新考虑将组织 FileMaker 数据的逻辑放入 ODBC 流程中。听起来原始记录应该充当标记或触发器。可以将 ODBC 进程仅作为创建记录的一种机制,而将如何使用该记录的逻辑留给另一个进程,比如 FM 脚本吗?