Редактировать: Проблема была On Error Resume Next
, подавляющая ошибки в OpenRecordset
, при этом для Variant было задано значение Nothing.OpenRecordset
не удалось из-за имен столбцов с ошибками, и указание Тип , когда Тип по умолчанию определяется по доверенности как связанная таблица.
Решение : закомментировать / удалить On Error Resume Next
, чтобы вызвать ошибки.Исправьте орфографические ошибки в именах столбцов.Не указывайте тип (оставьте поле пустым), когда Запрос из связанной таблицы ( Тип автоматически становится Dynaset для запросов из связанных таблиц.
В определенном разделе кода я пытаюсь отобразитьколичество записей в наборе записей (в основном для целей отладки). Я наткнулся на то, что я считаю уникальной ошибкой. Код выглядит следующим образом:
specsVariableTempTableName = "specs_variable_" & CStr(Me.OpFormOpRecordID) & "_temp"
specItemsQuery = "SELECT [Item], [Document #], [Item Description], [SubItems], [Attribute], [Spec Characteristics] FROM [tbl_forms] WHERE [Document #] = '" & Me![Form #] & "' AND [Part #] = '" & Me![Part Number] & "';"
Set db_source = CurrentDb
If IsNull(DLookup("Name", "MSysObjects", "Name='" & specsVariableTempTableName & "' And Type In (1,4,6)")) Then
'Check for existing temporary spec table
'Create one if not
MsgBox ("No temporary table " & specsVariableTempTableName)
Set specItemsRecordSet = db_source.OpenRecordset(specItemsQuery, , dbFailOnError).Clone
MsgBox (specItemsRecordSet.RecordCount & " Records")
MsgBox ("What the f***")
If Not (specItemsRecordSet.EOF And specItemsRecordSet.BOF) Then
'If the result set is not empty, go to first entry
specItemsRecordSet.MoveFirst
With specItemsRecordSet
MsgBox (.RecordCount)
End With
Else
MsgBox ("No Specs found for given part number and document number")
End If
db_source.Execute "SELECT [Document #], [Part #], [ParentItem], [SubItem], [Nominal], [LSL], [USL], [UOM] INTO " & specsVariableTempTableName & " FROM [Specs_Variable] WHERE (([Specs_Variable]![Document #] = '" & Me![Form #] & "') AND ([Specs_Variable]![Part #] = '" & Me![Part Number] & "'));", dbFailOnError
End If
Соответствующая строка - MsgBox (specItemsRecordSet.RecordCount & "Records"). Строки MsgBox до и после этой строки отображают MsgBox, и я должен нажать OK, чтобы закрыть его. Однако эта конкретная строка не отображает MsgBox, код не останавливается, он просто переходит к следующей строкекак если бы кода вообще не было.
Я пытался переименовать таблицы в запросе, я пытался .MoveLast перед вызовом .RecordCount. Даже MsgBox в блоке WITH не отображается. Iможно было бы ожидать, что если бы запрос не дал результатов, я бы получил 0, Null или Error при попытке показать в MsgBox, ноt MsgBox все равно будет отображаться и потребует действий пользователя для продолжения.