Member 13462396 Ответов: 1

(VB6) Ошибка времени выполнения ‘-2147217864 (80040e38)’: строка не может быть найдена для обновления. Некоторые значения могут быть изменены с момента последнего чтения


у меня есть процесс, который обновит записи материала. но сначала он получит существующие записи материала, такие как avail quantity перед обновлением и когда я попытаюсь обновить его новым. я получаю сообщение об ошибке "Ошибка времени выполнения' -2147217864 (80040e38)’: строка не может быть найдена для обновления. Некоторые значения, возможно, были изменены с момента последнего чтения."

вот мой код:

Dim rs As New ADODB.Recordset
Set rs = New ADODB.Recordset
Dim coy As String
If Left(Text4.Text, 3) = "800" Then
For i = 1 To ListView2.ListItems.Count
With ListView2.ListItems(i)
If rs.State <> 0 Then rs.Close
     rs.Open "Select * from Inventory where InventoryID = " & Val(.ListSubItems(6).Text), db, 3, 3
     If rs.RecordCount <> 0 Then
       'get average cost start
        Dim avgcost, Stockqty, newstockqty As Double
        Stockqty = CDbl(rs!AvailQty) * CDbl(rs!unitprice)
        newstockqty = CDbl(.ListSubItems(7).Text) * CDbl(.ListSubItems(8).Text)
        avgcost = (Stockqty + newstockqty) / CDbl(CDbl(rs!AvailQty) + 
CDbl(.ListSubItems(7).Text))
       'get average cost end

       rs!avecost = FormatNumber(avgcost, 3)
       avaiqtyparam = CDbl(rs!AvailQty) + CDbl(.ListSubItems(7).Text)
      rs!AvailQty = CDbl(rs!AvailQty) + CDbl(.ListSubItems(7).Text)
       rs!unitprice = FormatNumber(CDbl(.ListSubItems(8).Text), 5)
       rs!lastupdate = FormatDateTime(DTPicker1.Value, vbShortDate)

       Dim AvgVat, stockvat, nestockvat As Double

       stockvat = CDbl(rs!AvailQty) * CDbl(rs!AvailVAT)
       nestockvat = CDbl(.ListSubItems(7).Text) * CDbl(.ListSubItems(11).Text)
       AvgVat = (stockvat + nestockvat) / CDbl(CDbl(rs!AvailQty) + 
 CDbl(.ListSubItems(11).Text))
       rs!AvailVAT = CDbl(.ListSubItems(11).Text)
       rs!AveVAT = FormatNumber(AvgVat, 3)
       rs.Update
     End If
End With
rs.Close
Set rs = Nothing
Next i


Что я уже пробовал:

у меня на столе лежит первичный ключ. и я не знаю, почему эта ошибка угрозы для человека.

Member 13462396

п

1 Ответов

Рейтинг:
1

Maciej Los

Похоже, вы пытаетесь обновить строку, которая не находится в режиме редактирования.

Причин может быть 2:
1) набор записей открыт в статическом режиме
2) вы не добавили .Edit инструкция.

Вот предлагаемый код:

Случай 1-несколько записей

rs.Open "Select * from Inventory where InventoryID = " & Val(.ListSubItems(6).Text)
With rs
    Do While Not .EOF
        .Edit
        'your edits here
        .Update
        .MoveNext
    Loop
End With


Случай 2-одиночная запись
rs.Open "Select * from Inventory where InventoryID = " & Val(.ListSubItems(6).Text)
With rs
    .Edit
    'your edits here
    .Update
End With



Для получения более подробной информации, пожалуйста, ознакомьтесь с документацией:
Открытый метод (набор записей ADO) | Microsoft Docs[^]
Набор записей.Метод обновления (DAO)[^]- с рабочим примером