2009-02-11 49 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。