|
|||||||
Перебор записей в цикле (ADO)
Время создания: 06.03.2020 07:46
Текстовые метки: VBA, ADO, EOF
Раздел: Разные закладки - VBA - Access - ADO
Запись: xintrea/mytetra_db_adgaver_new/master/base/15834696053fmcqccjxa/text.html на raw.githubusercontent.com
|
|||||||
|
|||||||
Вопрос - зачем для обновления использовать цикл? Если попробовать просто запрос на обновление. Поскольку в качестве нового значения используется функция (как я понял, клиентская), параметр которой - некоторое поле из обновляемой таблицы (не обязательно), то в лоб задачу не решить: я тут маленько поэксперементировал с таблицей, у которой 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
Итог - первый метод на два порядка быстрее и позволяет использовать строковое выражение функций, что может быть очень удобно |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|