Я нашел решение, по крайней мере для SQL Server.Оказывается, что InsertSQL, сгенерированный компонентом TFDUpdateSQL, отличается от InsertSQL в образце.Сгенерированный код содержит предложение INSERT INTO
, за которым следует
SELECT SCOPE_IDENTITY() AS ProductID
Если я использую исходное предложение INSERT INTO, а затем это предложение, то я могу получить доступ к новому значению AutoInc в обработчике OnUpdateRecord, используяTField на TFDQuery.Новый InsertSQL имеет вид
INSERT INTO {id Products} (
ProductName, SupplierID, CategoryID,
QuantityPerUnit, UnitPrice, UnitsInStock, UnitsOnOrder,
ReorderLevel, Discontinued)
VALUES (
:NEW_ProductName, :NEW_SupplierID,
:NEW_CategoryID, :NEW_QuantityPerUnit, :NEW_UnitPrice,
:NEW_UnitsInStock, :NEW_UnitsOnOrder, :NEW_ReorderLevel,
:NEW_Discontinued
)
SELECT SCOPE_IDENTITY() AS ProductID
. Затем я могу получить доступ к новому значению AutoInc ProductID в обработчике OnUpdateRecord после вызова usProducts.Apply () с помощью
theIdField := qryProducts.FindField('ProductID');
theIdValue := theIdField.AsInteger;
Тот же код такжеразрешает доступ к временному значению AutoInc (перед вставкой) при использовании до usProducts.Apply ().
(примечание: я пытался опубликовать это на community.idera.com, но не смог получить ответ насохранить)