Существует несколько проблем, вероятно, это основная проблема:
StrSQL1.FindFirst ([PrimaryKey] = qs.Fields("external_nmad_id"))
FindFirst
принимает строку в качестве аргумента.У вас есть выражение, которое, вероятно, всегда оценивается как False или Null, поскольку [PrimaryKey]
является неопределенной переменной, поскольку она находится за пределами строки.
Это должно быть
StrSQL1.FindFirst "[PrimaryKey] = " & CSql(qs.Fields("external_nmad_id").Value)
с CSql()
отсюда: https://stackoverflow.com/a/36494189/3820271
Это работает для external_nmad_id
, являющегося числом или строкой.
Чтобы ловить подобные ошибки, поставьте Option Explicit
в верхней частикаждый модуль.Он обеспечивает декларацию переменных и сообщает о незадекларированных или неправильно написанных переменных / константах во время компиляции.
Чтобы это автоматически происходило в новых модулях, установите параметр Требуется объявление переменных в редакторе VBA.Это действительно необходимо для разработки VBA.
Другие проблемы:
1) Называть переменную набора записей довольно сложно StrSQL1
.
2)
Do While Not StrSQL1.NoMatch
имеет смысл только если вы делаете .FindNext
в цикле.Обычно вам всегда нужно If
с .NoMatch
.
3)
intCount = qs.RecordCount - 1
For i = 0 To intCount
' ...
qs.MoveNext
Next i
- не хороший способ сделать цикл записи - .RecordCount
надежно устанавливается только после .MoveLast
.Используйте это вместо:
Do While Not qs.EOF
' ...
qs.MoveNext
Loop
Это проще и надежнее.