Итак, я недавно работал над сценарием VBA для переноса всей базы данных медицинских записей студентов из их старой одноплатной системы с 68 полями в новую динамическую систему с 24 связанными таблицами.
Не было проблем для первых нескольких таблиц, но потом я столкнулся с этим.Строка кода, выдающая ошибку:
Set rstFrom = CurrentDb.OpenRecordset("select " & Flat & ".Student," & Flat & ".School," & Flat & ".Social," & Flat & ".FamilyHist from " & Flat & " WHERE 1=1")`
Flat
- это строка, в которой хранится имя плоской базы данных (это потому, что я работаю с фиктивной базой данных, поэтому им потребуется удобнаяи быстрый способ изменить код, который я делаю, для работы с реальной вещью)
rstFrom
должен содержать только столбцы таблицы из 68 полей, относящиеся к таблице, в которую я копируюмомент (в данном случае это таблица FamilyHistory, которая действительно нуждается только в studentID
и FamilyHistory
) - обратите внимание, что исходная таблица не присваивала уникальные studentID
s, поэтому я должен использовать имя, школу и социальные сети дляопределите, что я имею дело с одним и тем же ребенком, и найдите их studentID
Когда эта строка кода запускается, я получаю следующую ошибку:
Run-time error '3061':
Too few parameters. Expected 1.
Очевидно, у меня есть 1 параметр, это:
"select " & Flat & ".Student," & Flat & ".School," & Flat & ".Social," & Flat & ".FamilyHist from " & Flat & " WHERE 1=1"
(что после разбора равно):
"select Demos.Student,Demos.School,Demos.Social,Demos.FamilyHist from Demos WHERE 1=1"
Где 1 = 1 требуется при работе с Access VBAили он возвращает только первую соответствующую запись, а невсе соответствующие записи.
Кто-нибудь еще сталкивался с такой же проблемой, как и ее решение?Я заметил одну вещь.Когда я изменяю параметр на:
"select Demos.Student from Demos WHERE 1=1"
Он может пройти эту линию без проблем, хотя это вызывает проблемы позже, когда мне нужно прочитать другие данные, которые я не сделализвлечения.Однако я подумал, что это интересно, что ошибка возникает из-за SQL, а не из функции OpenRecordset.