2009-02-11 54 views
2

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

+0

真的,没人知道吗? – stephenbayer 2009-02-11 16:12:56

+1

nope。因为FM文件和odbc功能真的很糟糕。 – zanlok 2011-06-24 17:33:24

回答

4

我不是ODBC界面的有经验的用户到FileMaker,但我可以建议一个可能的解决方案,可能工作。

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

​​3210
+2

这可能在功能上起作用,但是在这种情况下存在竞争条件,如果在初始写入和ID检查之间插入另一行,则可能存在问题..但是如果它们是一个接一个,我不会看看这可能是一个问题,可能。 – stephenbayer 2009-02-12 21:29:14

+0

我目前正在看到这是否适用于我的情况。 – stephenbayer 2009-02-12 21:31:25

1

您可以通过在插入新行之前生成一个唯一的ID,然后将此ID添加到每个记录中来解决这个问题吗?这将使您能够在创建这两个记录后识别这两个记录。

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

但是,我现在的建议是重新考虑将FileMaker数据组织到ODBC进程中的逻辑。这听起来像原始记录应该作为一个标记或触发器。是否可以将ODBC过程留作创建记录的机制,并将该记录的使用逻辑留给另一个过程,比如FM脚本?

2

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

问题源于FileMaker没有内置对主键的支持。当然,几乎每个表都有一个唯一ID,但FileMaker没有任何内部方式来“知道”开发人员希望成为主键的字段。这使得ODBC引擎不可能知道给你什么值。

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