Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Delphi7 ADO опять ошибка "row cannot..."
|
|||
|---|---|---|---|
|
#18+
Опять про "row cannot be updated", никак не могу побороть. Исходные данные просты: Есть база Access XP (*.mdb), стандартные компоненты для доступа ADO (TADOTable) , провайдер JET 4.0, всё очень локально. Таблица мастер и к ней еще 2 детейл. Программа добавляет данные для нескольких полей (штук 7-8) в мастер таблицу таким образом: Table.Insert; TableField1.Value := 'a'; TableField2.Value := 'b'; ... Table.Post; В Table LockType = ltOptimistic. При попытке вставить записи появляется ошибка. Если установить LockType = ltBatchOptimistic, все проходит без ошибок (что логично), но изменения ессно не постятся. Я делал BatchUpdate - сразу появляется ошибка "row cannot ...". Делал Refresh перед тем как заносить данные - ошибка не возникает, но рефрешить каждый раз таблицу из 10000 записей - это час времени займет. Есть два варианта - попробовать через SQL вставлять записи или как-нить разрешить эту коллизию с таблицами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2003, 14:15 |
|
||
|
Delphi7 ADO опять ошибка "row cannot..."
|
|||
|---|---|---|---|
|
#18+
Странная ситуация, а первичный ключ в таблице есть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2003, 14:37 |
|
||
|
Delphi7 ADO опять ошибка "row cannot..."
|
|||
|---|---|---|---|
|
#18+
Есть поле "kod" - оно уникальное, индексированное и является счетчиком. Все остальные - просто поля с разными типами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2003, 14:41 |
|
||
|
Delphi7 ADO опять ошибка "row cannot..."
|
|||
|---|---|---|---|
|
#18+
Поле может быть уникальным, индексированным, являться счетчиком, но в то же время не быть в первичном ключе. Еще раз: есть ли в таблице первичный ключ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2003, 16:58 |
|
||
|
Delphi7 ADO опять ошибка "row cannot..."
|
|||
|---|---|---|---|
|
#18+
to Александр Спелицын: Что-то я не понял, по-моему из того, что я написал выше, четко следует, что первичный ключ имеет место быть, вот выдержка из Хелпа Аксеса: "В Microsoft Access допускается определение первичных ключей трех типов. Ключевые поля счетчика Поле счетчика можно задать таким образом, чтобы добавлении каждой записи в таблицу в это поле автоматически вносился порядковый номер. Указание такого поля в качестве ключевого является наиболее простым способом создания первичного ключа. Если до сохранения созданной таблицы ключевые поля не были определены, Microsoft Access предлагает создать ключевое поле автоматически. При нажатии кнопки «Да» будет создано ключевое поле счетчика. Простой ключ Составной ключ " У меня - первый вариант. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2003, 18:02 |
|
||
|
Delphi7 ADO опять ошибка "row cannot..."
|
|||
|---|---|---|---|
|
#18+
Если предположить, что первичный ключ все же есть (а на этот счет нет конкретного подтверждения до сих пор), то остается дело в дефолтных полях. Снеси дефолтные значения в полях и должно заработать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2003, 20:28 |
|
||
|
Delphi7 ADO опять ошибка "row cannot..."
|
|||
|---|---|---|---|
|
#18+
Сначала - отключить detail и попробовать без них, потом попытаться оставить без изменений все поля, где есть default... Локализуйте проблему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2003, 08:04 |
|
||
|
Delphi7 ADO опять ошибка "row cannot..."
|
|||
|---|---|---|---|
|
#18+
to Dankov: Ok, что вы называете первичным ключом в таблице Аксес? Давайте разберемся в терминологии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2003, 11:11 |
|
||
|
Delphi7 ADO опять ошибка "row cannot..."
|
|||
|---|---|---|---|
|
#18+
Данная терминология не нуждается в прояснении. Первичный ключ - это то, что явно создано как "первичный ключ", а не что-то другое. Hint: Первичный ключ может быть создан на поле с счетчиком, но равно может и не быть создан. Я предполагаю, что первичный ключ все-таки существует, так как в противном случае набор данных скорее всего не был бы редактируемым вообще. Поэтому, я считаю, что проблему надо искать в наличии дефолтных значений у полей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2003, 12:21 |
|
||
|
Delphi7 ADO опять ошибка "row cannot..."
|
|||
|---|---|---|---|
|
#18+
1) Первичный ключ разумеется есть. 2) Значений по умолчанию в таблице нет (убрал). Ошибка осталась. 3) Таблица без детайлов. Ошибка есть. Теперь самое главное. Я ввел, так сказать, в заблуждение аудиторию первым постом. Прошу прощения. На самом деле код выглядит по-другому и ошибка возникает в другом месте. Итого: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Т.е. первая пара Insert/Post проходит. А на второй - ошибка. Курсор при этом не перемещается (не должен по крайней мере). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2003, 13:40 |
|
||
|
Delphi7 ADO опять ошибка "row cannot..."
|
|||
|---|---|---|---|
|
#18+
У тебя просто значение вставленного счетчика не возвращается и не присваивается полю после вставки. Поиграйся со свойствами соответствующего поля в таблице (в проекте дельфи, разумеется) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2003, 13:53 |
|
||
|
Delphi7 ADO опять ошибка "row cannot..."
|
|||
|---|---|---|---|
|
#18+
Блин горелый! Опечатка в коде. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Т.е. сначала Insert/Post, затем Edit/Post. Именно Edit, ведь данные вставляются в ту же запись. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2003, 14:02 |
|
||
|
Delphi7 ADO опять ошибка "row cannot..."
|
|||
|---|---|---|---|
|
#18+
Именно то, о чем я уже сказал. ADO формирует команду UPDATE и в WHERE ставит условие "ID=NULL" так как на предыдущем шаге не получено значение счетчика после вставки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2003, 14:20 |
|
||
|
Delphi7 ADO опять ошибка "row cannot..."
|
|||
|---|---|---|---|
|
#18+
А у меня в коде вроде нормально все, а ошибка вылетает эта, правда редко, раз в 2 дня где-то .... У кого какие мысли? Всем удачи!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2003, 14:42 |
|
||
|
Delphi7 ADO опять ошибка "row cannot..."
|
|||
|---|---|---|---|
|
#18+
Проверь, после первого поста есть новое значение первичного ключа ? Если ошибка редкая, можно сделать это сообщение просто как MessageBox при Field[0].Value.IsNull для диагностики проблемы. Проверь, не стоит ли где серверный курсор. (хотя, такая ошибка скорее для SQL провайдера характерна). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2003, 15:12 |
|
||
|
Delphi7 ADO опять ошибка "row cannot..."
|
|||
|---|---|---|---|
|
#18+
to Dankov: Вот тут поподробнее. "...на предыдущем шаге не получено значение счетчика после вставки." Почему не получено? Поле код (то что примари кей) устанавливается в (N + 1) нормально после вставки... После первого Post - запись нормально сохраняется - все значения на местах и счетчик в порядке. Или я не понял мысль..? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2003, 16:42 |
|
||
|
Delphi7 ADO опять ошибка "row cannot..."
|
|||
|---|---|---|---|
|
#18+
Если базу юзает только один пользователь, то можно после вставки делать Table.Last и вы попадаете на вставленную запись. В ином случае в качестве ключевого поля лучше не использовать поле-счетчик, а (как вариант) сделать табличку, где будет храниться текущий код счетчика, при вставке подхватывать его, увеличивать значение в таблице счетчика на 1 (для след. юзера) и вставлять в свое ключевое поле. Таким образом ID будет известен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2003, 17:12 |
|
||
|
Delphi7 ADO опять ошибка "row cannot..."
|
|||
|---|---|---|---|
|
#18+
to Pohipodium: Курсор никуда не передвигается с момента первого Insert/Post, посему не надо вызывать Last. Я не понимаю, зачем тогда вобще счетчик, если нужно вручную его устанавливать? И при чем оно тут? Значение счетчика присваивается автоматически, без моих усилий. Я это поле вообще не трогаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2003, 17:53 |
|
||
|
Delphi7 ADO опять ошибка "row cannot..."
|
|||
|---|---|---|---|
|
#18+
Оно присваивается в базе эксцесс. А клиентское приложение об этом не знает. И там NULL после вставки образуется. Чтобы клиентское приложение это значение получало после вставки, надо попытаться как минимум выставить свойство AutoGenerateValue в arAutoInc. Ленишься. Я же уже давно сказал, что нужно поковырять свойства поля. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2003, 18:18 |
|
||
|
Delphi7 ADO опять ошибка "row cannot..."
|
|||
|---|---|---|---|
|
#18+
to Gluck99 все не так оптимистично как ты думаешь а ты попробовал вставить перед Table.Edit строчку Table.Last? счетчик для репликации хорошо использовать например. а вообще все вопросы такого рода можешь сразу Билу который Гейтс задавать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2003, 18:20 |
|
||
|
Delphi7 ADO опять ошибка "row cannot..."
|
|||
|---|---|---|---|
|
#18+
насколько я помню, то даже в модуле access'a нельзя было после вставки записи получить значение автоинкрементного ID, без конкретного перехода на запись. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2003, 18:31 |
|
||
|
Delphi7 ADO опять ошибка "row cannot..."
|
|||
|---|---|---|---|
|
#18+
to Dankov: Ну почему же NULL? Например в гриде после первого Post вовсе не NULL, а то, что и должно быть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2003, 18:43 |
|
||
|
Delphi7 ADO опять ошибка "row cannot..."
|
|||
|---|---|---|---|
|
#18+
а ты попробуй сделать в коде после Post CodeID:=Table.FieldByName('ID').asInteger; получишь 0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2003, 18:50 |
|
||
|
Delphi7 ADO опять ошибка "row cannot..."
|
|||
|---|---|---|---|
|
#18+
Тогда не знаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2003, 18:50 |
|
||
|
Delphi7 ADO опять ошибка "row cannot..."
|
|||
|---|---|---|---|
|
#18+
При использовании DAO для доступа к таблицам Access применялся такой способ (выдержка на васике): with DAORecordset .Addnew 'подготовка к вводу новых записей !Поле1=224 !Поле2="цыцфп" ......... lngA=!ID 'считывание значения счетчика из ключевого поля !Update 'обновление набора записей - сохранение внесенных изменений End with далее по сохраненному значению счетчика в наборе искалась добавленная запись чует мое исстрадавшееся сердце, что в ADO похожая фигня должна быть. Знатоки, отзовитесь - мне это тоже завтра-послезавтра надо будет - просто пока не добрался ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2003, 18:58 |
|
||
|
|

start [/forum/search_topic.php?author=%D0%9B%D0%B0%D0%BC%D0%B5%D1%80%D0%BE%D0%BA&author_mode=last_posts&do_search=1]: |
0ms |
get settings: |
11ms |
get forum list: |
18ms |
get settings: |
10ms |
get forum list: |
22ms |
get settings: |
9ms |
get forum list: |
17ms |
get settings: |
10ms |
get forum list: |
16ms |
get settings: |
10ms |
get forum list: |
20ms |
get settings: |
7ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
55ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
| others: | 5058ms |
| total: | 5357ms |

| 0 / 0 |
