#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;
, но вы можете использовать только один из этих параметров.