Помогите! "row cannot be updated..." %-)

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
Scuder
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 334
Зарегистрирован: 17.08.2002 (Сб) 13:18
Откуда: Moscow, Russia

Помогите! "row cannot be updated..." %-)

Сообщение Scuder » 19.04.2005 (Вт) 21:12

Уже полтора часа туплю. Элементарное действие не могу сделать! :-(

Access 2000. Обычная таблица. ADO.

Код: Выделить всё
ATempDB.Open "driver={Microsoft Access Driver (*.mdb)};DBQ=" & App.Path + "\x.mdb"

ATempRS.CursorType = adOpenKeyset
ATempRS.LockType = adLockOptimistic
ATempRS.CursorLocation = adUseClient
ATempRS.ActiveConnection = ATempDB

ATempRS.Open "SELECT * FROM Payments WHERE pStatus=0"

If ATempRS.RecordCount > 0 Then
    For i = 1 To ATempRS.RecordCount
        If SendPayment(...) = True Then
            ATempRS.Update "pStatus", 1
        Else
            Exit For
        End If
        ATempRS.MoveNext
    Next i
End If
ATempRS.Close


Загадка в том, что в компиляторе всё работает как надо. А делаю EXE и он тут же вылетает на строке ATempRS.Update "pStatus", 1 с ошибкой "Row cannot be located for updating. Some values may have been changed since it was last read."

Бред какой-то!
Поиск завёл вот сюда: http://support.microsoft.com/default.aspx?scid=kb;en-us;300586
Но у меня поле pStatus не имеет значения по умолчанию!
Что делать? :pale:

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 20.04.2005 (Ср) 1:18

Н-да, тяжелый случай. Вот тут смотрел?

На самом деле, такое у меня предложение будет. Заместо:
Код: Выделить всё
ATempRS.Update "pStatus", 1

писать вот что:
Код: Выделить всё
ATempDB.Execute "update Payments set Status = 1 where Id = " & ATempRS.Fields("Id").Value
Но это, ясен пень, если у тебя там айдюк есть. Впрочем, я не видел еще ни одной системы, где платеж не был бы отдельной сущностью и, как следствие, не имел бы первичного ключа :).

Если не поможет, кидай скрипт на таблицу, будем думать...

Scuder
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 334
Зарегистрирован: 17.08.2002 (Сб) 13:18
Откуда: Moscow, Russia

Сообщение Scuder » 20.04.2005 (Ср) 10:35

Ennor, thx. Была у меня похожая мысль.. :-)

Но, согласись, неправильно это. Хотя, как посмотреть..
Что интересно, с DAO всё работает нормально.
Но что мне больше всего непонятно, почему из среды разработки всё рулит, а EXE'шник спотыкается! :shock:

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 20.04.2005 (Ср) 10:55

Компиляй с Debug Info и вызывай DebugBreak() где-нить перед этим местом. После чего свалишься в сишный дебаггер (надеюсь, он у тебя стоит :) ) и будешь отлаживать уже в нем.

Я уже не первый раз встречаю ситуацию, когда интерпретируемый и откомпилированный код ведут себя по-разному. Так что у тебя еще цветочки, у меня в первый раз булева переменная не меняла значение...

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 20.04.2005 (Ср) 11:29

попробуй для начала перейти с ODBC на OLEDB Provider for Jet

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Re: Помогите! "row cannot be updated..." %-)

Сообщение Andrey Fedorov » 20.04.2005 (Ср) 11:41

Scuder писал(а):Row cannot be located for updating. Some values may have been changed since it was last read."


Данное сообщение выдается если ты (или дургой пользователь) уже где-то в другом месте изменил данную запись после открытия Recordset-a. Ну а где - надо иметь исходники, чтобы разобраться...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Scuder
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 334
Зарегистрирован: 17.08.2002 (Сб) 13:18
Откуда: Moscow, Russia

Сообщение Scuder » 20.04.2005 (Ср) 11:59

Господа, Ennor выразил единственную правильную мысль в данной ситуации.

Konst_One, JET (если порыть информацию) - это вещь, к которой без костюма хим. защиты лучше не подходить.

Andrey Fedorov, ты бы по ссылочке из первого топика зашёл.. :-) А то твой пост как-то даже оскорбительно выглядит.


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

    TopList