Supernatural 618 / 216 / 51 Регистрация: 22.11.2010 Сообщений: 1,778 Записей в блоге: 3 |
||||
1 |
||||
29.11.2015, 16:20. Показов 5515. Ответов 5 Метки нет (Все метки)
Всем привет.
Делаю запрос к таблице, но вылетает «Слишком мало параметров. Требуется 1»
0 |
26784 / 14463 / 3192 Регистрация: 28.04.2012 Сообщений: 15,782 |
|
29.11.2015, 16:51 |
2 |
«Слишком мало параметров. Требуется 1» Возможные причины ошибки:
0 |
618 / 216 / 51 Регистрация: 22.11.2010 Сообщений: 1,778 Записей в блоге: 3 |
|
29.11.2015, 17:14 [ТС] |
3 |
mobile, Таблица ДниНедели самостоятельная, и на запросе не строится. В ней наоборот определены 7 дней недели и проиндексированы, и от нее строится поле для расписания.
0 |
17250 / 7091 / 1595 Регистрация: 21.06.2012 Сообщений: 13,335 |
|
29.11.2015, 17:59 |
4 |
form_day Это что? 1 … 7 или Понедельник … ?
0 |
Supernatural 618 / 216 / 51 Регистрация: 22.11.2010 Сообщений: 1,778 Записей в блоге: 3 |
||||||||||||
29.11.2015, 18:15 [ТС] |
5 |
|||||||||||
ltv_1953, form_day это понедельник по пятницу. В общем вывел следующую ситуацию, если напрямую составить запрос
то запрос отработает без каких-либо замечаний, но стоит мне его как-то попытаться собрать из кусков типа
то тут уже начинаются разногласия. В сообщении msgbox все выводится верно, но вот запрос отказывается работать. Хотел приклеить концовку так
но тут возник коллапс, VBA сам вставляет 4ую кавычку.
0 |
шапоклякистка 8-го дня 3675 / 2235 / 391 Регистрация: 26.06.2015 Сообщений: 4,647 Записей в блоге: 1 |
|
29.11.2015, 18:21 |
6 |
Решение
но стоит мне его как-то попытаться собрать из кусков типа Потому что строковые величины нужно брать в кавычки StrSQL = «Select [ДниНедели].[Код] from ДниНедели Where [ДниНедели].[ДеньНедели]= ‘» & form_day & «‘»[/quote]
1 |
I have the following 'set recordset'
line that I cannot get working. The parameters seem correct according to all available help I can find on the subject.
The error displays :
«Run-time error ‘3061’. Too few parameters. Expected 1.»
Here is the line of code:
Set rs = dbs.OpenRecordset("SELECT Centre_X, Centre_Y FROM [qry_all_details]
WHERE ID = " & siteID & ";", dbOpenSnapshot)
Where rs is the recordset (Dim rs As Recordset) and dbs = CurrentDb()
Any help would be appreciated.
I have tried removing the WHERE
cause with no effect, and also using single quotes between double quotes, but no joy.
Many thanks.
gideon
19.3k11 gold badges72 silver badges113 bronze badges
asked Mar 26, 2011 at 20:23
2
«Run-time error ‘3061’. Too few parameters. Expected 1.»
I believe this happens when the field name(s) in your sql query do not match the table field name(s), i.e. a field name in the query is wrong or perhaps the table is missing the field altogether.
answered Dec 9, 2011 at 19:08
daviddavid
6415 silver badges3 bronze badges
2
you have:
WHERE ID = " & siteID & ";", dbOpenSnapshot)
you need:
WHERE ID = "'" & siteID & "';", dbOpenSnapshot)
Note the extra quotations ('
). . . this kills me everytime
Edit: added missing double quote
answered Jul 5, 2013 at 18:08
DATSDATS
1311 silver badge2 bronze badges
(For those who read all answers). My case was simply the fact that I created a SQL expression using the format Forms!Table!Control. That format is Ok within a query, but DAO doesn’t recognize it. I’m surprised that nobody commented this.
This doesn’t work:
Dim rs As DAO.Recordset, strSQL As String
strSQL = "SELECT * FROM Table1 WHERE Name = Forms!Table!Control;"
Set rs = CurrentDb.OpenRecordset(strSQL)
This is Ok:
Dim rs As DAO.Recordset, strSQL, val As String
val = Forms!Table!Control
strSQL = "SELECT * FROM Table1 WHERE Name = '" & val & "';"
Set rs = CurrentDb.OpenRecordset(strSQL)
answered Mar 22, 2018 at 22:26
John DoeJohn Doe
9367 silver badges15 bronze badges
My problem was also solved by the Single Quotes around the variable name
answered Sep 10, 2013 at 14:07
BradBrad
611 silver badge1 bronze badge
0
I got the same error message before.
in my case, it was caused by type casting.
check if siteID is a string, if it is you must add simple quotes.
hope it will help you.
answered Apr 16, 2013 at 8:35
My problem turned out to be, I had altered a table to add a column called Char
.
As this is a reserved word in MS Access it needed square brakcets (Single or double quote are no good) in order for the alter statement to work before I could then update the newly created column.
answered Feb 13, 2013 at 11:08
Paul CPaul C
4,6875 gold badges38 silver badges55 bronze badges
1
Make sure [qry_all_details] exists and is runnable. I suspect it or any query it uses, is missing the parameter.
answered Mar 27, 2011 at 0:32
AMissicoAMissico
21.4k6 gold badges77 silver badges106 bronze badges
I got the same error with something like:
Set rs = dbs.OpenRecordset _
( _
"SELECT Field1, Field2, FieldN " _
& "FROM Query1 " _
& "WHERE Query2.Field1 = """ & Value1 & """;" _
, dbOpenSnapshot _
)
I fixed the error by replacing «Query1» with «Query2»
answered Aug 1, 2016 at 13:32
In my case, I got this error when I tried to use in a query a new column, which I added to MySQL table (linked to MS Access), but didn’t refresh it inside MS Access.
To refresh a linked remote table:
- Open «Linked Table Manager» («External Data» tab on ribbon);
- Select a checkbox near the table you want to refresh;
- Press «OK» button.
answered Mar 4, 2017 at 15:20
tm-tm-
3331 gold badge3 silver badges10 bronze badges
In my case I was receiving this error when running a query from VBA with this command:
CurrentDb.Execute "qryName"
Double clicking on the query to execute it, worked fine, no error.
Changing the code to the following also worked fine, no error.
DoCmd.OpenQuery "qryName"
Hope this helps someone else who is unexpectedly getting this error.
If someone could explain why the first command caused the error I’d love to know.
answered Jun 2, 2022 at 17:45
AmyAmy
1551 silver badge9 bronze badges
Does the query has more than the parameter siteID, becouse if you want to run the query one parameter still isn’t filled witch gives you the error
answered Mar 27, 2011 at 9:49
In my case, I had simply changed the way I created a table and inadvertently changed the field name I tried to query. Make sure the field names you reference in the query actually exist in the table/query you are querying.
answered Apr 14, 2017 at 12:36
This Message is also possible to pop up, if there is a typo in the fields on which you define a join
answered Jun 26, 2019 at 7:06
Thanks for John Doe’s solution that helped a lot. Mine is very similar with some difference, using TempVars
Instead of :
strSQL = "SELECT * FROM Table1 WHERE Name = Forms!Table!Control;"
I used:
strSQL = "SELECT * FROM Query1" , Query1 being common for other usage
Query1 as:
"Select Field1, Field2 from Table1 where Id= [TempVars]![MyVar]
And similarly, removing [TempVars]![MyVar]
from view solved the problem.
answered Sep 6, 2019 at 16:26
Well, if anyone ever needs this info, I found it addressed nowhere else and spent days trying to find a problem:
If SQL query contains two consecutive dots, or dot followed by space, it will report this same error when running SQL pass through (parameterized) query to MySQL. So, you will have to replace it with something else, and take care of it within MySQL.
answered May 24 at 11:10
2
In My case I had an INSERT INTO TableA (_ ,_ ,_) SELECT _ ,_ ,_ from TableB, a run-time error of 33061 was a field error. As @david mentioned. Either it was a field error: what I wrote in SQL statement as a column name did not match the column names in the actual access tables, for TableA or TableB.
I also have an error like @DATS but it was a run-time error 3464.
answered Jun 10, 2019 at 1:27
Содержание
- Ошибка выполнения запроса ADO
- Почему появляется ошибка SQLException: [Microsoft] [ODBC Excel Driver] Слишком мало параметров. Ожидается 1
- 3 ответы
- Odbc error слишком мало параметров
Ошибка выполнения запроса ADO
Cmd1 = Новый COMОбъект(«ADODB.Command»);
Cmd1.ActiveConnection = БазаAccess;
Cmd1.CommandText = «Select * From Тов_операции WHERE Код_док = КодДокумента ORDER BY Код»;
Rs1 = Cmd1.Execute();
Rs1.MoveFirst();
Выдает следующую ошибку:
Ошибка при вызове метода контекста (Execute): Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [Microsoft][Драйвер ODBC Microsoft Access] Слишком мало параметров. Требуется 1.
Что такое может быть?
(7) Как я передам значение. если оно не известно?
Мне кажется, я нашел. В описании MS Jet SQl есть
strParm = «PARAMETERS [Название должности] CHAR; «
‘ Определяет инструкцию SQL
‘ с предложением параметра.
strSql = strParm & «SELECT Фамилия, Имя, » _
& «FROM Сотрудники » _
т.е. в текст запроса нужно добавить параметр КодДокумента.
Осталось выяснить как! ;))
Cmd1 = Новый COMОбъект(«ADODB.Command»);
Cmd1.ActiveConnection = БазаAccess;
prm = Cmd1.CreateParameter(«DocCode»,20,1,15,КодДокумента);
Cmd1.Parameters.Append(prm);
Cmd1.CommandText = «Select * From Тов_операции WHERE Код_док = DocCode ORDER BY Код»;
Rs1 = Cmd1.Execute(1);
Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [Microsoft][Драйвер ODBC Microsoft Access] Слишком мало параметров. Требуется 1.
Просматривая в отладчике, парметр 1 есть у объекта cmd1, тип — число, но значение стоит «Ошибка чтения значения».
У тебя такой запрос отрабатывает?
Cmd1.CommandText = «Select * From Тов_операции»;
если да то попробуй так.
Cmd1.CommandText = «Select * From Тов_операции WHERE Код_док = «+СокрЛП(КодДокумента)+» ORDER BY Код»;
(19) На первый вопрос — да, отрабатывает.
На второй — нет, то же самое, не хватает параметров.
Пробовал даже
Cmd1.CommandText = «Select * From Тов_операции WHERE Код_док = ‘»+СокрЛП(КодДокумента)+»‘ ORDER BY Код»;
Та же песня.
сам ты головожопый
Cnn = Новый COMОбъект(«ADODB.Command»);
Cnn.Open(«Driver=;Dbq=Путь:кфайлуаксеса.mdb;Uid=логин;Pwd=;»);
RS = Новый COMОбъект(«ADODB.Recordset»);
RS.ActiveConnection = Cnn;
RS.Source = «Select * From Тов_операции WHERE Код_док = ‘КодДокумента’ ORDER BY Код»;
RS.Open();
(25) Проверь что у тебя передается в запрос
должно быть
Select Код, Код_док From Тов_операции WHERE Код_док = 123 ORDER BY Код
а может у тебя КодДокумента пустой:
Select Код, Код_док From Тов_операции WHERE Код_док = ORDER BY Код
или строка:
Select Код, Код_док From Тов_операции WHERE Код_док = ‘123’ ORDER BY Код
(26) Вот такая строка
Cmd1.CommandText = «Select Код, Код_док From Тов_операции WHERE Код_док = 1114119366 ORDER BY Код»;
Отрабатывает все честно. Т.е. когда я прямо прописал числовой код документа.
Так что надо передавать через параметр. А как это сделать, не соображу.
«Select Код, Код_док From Тов_операции WHERE Код_док = «+СокрЛП(КодДокумента)+» ORDER BY Код»;
в первый раз одиночные кавычки были, теперь попробуй.
(29)
Ошибка синтаксиса (пропущен оператор) в выражении запроса ‘Код_док = 1 624 906 727’.
В запрос передается
Select * From Тов_операции WHERE Код_док = 1 624 906 727 ORDER BY Код
Источник
Почему появляется ошибка SQLException: [Microsoft] [ODBC Excel Driver] Слишком мало параметров. Ожидается 1
Я использую следующий код для загрузки ключевых слов и подсчета в файл Excel. у меня есть keyword_id в качестве первичного ключа для этого. У меня есть два столбца в файле Excel. 1. ключевое слово и 2. количество
но я получаю следующую ошибку:
задан 14 июн ’10, 07:06
Murali Krishna Pinjala
3 ответы
count является зарезервированным ключевым словом, поэтому, если у вас есть столбец в SEARCHABLE_KEYWORDS таблица называется count тогда вам нужно поместить имя столбца в двойные кавычки («)
Дважды проверьте имена столбцов в вашем запросе. Стол SEARCHABLE_KEYWORDS имеет столбцы KEYWORD_ID , KEYWORD и COUNT ? Насколько мне известно, это сообщение об ошибке часто возникает из-за опечаток или неправильного написания имен столбцов.
Как упомянул mikej, вы также должны убедиться, что не используете зарезервированные ключевые слова внутри своих операторов, не заключая их в кавычки. Этот совет относится к вашей колонке с названием COUNT .
Вы определяете в своем SQL вставку для двух значений, но выбираете три.
insert into SEARCHABLE_KEYWORDS ( keyword_id,keyword,count ) values (‘»+ «select Searchable_Keywords_sequence.nextval from dual»+ «‘,’»+keyword+ «‘,’»+count+»‘)») `
Не тот ответ, который вы ищете? Просмотрите другие вопросы с метками java excel jdbc or задайте свой вопрос.
Источник
Odbc error слишком мало параметров
Профиль
Группа: Участник
Сообщений: 17
Регистрация: 22.5.2009
Репутация: нет
Всего: нет
Код |
string strConn = «Driver=;Dbq=»+pathtofolder+»;Extensions=csv,txt;»; try < OdbcConnection oconnectiontofile = new OdbcConnection(strConn); OdbcCommand ocommandtofile = new OdbcCommand(«select column5,column6,column16,column8,column9,column10 from » + filename + «»», oconnectiontofile); oconnectiontofile.Open(); OdbcDataReader oreader = ocommandtofile.ExecuteReader(); // На этот моменте проиходит исключение и переход к Catch. |
Код |
Ошибка 07002 Microsoft Драйвер ODBC Текст Слишком мало параметров. Требуется 6. |
diadiavova | ||||||||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) Профиль Репутация: 31 В чём проблема не знаю,полагаю сведений недостаточно. Но есть момент
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.
[ Время генерации скрипта: 0.0915 ] [ Использовано запросов: 21 ] [ GZIP включён ] Источник READ Iphone 3g как будет прошивка |
← →
samborskijj ©
(2013-01-15 11:59)
[0]
Доброго времени суток. Delphi XE3 база данных Access У меня есть запрос
select *
from Prixod
where kod_tovara=:kod_tovara
and data_rasxoda between :data1 and :data2
код в программе
var
код_товара_для_анализа:integer;
Начальная_дата, конечная_дата:TDate;
begin
try
код_товара_для_анализа:=DataModule2.QТовар.FieldValues["kod_tovara"];
except
end;
Начальная_дата:=AdvSmoothDatePicker1.Date;
конечная_дата:=AdvSmoothDatePicker2.Date;
DataModule2.QАнализ_цены_в_приходе.ParamByName("kod_tovara").AsInteger:=код_това ра_для_анализа;
DataModule2.QАнализ_цены_в_приходе.ParamByName("data1").AsDate := Начальная_дата;
DataModule2.QАнализ_цены_в_приходе.ParamByName("data2").AsDate := конечная_дата;
DataModule2.QАнализ_цены_в_приходе.Execute;
При выполнении кода пишет
Слишком мало параметров. Требуется 4.
Подскажите в чем ошибка???
← →
O’ShinW ©
(2013-01-15 12:10)
[1]
сам запрос работает? Как проверили?
← →
samborskijj ©
(2013-01-15 12:12)
[2]
Вот в том то и проблема. Что пишет слишком мало параметров. Я думаю может проблема в преобразовании дат в Access. В самом Accesse не проверял.
← →
samborskijj ©
(2013-01-15 12:13)
[3]
Вроде бы запрос и простой.
← →
sniknik ©
(2013-01-15 12:29)
[4]
проверь в запросе правильность имен полей, например этого — data_rasxoda
← →
sniknik ©
(2013-01-15 12:31)
[5]
> («data1»).AsDate := Начальная_дата;
пиши AsDateTime
← →
Игорь Шевченко ©
(2013-01-15 12:35)
[6]
> try
> код_товара_для_анализа:=DataModule2.QТовар.FieldValues[«kod_tovara»];
>
> except
> end;
кто научил ?
← →
samborskijj ©
(2013-01-15 12:38)
[7]
Имена правильные.
(«data1»).AsDate := Начальная_дата;
пиши AsDateTime
такая же ошибка выскакивает
← →
samborskijj ©
(2013-01-15 12:38)
[8]
Имена правильные.
(«data1»).AsDate := Начальная_дата;
пиши AsDateTime
такая же ошибка выскакивает
← →
samborskijj ©
(2013-01-15 12:40)
[9]
try
код_товара_для_анализа:=DataModule2.QТовар.FieldValues[«kod_tovara»];
except
end;
Никто. просто так удобнее. Если надо то вставлю сообщение. Но если честно то это не относится к моему вопросу.
← →
Anatoly Pogoretsky
(2013-01-15 12:40)
[10]
> samborskijj (15.01.2013 11:59:00) [0]
В запросе данных три
параметра, большего из
этого огрызка получить
нельзя, ну и также
непонятно зачем нужны
лишние переменные.
Сам же запрос скромно
скрыт.
← →
samborskijj ©
(2013-01-15 12:43)
[11]
Понятно что можно обойтись без переменных. Но просто, что бы в режиме отладки отслеживать передаются ли данные в запрос. Я тоже вижу что три параметра. Но выдает именно эту ошибку.
← →
O’ShinW ©
(2013-01-15 12:44)
[12]
> В самом Accesse не проверял.
а надо бы
← →
samborskijj ©
(2013-01-15 12:44)
[13]
Запрос еще раз повторю
select *
from Prixod
where kod_tovara=:kod_tovara
and data_rasxoda between :data1 and :data2
← →
sniknik ©
(2013-01-15 12:48)
[14]
> Никто. просто так удобнее. Если надо то вставлю сообщение. Но если честно то это не относится к моему вопросу.
ошибки прятать нельзя. зачем сообщение? убери «пустышку» сообщение уже есть.
> Имена правильные.
скажи «крекс пекс фекс» и три раза повернись вокруг оси. попробуй еще раз.
+
не показан код вноса запроса, может ты запрос добавляешь к существующему.
← →
sniknik ©
(2013-01-15 12:53)
[15]
> пиши AsDateTime
> такая же ошибка выскакивает
это не относится к той, но твой вариант написания может стать ошибкой… (не знаю как в XE3, может «сгладили», но в D7 есть «нюансы»)
← →
clickmaker ©
(2013-01-15 12:53)
[16]
DataModule2.QАнализ_цены_в_приходе.SQL.Text; // что здесь?
DataModule2.QАнализ_цены_в_приходе.Execute;
← →
samborskijj ©
(2013-01-15 12:55)
[17]
> не показан код вноса запроса, может ты запрос добавляешь
> к существующему.
что значить добавляю к существующему?
← →
Плохиш ©
(2013-01-15 12:55)
[18]
> samborskijj © (15.01.13 11:59)
> Подскажите в чем ошибка???
В нежелании пользоваться отладчиком. Это первая причина. Вторая причина в желании сэкономить на программисте.
← →
sniknik ©
(2013-01-15 12:56)
[19]
> что значить добавляю к существующему?
что непонятно в «не показан код»?
← →
samborskijj ©
(2013-01-15 12:56)
[20]
Запрос у меня прописан в Query. Я ему просто передаю значения.
← →
samborskijj ©
(2013-01-15 12:57)
[21]
>
> В нежелании пользоваться отладчиком. Это первая причина.
> Вторая причина в желании сэкономить на программисте.
если знаете ответ. то можно ответить а не язвить на форуме. отладчиком я пользовался.
← →
sniknik ©
(2013-01-15 12:58)
[22]
> Запрос у меня прописан в Query.
значит остался единственный вариант… может не «докрутил» по своей оси? попробуй крутиться в другую сторону. и обязательно правильно, и вслух, проговаривай слова.
← →
O’ShinW ©
(2013-01-15 12:59)
[23]
> > В самом Accesse не проверял.
>
> а надо бы
>
что-то дает в самом Accesse?
> select *
> from Prixod
> where kod_tovara= 0
> and data_rasxoda between 0 and 0
← →
Плохиш ©
(2013-01-15 13:00)
[24]
Я не лечу по фотографии соседа.
Учитывая многа букафф из [0], озвученной ошибки быть не должно, делаем вывод — нам подсовывают фотографию соседа.
← →
sniknik ©
(2013-01-15 13:01)
[25]
> озвученной ошибки быть не должно
по особенностям access(jet) она может быть ([4])
← →
O’ShinW ©
(2013-01-15 13:02)
[26]
> DataModule2.QАнализ_цены_в_приходе.ParamByName(«kod_tovara»).
> AsInteger:=код_това ра_для_анализа;
кстати, а тут нет пробела в оригинале?
← →
samborskijj ©
(2013-01-15 13:03)
[27]
> > > В самом Accesse не проверял.
> >
> > а надо бы
> >
>
>
> что-то дает в самом Accesse?
> > select *
> > from Prixod
> > where kod_tovara= 0
> > and data_rasxoda between 0 and 0
>
>
ошибка не выскакивает
← →
sniknik ©
(2013-01-15 13:05)
[28]
> ошибка не выскакивает
выскакивает предложение что то ввести… проигнорированное. нет?
← →
Anatoly Pogoretsky
(2013-01-15 13:05)
[29]
> samborskijj (15.01.2013 12:40:09) [9]
except
end;
Конечно удобно никто с
ошибками не тревожит
← →
samborskijj ©
(2013-01-15 13:06)
[30]
> > samborskijj (15.01.2013 12:40:09) [9]
>
> except
> end;
>
> Конечно удобно никто с
> ошибками не тревожит
=) Ну там вроде и ошибок не должно быть. Просто если не туда нажал то она и не выскочит.
Всем большое спасибо. Разобрался.
← →
Anatoly Pogoretsky
(2013-01-15 13:07)
[31]
> samborskijj (15.01.2013 12:43:11) [11]
Ты ничего не можешь видеть,
поскольку запроса нет
← →
O’ShinW ©
(2013-01-15 13:08)
[32]
*синтаксис м/б ошибочен
1. ShowMessage( inttostr( DataModule2.QАнализ_цены_в_приходе.ParamCount ));
2.
for i := 0 to DataModule2.QАнализ_цены_в_приходе.ParamCount — 1 do
ShowMessage(DataModule2.QАнализ_цены_в_приходе.Parameters[i].Name)
ShowMessage(DataModule2.QАнализ_цены_в_приходе.Parameters[i].Value)
← →
O’ShinW ©
(2013-01-15 13:08)
[33]
> Всем большое спасибо. Разобрался.
А сказать?
← →
Anatoly Pogoretsky
(2013-01-15 13:09)
[34]
> samborskijj (15.01.2013 12:44:13) [13]
Зачем ты показываешь
запрос чтения, а не вставки
← →
samborskijj ©
(2013-01-15 13:10)
[35]
>
> > Всем большое спасибо. Разобрался.
>
> А сказать?
=) Банальная ошибка. Не верное имя поля.
← →
sniknik ©
(2013-01-15 13:13)
[36]
> for i := 0 to DataModule2.QАнализ_цены_в_приходе.ParamCount — 1 do
возможный, классический, вариант запроса —
select * from Prixod where kod_tovara=? and data_rasxoda between ? and ?
что будет в ParamCount?
это к тому, что не все, что дельфя определила как параметр будет параметром в движке, и наоборот.
хотя, если он там найдет к примеру 6 параметров, это будет показательный тест.
← →
sniknik ©
(2013-01-15 13:16)
[37]
> =) Банальная ошибка. Не верное имя поля.
?
> Имена правильные.
> такая же ошибка выскакивает
?
наверняка «крекс пекс фекс» помогло.
#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 должен быть заключен в одинарные кавычки, а целые числа — нет.
MurCode
- Форумы
- Поиск
- О проекте
Dmitryi98
Дата: 05.07.2018 18:55:15
Здравствуйте. Только начал изучать VBA и появилась необходимость считывать данные из БД Access по мере прохождения цикла. Пишу вот такой запрос:
SQLr = «Select Latitude, Longitude, BID, preSS, cpwr, TestTime From tableCom Where codeindex >= first And codeindex <= last»
Set tbl = dbs.OpenRecordset(SQLr)
При выполнении кода, выдает ошибку: Слишком мало параметров. Требуется 2 на строке:
Set tbl = dbs.OpenRecordset(SQLr)
Все столбцы числового типа. Прошелестил уже кучу сайтов и как я понял, необходимо явное создание и использование параметров, не привязанных к форме. Если я правильно понимаю, то в моём случае это параметры first и last. Но вот как создать эти параметры я не знаю. Не могу найти нужную статейку, а если и нахожу, не доходит до меня, как это нужно сделать. Помогите пожалуйста.
Прогер_самоучка
Дата: 05.07.2018 18:58:20
Dmitryi98 |
---|
Здравствуйте. Только начал изучать VBA и появилась необходимость считывать данные из БД Access по мере прохождения цикла. Пишу вот такой запрос:
SQLr = «Select Latitude, Longitude, BID, preSS, cpwr, TestTime From tableCom Where codeindex >= first And codeindex <= last» При выполнении кода, выдает ошибку: Слишком мало параметров. Требуется 2 на строке: Set tbl = dbs.OpenRecordset(SQLr) Все столбцы числового типа. Прошелестил уже кучу сайтов и как я понял, необходимо явное создание и использование параметров, не привязанных к форме. Если я правильно понимаю, то в моём случае это параметры first и last. Но вот как создать эти параметры я не знаю. Не могу найти нужную статейку, а если и нахожу, не доходит до меня, как это нужно сделать. Помогите пожалуйста. |
обратитесь в FAQ. Там точно был ответ на этот вопрос.
Прогер_самоучка
Дата: 05.07.2018 19:10:59
sdku
Дата: 05.07.2018 19:32:21
а что такое «first» и «last» (это какие-то даты,вводимые пользователем, обозначающие начало и конец некого периода или другое-опишите что это)
MrShin
Дата: 05.07.2018 20:18:25
sdku |
---|
а что такое «first» и «last» |
вот их-то заппрос и спрашивает.
Добейтесь сначала, чтобы запрос работал в конструкторе, а потом переносите в код.
Если это параметры, то посмотрите как вызываются запросы с параметрами
Dmitryi98
Дата: 06.07.2018 06:07:40
sdku, нет, это обычные числа. Получается я пишу цикл, который будет обрабатывать данные из БД. Вначале я просто считываю количество строк в этой БД (т.к. их там бывает 40+ тысяч) и считаю сколько листов мне нужно создать (чтобы на каждом листе было по 8 тысяч строк). Вот как раз потом я запускаю цикл от 1 до количества листов, там уже на каждой итерации создаю новый лист и заношу туда данные. А first и last это 2 переменные числового типа, которые нужны для того, чтобы на каждой итерации выбирать определённое количество строк из БД (в моём случае first =1, а last = 8000) и в конце каждой итерации я наращиваю эти переменные. Но у меня вылетает как раз ошибка о параметрах.
Serg197311
Дата: 06.07.2018 06:55:15
Запрос точно ругается на эти две переменные(????? )
если это переменные — к ним надо обращаться так
«SELECT все что там надо codeindex >= » & first & » And codeindex <=» & last & «;»
если бы это были стринги — то
«SELECT все что там надо codeindex >= ‘» & first & «‘ And codeindex <='» & last & «‘;»
Если это «просто числа» — то они и должны быть просто числами 1234 или 986743…….
Serg197311
Дата: 06.07.2018 07:06:32
Если вам надо выбрать строки , где значение столбца больше минимального и меньше максимального(те просто ВСЕ строки!) , после tableCom ставим ; » а все остальное выкидываем.
Dmitryi98
Дата: 06.07.2018 07:17:32
Serg197311 |
---|
Запрос точно ругается на эти две переменные(????? ) если это переменные — к ним надо обращаться так «SELECT все что там надо codeindex >= » & first & » And codeindex <=» & last & «;» если бы это были стринги — то «SELECT все что там надо codeindex >= ‘» & first & «‘ And codeindex <='» & last & «‘;» Если это «просто числа» — то они и должны быть просто числами 1234 или 986743……. |
СПАСИБО Вам огромное, Вы спасли меня от нервного срыва, а то почти вся работа была уже проделана, а из-за этого «незнания» синтаксиса VBA я не мог все закончить!
«SELECT все что там надо codeindex >= » & first & » And codeindex <=» & last & «;» — Эта строка подошла, только с небольшими изменениями
Необходимо было сделать вот так: «Select все что там надо codeindex >= » & first1 & » and codeindex <= » & last1&
sdku
Дата: 06.07.2018 13:48:32
Dmitryi98 |
---|
… (чтобы на каждом листе было по 8 тысяч строк)…. |
Это что за плоттер такой
А какая разница сколько листов (или сколько раз будет выполнен цикл в процедуре которая производит обработку данных) будет в отчете,в зависимости от наполнения таблицы-ведь конечная цель это печать(свойство .Pages-или я что-то не так понял?)