Получение идентификатора недавно вставленной строки в Filemaker Pro - PullRequest
2 голосов
/ 11 февраля 2009

Работает служба, которая отслеживает файлы в папке на сервере. Всякий раз, когда файлы копируются в эту папку, файлы перемещаются, и запись записывается в базу данных filemaker pro через соединение ODBC. В этом же процессе мне нужен идентификатор вновь созданной строки, чтобы создать связанную запись в другой таблице (с ограничением внешнего ключа). В Microsoft SQL Server я бы использовал @@ identity для этого, в Oracle я бы использовал последовательность .CURRVAL. Как получить поле идентификатора вновь созданной строки в Filemaker?

Ответы [ 3 ]

4 голосов
/ 12 февраля 2009

Я не опытный пользователь интерфейса ODBC в FileMaker, но могу предложить возможное решение, которое могло бы работать.

Я предполагаю, что вы используете оператор INSERT для передачи данных в FileMaker, что в таблице, в которой вы создаете запись, есть числовое поле "ID", а в поле ID установлено значение auto. введите серийный номер. В этом случае функция MAX поддерживается в соответствии с документацией ODBC FileMaker.

SELECT MAX (Table.ID) FROM Table
2 голосов
/ 28 апреля 2012

К сожалению, FileMaker ODBC не имеет встроенной функции для этого. Это реальная проблема.

Проблема связана с тем, что FileMaker не имеет встроенной поддержки первичных ключей. Конечно, почти каждая таблица имеет уникальный идентификатор, но у FileMaker нет никакого внутреннего способа «узнать», в какой области разработчик намеревался стать первичным ключом. Это делает невозможным для подсистемы ODBC узнать, какое значение вам вернуть.

Я думаю, что большинство людей в конечном итоге делают в этой ситуации вставку некоторого UUID в новый столбец в базе данных как часть своего CREATE. Затем немедленно выберите идентификатор, используя другой запрос с UUID в предложении where. Таким образом, вы должны сделать два запроса. Первый для вставки и второй для получения идентификатора обратно.

1 голос
/ 15 февраля 2009

Не могли бы вы решить эту проблему, сгенерировав уникальный идентификатор перед вставкой новой строки, а затем добавив этот идентификатор в каждую запись? Это позволит вам идентифицировать обе записи после их создания.

Я бы также спросил, зачем вам эта функциональность. Вы добавляете записи в две разные таблицы, когда файл копируется в папку. Очевидно, я понятия не имею, каково решение, поэтому я не могу советовать так или иначе.

Тем не менее, я бы посоветовал еще раз включить логику организации данных FileMaker в процесс ODBC. Похоже, оригинальная запись должна действовать как маркер или триггер. Можно ли оставить процесс ODBC просто механизмом создания записи, а логику использования этой записи можно оставить другому процессу, скажем, сценарию FM?

...