Несоответствие типов в выражении VBA SQL - PullRequest
0 голосов
/ 21 октября 2019

Я был вне доступа в течение многих лет, но мне была поручена небольшая функция базы данных. Что мне нужно сделать, это создать запрос на основе результатов выпадающего списка и открыть этот запрос, чтобы конечные пользователи могли копировать / вставлять из него то, что им нужно (или весь набор результатов).

Мой код выглядит следующим образом:

Private Sub btnSubmit_Click()
Dim X As String
Dim Y As String
Dim sSQL As String
Dim MyRs As Recordset

If IsNull(cboReportName.Value) Or IsNull(cboError.Value) Or cboReportName.Value = "" Or cboError.Value = "" Then
  MsgBox "One or more of your selections is empty."
  Exit Sub
End If

X = cboReportName.Column(2)
Y = cboError.Column(1)
sSQL = "Select * from " & X & " where Error = '" & Y & "'"

Set MyRs = CurrentDb.OpenRecordset(sSQL)

End Sub

Я получаю сообщение об ошибке в строке Set MyRS, оно говорит мне о несоответствии типов. Связано ли это с тем, как Access использует Short Text и Long Text? В запросе есть NULL результаты, это скинет? Любые идеи приветствуются.

1 Ответ

3 голосов
/ 21 октября 2019

Очень маловероятно, что вы получите ошибку несоответствия типов VBA из вашего запроса, так как даже если бы столбец [Ошибка] не был текстовым, он просто возвратил бы ложь при сравнении со строковым значением. (Это не должно сбрасывать со счетов комментарий Эрика о нескольких уровнях запросов, вызывающих ошибки ... был там, разбирался с этим, и я считаю, что это все еще может быть причиной, если мой ответ не поможет.)

ЭтоСкорее всего, вы обратились к библиотеке ADO (из меню окна VBA Инструменты | Ссылки ... ) и разместили ее приоритет над библиотеками объектов данных Access по умолчанию. Это заставит Dim MyRs As Recordset интерпретировать это как набор записей ADO, но CurrentDb.OpenRecordset(sSQL) вернет DAO.Recordset.

Обновите объявление до

Dim MyRs As DAO.Recordset

или измените порядок приоритетов:библиотека ADO в Инструменты |Список литературы ... список.

...