powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / row cannot be located for updatig...
12 сообщений из 12, страница 1 из 1
row cannot be located for updatig...
    #34834537
sergeych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет всем !
Много лазил по поисковику, может не там смотрел или не тем местом, но я в тупике. Немогу понять в чем проблема. При обновлении таблицы выходит ошибка "row cannot be located for updatig.Some values may have been changed..... " Причем только некоторые строки не обновляются,а в целом работает. И это происходит независимо от того, новые данные прописываю в поле Dolg или нет. БД MySQL. Пока один работаю в БД.
Структура таблицы Klient :

PrKey autoinc -- KlientId
Char --- KlName
Double (9,2) -- Dolg



Set rs = New Recordset
SQL = "SELECT KlientId,Dolg From Klient"
rs.CursorLocation = adUseClient
rs.Open SQL, cn, adOpenStatic, adLockPessimistic
For i = 0 To rs.RecordCount - 1

SQL = "SELECT SUM(Count*ProdPrice) From Prodaja WHERE KlientId=" & rs!KlientId
Set rs2 = New Recordset
rs2.Open SQL, cn, adOpenStatic, adLockReadOnly
If Not IsNull(rs2.Fields(0)) Then rs!Dolg = rs2.Fields(0) Else rs!Dolg = 0
rs2.Close
Set rs2 = Nothing

SQL = "SELECT SUM(OplSum) From Oplata WHERE KlientId=" & rs!KlientId
Set rs2 = New Recordset
rs2.Open SQL, cn, adOpenStatic, adLockReadOnly
If Not IsNull(rs2.Fields(0)) Then rs!Dolg = rs!Dolg - rs2.Fields(0)
rs2.Close
Set rs2 = Nothing

rs.Update
rs.MoveNext
Next i
rs.Close
Set rs = Nothing

Помогите понять почему конкретные строки не обновляются. Спасибо.
...
Рейтинг: 0 / 0
row cannot be located for updatig...
    #34834710
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может пока открыт rs кто-то мог изменить значения в этом поле?
поиграйтесь с параметрами рекордсета, к примеру adBathOptimistic

I Have Nine Lives You Have One Only
THINK!
...
Рейтинг: 0 / 0
row cannot be located for updatig...
    #34834779
sergeych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Менял параметры recordset , ничего не помогает. Не в блокировке дело. И в базе пока один работаю, никто не мог ничего изменить. Для доступа к базе использую DBACentral for MySQL. Так вот, в нем меняю значение этого поля, после этого код работает, но один раз. После опять спотыкается на rs.Update именно на определенном клиенте.
...
Рейтинг: 0 / 0
row cannot be located for updatig...
    #34834920
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот что нарыл

т.е смысл в следующем, если значения поля хоть как-то совпадают, то выдается ошибка
как я понял это относится только к MySQL

1) видимое решение: проверять предыдущее значение и, если то же самое, то не делать обновление

2) делать update через запрос update MyTable Set ...



I Have Nine Lives You Have One Only
THINK!
...
Рейтинг: 0 / 0
row cannot be located for updatig...
    #34834952
sergeych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо HandKot за оперативные ответы. Только что попробовал поменять формат поля Dolg c Double на DECIMAL и все заработало. Непонятно только почему в Double не работало, я то не сравниваю , а присваиваю !?
Еще раз спасибо !
...
Рейтинг: 0 / 0
row cannot be located for updatig...
    #34835047
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Денги надо хранить в полях Decimal а не Double.

А программу я бы так написал:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
   rs.Open SQL, cn, adOpenStatic, adLockReadOnly
   
   Do Until rs.EOF
      cn.Execute "UPDATE Klient SET Dolg = (" & _
                  "ISNULL((SELECT SUM(""Count"" * ProdPrice) FROM Prodaja WHERE KlientId = " & rs("KlientId") & _
                  "),0) - ISNULL((SELECT SUM(OplSum) From Oplata WHERE KlientId = " & rs("KlientId") & _
                  "),0) ) WHERE KlientId = " & rs("KlientId")
      
      rs.MoveNext
   Loop
Не знаю только что заменяет ISNULL в MySQL.
...
Рейтинг: 0 / 0
row cannot be located for updatig...
    #34835149
sergeych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
row cannot be located for updatig...
    #34835161
sergeych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Деньги деньгами, но почему не обновлялось поле с форматом Double ? Теперь его (формат) не использовать чтоли , раз Update не всегда работает ? Проблема решена, просто интересно
...
Рейтинг: 0 / 0
row cannot be located for updatig...
    #34835168
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При обновлении таблицы выходит ошибка "row cannot be located for updatig. Some values may have been changed ..... " Текст ошибки говорит сам за себя. Это означает, что другой клиент обновил запись с тех пор, как ты ее получил. Нужно просто сделать rs.Resync, а потом опять UpdateBatch.
...
Рейтинг: 0 / 0
row cannot be located for updatig...
    #34835189
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я бы сделал еще проще
Код: plaintext
1.
2.
3.
4.
5.
6.
cn.Execute "
Update Klient
  Set Dolg = IsNull(d.Dolg,0) - IsNull(o.Oplata)
From
  Klient
Left Outer Join (Select KlientId, SUM(Count*ProdPrice From Prodaja Group By KlientId) d On d.KlientId = Klient.KlientId
Left Outer Join (Select KlientId, SUM(OplSum) From Oplata Group By LientId) o On o.KlientId = Klient.KlientId"

2 sergeych
возможно это проблема провайдера, т.к. насколько я понял, данная ошибка только на базе MySQL и в других базах не наблюдается


I Have Nine Lives You Have One Only
THINK!
...
Рейтинг: 0 / 0
row cannot be located for updatig...
    #34835210
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HandKotя бы сделал еще прощеНа это я и надеялся что кто-то напомнит как делаются такие апдейты. Сам я подзабыл SQL за последний год.
...
Рейтинг: 0 / 0
row cannot be located for updatig...
    #34835221
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А на счет апдейта полей, насколько я помню стандарты SQL не обязывают производителей СУБД делать автоматические преобразования типов данных.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / row cannot be located for updatig...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]