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