Access — Excel (VBA) — несоответствие типов

#excel #vba #ms-access #time-and-attendance

#excel #vba #ms-access #учет рабочего времени и посещаемости

Вопрос:

Мы пытаемся загрузить данные из базы данных Access с помощью VBA в Excel. Но наш код не работает нормально.

 SQL1 = "SELECT Name " amp; _
SQL1 = SQL1 amp; "FROM February" amp; _
SQL1 = SQL1 amp; "WHERE Gender = 'F'" amp; _
SQL1 = SQL1 amp; "ORDER BY Name"
Set rs1 = db.OpenRecordset(SQL1, dbOpenSnapshot)

 If rs1.RecordCount = 0 Then
    MsgBox "No data retrieved from database", vbInformation   vbOKOnly, "No Data"
     GoTo SubExit
 Else
     rs1.MoveLast
     recCount = rs1.RecordCount
     rs1.MoveFirst
End If
  xlSheet.Range("B28").CopyFromRecordset rs1
  

Мы получаем ошибку «Несоответствие типов» в строке:

 Set rs1 = db.OpenRecordset(SQL1, dbOpenSnapshot)
  

Кто-нибудь может нам помочь и объяснить, почему мы получаем эту ошибку?

Комментарии:

1. Ваш код неполон, не соответствует тому, как вы объявили свою переменную (или если они явно не объявлены, в этом случае они должны быть с Option Explicit вверху, ни как вы инициализируете базу данных. Насколько я могу судить, db не объявлено. Кроме того, я не знаю, rs1 неявно ли объявлено как ADODB.Recordset , что было бы несоответствием, поскольку Database.OpenRecordset() может возвращать только DAO.Recordset .

2. Частично проблема заключается в нехватке пробелов в концах строк FROM и WHERE, создающих инструкцию SQL. Текст «выполняется вместе».

Ответ №1:

 SQL1 = "SELECT Name " amp; _
SQL1 = SQL1 amp; "FROM February" amp; _
SQL1 = SQL1 amp; "WHERE Gender = 'F'" amp; _
SQL1 = SQL1 amp; "ORDER BY Name"
  

должно быть

 SQL1 = " SELECT Name " amp; _
       " FROM February" amp; _
       " WHERE Gender = 'F'" amp; _
       " ORDER BY Name"
  

…или не используйте продолжение строки и используйте SQL1 = SQL1 amp; , но вы можете использовать только один из этих параметров.