#sql #ms-access #vba
#sql #ms-access #vba
Вопрос:
Я делал это раньше, просто проверял, существует ли запись уже в таблице, прежде чем я вставлю новую запись. Это было в основном то, что я сделал, но на этот раз я получаю сообщение об ошибке
Error: "3061 Too few parameters. Expected 2."
Я пытался быть очень конкретным ( tblfromICPMS.Woid
а не просто Woid
), думая, что это может помочь, но на самом деле это ничего не изменило. Я получаю конкретно в строке
If rs.RecordCount = 0 Then
Это код, в котором ThisWoid, Analyte и ThisTestId являются локальными переменными:
DIM rs As Object
strSQL = "SELECT tblfromICPMS.Woid, tblfromICPMS.Analyte, tblfromICPMS.TestID FROM tblFROMICPMS WHERE (tblFROMICPMS.woid = " amp; ThisWoid amp; ") AND (tblFROMICPMS.analyte = " amp; Analyte amp; ") AND (tblfromICPMS.Testid=" amp; ThisTestID amp; ") "
Set rs = CurrentDb.OpenRecordset(strSQL)
If rs.RecordCount = 0 Then
"insert record"
End IF
ОБНОВЛЕНИЕ: сообщение об ошибке изменено на 1, ожидаемое после обновления sqlstr в комментариях, также включающее объявление rs. Для пояснения tblFromICPMS представляет собой таблицу, содержащую столбцы Woid, Analyte и TestID. Я извлек три значения и сохранил их в локальных переменных ThisWoid, Analyte и ThisTestId . Я хочу вставить запись, но сначала я должен посмотреть, существует ли она уже в tblfromICPMS. Также ThisWoid и Analite являются строками
Комментарии:
1. Вы пытались отлаживать? Боюсь, в том, что вы разместили здесь, у вас нет строки, которая указывает на ошибку. А что это такое?
(tblFROMICPMS.woid = ThisWoid)
. Что такоеThisWoid
. Разве так не должно быть(tblFROMICPMS.woid = " amp; ThisWoid amp; ")"
?2. Взгляните на
TabelfromICPMS.TestID
. Это должно бытьtblfromICPMS.TestID
вместо.3. Вы объединяете эту строку sql в фактическом коде? Если вы пройдете, вы увидите, что оператор буквально
SELECT tblfromICPMS.Woid, tblfromICPMS.Analyte, TabelfromICPMS.TestID FROM tblFROMICPMS WHERE (tblFROMICPMS.woid = ThisWoid) AND (tblFROMICPMS.analyte = Analyte) AND (tblfromICPMS.Testid=ThisTestID)
там, где вы хотите что-то вроде «WHERE (tblFromICPMS.woid = » amp; strVariable amp; «) И » `4. Можете ли вы включить объявление для rs?
5. В принципе, мы все согласны с тем, что вы должны попробовать эту строку
"SELECT tblfromICPMS.Woid, tblfromICPMS.Analyte, tblfromICPMS.TestID FROM tblFROMICPMS WHERE (tblFROMICPMS.woid = " amp; ThisWoid amp; ") AND (tblFROMICPMS.analyte = " amp; Analyte amp; ") AND (tblfromICPMS.Testid=" amp; ThisTestID amp; ") "
, а также, если какое-либо из ваших условий сравнивается со строкой, вам нужна одинарная кавычка с каждой стороны, как"... ='" amp; var amp; "' and ..."
Ответ №1:
Прежде всего, я бы попробовал уменьшить размер rs как набора записей, а не объекта. Кроме того, вставьте окно сообщения, чтобы убедиться, что ваша строка SQL имеет смысл:
DIM rs As Recordset
strSQL = "SELECT Woid, Analyte, TestID FROM tblFROMICPMS WHERE (woid = " amp; ThisWoid amp; ") AND (analyte = " amp; Analyte amp; ") AND (Testid=" amp; ThisTestID amp; ") "
msgbox strSQL
Set rs = CurrentDb.OpenRecordset(strSQL)
If rs.RecordCount = 0 Then
"insert record"
End IF
Посмотрите, дают ли результаты окна сообщения какие-либо подсказки относительно того, что не так. Обычно эта ошибка возникает, когда Access не понимает одну из ваших переменных.
Не забывайте, что текст в вашей строке SQL должен быть заключен в одинарные кавычки, а целые числа — нет.