MyTetra Share
Делитесь знаниями!
Перебор записей в цикле (ADO)
06.03.2020
07:46
Текстовые метки: VBA, ADO, EOF
Раздел: !Закладки - VBA - Access - ADO

Вопрос - зачем для обновления использовать цикл? Если попробовать просто запрос на обновление. Поскольку в качестве нового значения используется функция (как я понял, клиентская), параметр которой - некоторое поле из обновляемой таблицы (не обязательно), то в лоб задачу не решить: я тут маленько поэксперементировал с таблицей, у которой 62 тыс. записей:


Option Explicit


Private Sub cmdTest_Click()


Dim cnn As New ADODB.Connection

Dim strConn As String

Dim strSQL As String

Dim rst As New ADODB.Recordset

Dim tStart As Date

Dim tEnd As Date


rst.CursorLocation = adUseClient

rst.LockType = adLockPessimistic


strConn = "Provider=SQLOLEDB.1;Password=1111;Persist Security Info=False;User ID=fake;Initial Catalog=mkvd;Data Source=10.80.180.108"

cnn.Open strConn

' Таблица содержит около 62 тыс. записей

' Первый вариант - с помощью UPDATE запроса. На выполнение запроса затрачено около 2-х секунд. В качестве нового значения выступает результат пользовательской функции dbo.fnTest, которая хранится на сервере. У пользователя должны быть права на ее выполнение




strSQL = "UPDATE tblСтатТалон SET ВозрБольного=dbo.fnTest([ВозрБольного])"


tStart = Time

DoEvents

cnn.Execute (strSQL)

tEnd = Time


MsgBox "update запрос затратил " & DateDiff("s", tStart, tEnd) & " секунд(ы)"


' Второй вариант: с помощью набора и цикла. На выпоолнение запроса затрачено около 130 секунд. Тут без слов все ясно.

strSQL = "SELECT ВозрБольного FROM tblСтатТалон"

rst.Open strSQL, cnn


tStart = Time

DoEvents

Do Until rst.EOF

rst![ВозрБольного] = 10

rst.MoveNext

Loop

tEnd = Time


MsgBox "do loop затратил " & DateDiff("s", tStart, tEnd) & " секунд(ы)"


If cnn.State = 1 Then

cnn.Close

Set cnn = Nothing

End If


If rst.State = 1 Then

rst.Close

Set rst = Nothing

End If


End Sub


Итог - первый метод на два порядка быстрее и позволяет использовать строковое выражение функций, что может быть очень удобно

Так же в этом разделе:
 
MyTetra Share v.0.52
Яндекс индекс цитирования