У меня есть ADOQuery, который вставляет запись в таблицу SQL Server 2005, которая имеет триггер для вставки данных в другую таблицу. Я использую следующий код, чтобы обновить запрос и избежать Row cannot be located for updating
(в каждой таблице есть PK, свойство UpdateCriteria установлено, курсоры установлены на Dynamic, но иногда я все еще получаю сообщение об ошибке. Однако теперь это не вопрос). *
procedure Requery(T: TCustomADODataSet; IDField: string);
var
i: integer;
begin
if T.RecordCount > 0 then
i := T.FieldByName(IDField).AsInteger;
T.Requery();
if T.RecordCount > 0 then
T.Locate(IDField, i, []);
end;
Перед запросом я могу получить значение поля ID. Однако после запроса поле идентификатора возвращает значение поля идентификатора другой записи таблицы, введенной триггером. Обе таблицы имеют поле идентификатора с одинаковым именем. Я также добавил SET NOCOUNT ON .... OFF
для запуска, чтобы избежать ошибки Too Many Rows Affected
, однако я не думаю, что это влияет на мою проблему. Я не видел подобных ошибок, когда работал с Delphi 6 - 7 и SQL Server 2000, поэтому я готов попробовать SDAC или DAO . Решит ли SDAC или DAO проблему или есть какое-либо решение без изменения ADOQuery?