Слишком мало параметров. Ожидается 1 - но у меня есть один - PullRequest
2 голосов
/ 25 мая 2011

Итак, я недавно работал над сценарием 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.

Ответы [ 2 ]

4 голосов
/ 25 мая 2011

Проверьте имена полей в SQL против того, что у вас есть в таблице.

Я думаю, либо имя поля в приведенном выше SQL является ошибочным, либо у вас нет одного или нескольких полей (оператора SQL) в таблице.

0 голосов
/ 18 марта 2015

Текстовые параметры в запросе на вставку должны заключаться в одинарные кавычки.Я столкнулся с той же проблемой с запросом, использующим Visual C ++.

Вот код, который я использовал в итоге ...

void FileInterface::TblWrite(CDatabase* db, rec* r)
{
   string sqlQuery = "insert into THREATS(ID,CODE,ID,LAT,LON,SHOW_A,SHOW_B) Values(" +
      to_string((_Longlong)r->num) + "," +
      to_string((_Longlong)r->code) + "," +
      "'" + r->id + "'" + "," + 
      to_string((long double)r->lat) + "," +
      to_string((long double)r->lon) + "," +
      "1" + "," +
      "1" +
      ")";
   db->ExecuteSQL(sqlQuery.c_str());
}
...