Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / row cannot be located for updatig... / 12 сообщений из 12, страница 1 из 1
28.09.2007, 13:36
    #34834537
sergeych
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
row cannot be located for updatig...
Привет всем !
Много лазил по поисковику, может не там смотрел или не тем местом, но я в тупике. Немогу понять в чем проблема. При обновлении таблицы выходит ошибка "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
28.09.2007, 14:05
    #34834710
HandKot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
row cannot be located for updatig...
может пока открыт rs кто-то мог изменить значения в этом поле?
поиграйтесь с параметрами рекордсета, к примеру adBathOptimistic

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

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

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

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



I Have Nine Lives You Have One Only
THINK!
...
Рейтинг: 0 / 0
28.09.2007, 14:57
    #34834952
sergeych
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
row cannot be located for updatig...
Спасибо HandKot за оперативные ответы. Только что попробовал поменять формат поля Dolg c Double на DECIMAL и все заработало. Непонятно только почему в Double не работало, я то не сравниваю , а присваиваю !?
Еще раз спасибо !
...
Рейтинг: 0 / 0
28.09.2007, 15:14
    #34835047
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
row cannot be located for updatig...
Денги надо хранить в полях 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
28.09.2007, 15:35
    #34835149
sergeych
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
row cannot be located for updatig...
...
Рейтинг: 0 / 0
28.09.2007, 15:40
    #34835161
sergeych
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
row cannot be located for updatig...
Деньги деньгами, но почему не обновлялось поле с форматом Double ? Теперь его (формат) не использовать чтоли , раз Update не всегда работает ? Проблема решена, просто интересно
...
Рейтинг: 0 / 0
28.09.2007, 15:41
    #34835168
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
row cannot be located for updatig...
При обновлении таблицы выходит ошибка "row cannot be located for updatig. Some values may have been changed ..... " Текст ошибки говорит сам за себя. Это означает, что другой клиент обновил запись с тех пор, как ты ее получил. Нужно просто сделать rs.Resync, а потом опять UpdateBatch.
...
Рейтинг: 0 / 0
28.09.2007, 15:47
    #34835189
HandKot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
row cannot be located for updatig...
я бы сделал еще проще
Код: 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
28.09.2007, 15:51
    #34835210
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
row cannot be located for updatig...
HandKotя бы сделал еще прощеНа это я и надеялся что кто-то напомнит как делаются такие апдейты. Сам я подзабыл SQL за последний год.
...
Рейтинг: 0 / 0
28.09.2007, 15:53
    #34835221
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
row cannot be located for updatig...
А на счет апдейта полей, насколько я помню стандарты SQL не обязывают производителей СУБД делать автоматические преобразования типов данных.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / row cannot be located for updatig... / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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