Форум: "Начинающим";
Текущий архив: 2007.02.04;
Скачать: [xml.tar.bz2];
ВнизОшибка: не могу найти строку для обновления Найти похожие ветки
← →
Beavercrazy (2007-01-13 23:35) [0]Работаю а Аксесом через Ado компоненты. Переодически выскакивает ошибка: не могу найти строку для обновления. Мастера подсказали! Укажи ключевые поля для таблиц с которыми работаешь. Указал ключи, но проблема по прежнему осталась. Начал искать в сети и наконец нашел! По этому адресу http://www.rusfaq.ru/?Step=info&Action=Question&ID=28605 человек спрашивает:
Добрый день, эксперты. У меня такой вопрос: что такое код репликации в базах MS Access? Доступ к ним в Delphi осуществляется по ADO компонентам. Я так понимаю, что это уникальный код, может быть счетчиком... Но почему он не присваивается сразу при создании записи в Delphi? Из-за этого, при попытке изменения только что созданной записи появляются ошибки, дескать не могу найти строку для обновления. Если создавать запись непосредственно из MS Access, то записи сразу же присваивается какой-то код репликации, а в Delphi базу почему-то нужно закрыть и открыть заново.
Насколько я понимаю у человека точно такая же проблема как у меня. Я тоже в качестве ключа использую поле со счетчиком, но через Делфи добавляя запись выскакивает ошибка. Далее такой ответ:Код репликации в Access - это размер поля, а не его тип. Имеет размер в 16 байт. Туда вставляется значение GUID, которое надо генерировать.
Если честно, никогда не работал с этой штукой, поэтому ничего более толкового сказать не могу. :)
Поскольку я новичок подобный ответ для меня как китайская грамммота. Не могли вы объяснить каким образом поступить чтобы в конце концов эта ошибка исчезла. Можно ли изменить поле счетчик так, чтобы при добавление записи Делфи не выдавал ошибку или необходимо обычное поле, а уникальный код давать самому (без помощи счетчика, встроенной функции Аксеса).
← →
Kostafey © (2007-01-14 01:19) [1]При каких обстоятельствах происходит ошибка? (код)
Вообще, я делал ADO+Access, правда не без помощи мастеров...
Использовал банальный автоинкремент (суррагатное ключевое поле) с которым работал сам Access,
аналогичных проблем не возникало.
← →
sniknik © (2007-01-14 18:17) [2]если ты новичок то зачем тебе поле репликации? с автоинкрементом не в пример проще и обновление его идет по умолчанию (в клиентский рекордсет подтягивается новое значение от созданной. т.е. никаких настроек не надо), и создается простым sql-ем (для guid-а нет (/не знаю) синтаксиса sql создания с дефаултным значением (типа как автоинкремент), а через обьекты для начинающего... да запаришся объяснять).
начинай с того что попроще. или рассказывай зачем нужно... (оправдано ли?)
← →
Anatoly Podgoretsky © (2007-01-14 18:53) [3]Создать не проблема - это тип поля UNIQUEIDENTIFIER
← →
sniknik © (2007-01-14 19:51) [4]> Создать не проблема - это тип поля UNIQUEIDENTIFIER
можно просто GUID, но так не будет авто (как у автоинкремента) задания значения для новой записи.
создать такое легко в мастере access-а (тип counter а у него размер поля ставиш "Код репликации"), есть примеры в справке для обьектов dao/jet, а вот синтаксиса для в хелпе sql не встречал (да и не искал/не нужно особо... если бы цель/задача такая стояла, а так, прекрасно хватает автоинкремента. потому и интересно зачем это начинающему, если у меня ни разу не было такой необходимости (стоит ли хотябы начинать пытаться искать))
т.е. если задача действительно стоит того, средства выбраны адекватно, то можно было бы "поковыряться"/разъяснить обьектную модель, пока время есть... (но судя по "активности" вопрошающего... ;) это такой "фишер", раскидал пост по куче форумов и ждет готового решения, проверяя только изредка... т.е. общения/совместного решения и взаимодействия не будет, а так не интересно)
← →
Anatoly Podgoretsky © (2007-01-14 19:56) [5]> sniknik (14.01.2007 19:51:04) [4]
Про то и речь, что Акцесс это еще штучка, там 90 процентов делается с помощью VBA и его функций, а возможности извне ограничены только простыми действиями.
← →
sniknik © (2007-01-14 20:11) [6]ну не только простыми..., функции бейсика по крайней мере доступны, не все конечно это очевидно. ну так вроде базы access для access и предназначены, делалось то для него, а не отдельный движок, естественно у него возможностей больше.
а с синтаксисом для sql, уверен это ограничение скорее документации (не раз бывало находил неописанное) чем реально ограничение...
просто никто наверное серьезно вопросом не занимался, смысла то большого в этом нет (а если уж "припрет" то обьектами сделать несложно... а вот объяснить начинающему практически невозможно ;о)) ).
← →
Beavercrazy (2007-01-14 22:25) [7]Ничего не понятно. :) Вы уж извеняйте, за тормоза.
Я попытаюсь объяснить максимально просто. Само ключевое поле для тех задач, которые выполняет программа совершенно не нужно. Ключевое поле нужно только чтобы не выскакивала ошибка. В свою очередь ошибка (не могу найти строку для обновления), как я понял из объеснений, может быть убрана путем добавления ключевого поля. Однако, как я понял, из вопроса и ответа по указанной ссылке, нельзя использовать счетчик в качестве ключевого поля, когда строки добавляются или редактируются через ADO в Делфи.
Вопрос собственно как быть? Сам счетчик в качестве ключевого поля очень удобен: Открыл Аксес, включаешь конструктор, указал ключевое поле, тип данных счетчик и собственно все, но в делфи, как я уже говорил, такое решени вызывает ошибку. Можно ли в самом аксесе изменить поле таким образом, чтобы счетчик остался, а ошибки нет :)? Или может просто мне следует вручную генерировать каждый раз новое значение и просто каждый раз записывать новое значение?
← →
sniknik © (2007-01-14 22:39) [8]> из вопроса и ответа по указанной ссылке, нельзя использовать счетчик в качестве ключевого поля
вот это вот либо подсказано либо понято абсолютно неверно, счетчик как раз обычно и используют в качестве "исскуственного" ключа, настолько обычно и часто, что у некоторых эти различные в общем понятия сливаются в одно.
> Или может просто мне следует вручную генерировать каждый раз новое значение
а это было бы идеологически неверно, в клиент серверных системах нельзя гарантировать уникальность сгенерированых на клиенте значений (если это конечно не GUID, но тут как выяснили свои сложности...)
и еще, вобще "теоретизировать" можно долго и увлекательно... но как показывает практика, к решению подобные ветки приводят редко... особенно новичков.
... если ты сознательно "задаешь" подобный стиль ветке... ну чтож попробуем, будет, бессмысленно конечно, но приятно проведенное время.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.02.04;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.054 c