Не удается найти строку для поиска?

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

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

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


person Community    schedule 26.04.2009    source источник


Ответы (4)


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

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

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

person Lars Truijens    schedule 26.04.2009

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

person Ertugrul Kara    schedule 27.04.2009
comment
Пожалуйста, используйте комментарии. Если вы используете одну и ту же учетную запись для входа на этот сайт каждый раз, вы можете добавлять комментарии к своим вопросам. - person Lars Truijens; 27.04.2009
comment
Да, я пытался комментировать, но для этого требуется 50 очков репутации, которых у меня нет. - person Ertugrul Kara; 27.04.2009
comment
Затем отредактируйте свой дополнительный пост с разъяснениями или дополнительными вопросами. :-) Вы всегда можете редактировать свои собственные сообщения. - person Ken White; 27.04.2009
comment
Спасибо, у меня была такая же проблема - person Blorgbeard; 12.05.2010

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

person Tom    schedule 26.04.2009

простой adotable1.refresh; после поста должно получиться...

person user763539    schedule 26.02.2013