Строка не может быть найдена для Locate? - PullRequest
2 голосов
/ 26 апреля 2009

Я конвертирую существующее приложение Advantage Database Server в SQL Server 2005, используя D2009, dbGo (ADO). Иногда я испытываю ошибку row cannot be found for locating. Я гуглил его, в соответствии с результатами мне нужно было установить свойство «Критерии обновления» каждого ADOTable и установить местоположение курсора на динамическое. Я так и сделал, но иногда я получаю ту же ошибку. Все таблицы имеют первичный ключ, поэтому я использую

Query.Requery(); 
Query.Locate('ID',ID,[]); 

перед обновлением записи, чтобы избежать ошибки, но должны быть лучшие решения. Есть идеи? Или я должен перейти к MyDAC или Zeoslib?

Ответы [ 4 ]

2 голосов
/ 26 апреля 2009

dbGO / ADO - это естественный способ доступа к базам данных MS-SQL. Вы уверены, что это точное сообщение об ошибке? Потому что я никогда не слышал об этом, но слышал о том, что «строка не может быть расположена для обновления ».

Это сообщение об ошибке указывает на то, что ADO не может найти запись для удаления или обновления. Чаще всего причина в том, что в таблице не определен первичный ключ, или в таблице, по крайней мере, нет столбца, в котором все содержимое уникально.

Убедитесь, что вы определили первичный ключ в своих таблицах MS-SQL.

1 голос
/ 27 апреля 2009

Если у кого-то еще есть такая же проблема при использовании триггеров, добавьте SET NOCOUNT ON в начало и SET NOCOUNT OFF в конец триггера.

0 голосов
/ 26 февраля 2013

simple adotable1.refresh; после поста надо делать свое дело ...

0 голосов
/ 26 апреля 2009

Обычный случай для строки не может быть обновлен, если у вас есть ограничения по умолчанию для таблиц. Обязательно установите значения для полей в OnNewRecord. Вы также можете использовать myAdoDataset.Properties ['Критерии обновления']. Значение: = 0; Тогда ADO должен использовать только ключ для обновлений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...