Форум: "Базы";
Текущий архив: 2003.01.23;
Скачать: [xml.tar.bz2];
ВнизADO. Найти похожие ветки
← →
Nikolai_S (2002-12-25 18:02) [0]Доброго времени суток. Я работаю с ADO и Access 2000. Иногда при попытке вызвать метод Post возникает ошибка "Не удается найти строку для обновления. Некоторые значения могли быть изменены со времени ее последнего чтения."
Ошибка возникает в следующем случае:
В некой таблице имеются логические (boolean) поля. Когда создаем и сохраняем новую запись в таблице, а потом пытаемся редактировать логические поля (используя TDBCheckBox), то тогда и возникает ошибка. если перезагрузить программу, то ошибка уже не возникает...
Я уже почти собаку съел с ADO, но такого я еще не встречал. Может быть кто-нибудь сталкивался. Подскажите, плиз...
← →
sniknik (2002-12-25 18:24) [1]собаку недостаточно нужно еще кошку и попугайчика. :о)
серьезно. непонятно в чем дело но могу посоветовать не создавать записи в таблице. давно перешол на "чистый" SQL и проблем стало явно меньше. вместо создания записи в таблице сделай
ADOCommand.CommandText:= "INSERT INTO TableName (поля) VALUES (значения)";
ADOCommand.Execute.
Таблице рефреш.
на 95% уверен это решит проблему.
Если хочеш "разобратся" с таблицей, то предположительно ты пытаешся редактировать поле пока сама она еще не произвела изменения в базе (сама может и с буфером работать, а вот внешний TDBCheckBox нет).
← →
Nikolai_S (2002-12-27 10:38) [2]Тогда очень трудно понять такую вещь. Дело в том, что когда создаешь новую запись и редактируешь логические поля, а потом делаешь Post, то никакой ошибки нету - все работает нормально. Но когда тут же пытаешься в этой записи изменить логическое поле и сделать опять Post, то уже ошибка.
И причем запись уже на 100% сохранена. Я проверяю в mdb-файле. И к тому же ключевое поле ID (счетчик) уже сидит для новой в TADOTable. А такая ошибка, как написано в руководстве по ADO, возникает именно тогда, когда ключевое поле отсутствует или не определено значение ключевого поля.
Так что тут вообще непонятно в чем беда...
← →
sniknik (2002-12-27 11:24) [3]попробуй вместо просто Post делать так
if (HDataSet1.State=dsEdit) or (HDataSet1.State=dsInsert) then HDataSet1.Post;
а вот с ID (счетчик) дело особое, он же должен сам себе значения генерить а таблица пытается туда чтото записать, надо выключить в описании поля в таблице поставить что это автоинкремент.
(с инсертом проше пропустил это поле и все)
← →
Sergy (2002-12-27 11:34) [4]Ничего не надо делать, просто при вставке записи у тебя вставляются значения по умолчанию, т.е. фактически Access вставляет эти значения уже после того как ты их вставил, но перед методо Post. Просто когда инсерт втавляй в них значения принудительно.
← →
KSergey (2002-12-27 11:45) [5]Tckb вы получили такую надпись - значит не то, чтобы собаку съели. а почти к ней не приступали. Извините, конечно.
Почитайте по этому поводу 3 статьи про ADO на "королевстве". Более этого вы врятли что-то найдете.
← →
Nikolai_S (2002-12-27 12:44) [6]2 KSergey
Я читал эти статьи. Дело в том, что у меня нет полей со значениями по умолчанию, и я уже пробовал использовать TADODataSet.Properties...
← →
Snake (2002-12-31 05:16) [7]У меня было что-то подобное, особенно на ADOTable. CursorLocation=clUseServer, CursorType=ctKeyset. Помогает. Но если это и так установлено, тогда не знаю...
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.01.23;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c