Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1168639940
kaZaNoVa
2007-01-13 01:12
2007.02.04
Универсальный вызов функции


4-1158843222
laronov
2006-09-21 16:53
2007.02.04
Как получить данные из чужого DBGrid а


15-1168263513
vasIzmax
2007-01-08 16:38
2007.02.04
Мы все учились, чему-нибудь и КАК-НИБУДЬ


3-1163190542
Zurius
2006-11-10 23:29
2007.02.04
Ошибка приложения, технология ADO, Access


6-1157144470
Орион
2006-09-02 01:01
2007.02.04
Прокси для TWebBrowser





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский