Ошибка слишком мало параметров access

Supernatural

618 / 216 / 51

Регистрация: 22.11.2010

Сообщений: 1,778

Записей в блоге: 3

1

29.11.2015, 16:20. Показов 5515. Ответов 5

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Всем привет.
Глупый вопрос, но меня тормозит

Visual Basic
1
2
StrSQL = "Select ДниНедели.Код from ДниНедели Where ДниНедели.ДеньНедели= " & form_day
Set myday = mydb.OpenRecordset(StrSQL)

Делаю запрос к таблице, но вылетает «Слишком мало параметров. Требуется 1»



0



Эксперт MS Access

26784 / 14463 / 3192

Регистрация: 28.04.2012

Сообщений: 15,782

29.11.2015, 16:51

2

Цитата
Сообщение от Supernatural
Посмотреть сообщение

«Слишком мало параметров. Требуется 1»

Возможные причины ошибки:
— ДниНедели это запрос в котором есть ссылка на форму. В конструкторе отработает, в ВБА нет. Хотя варианты есть, но не напрямую, например через QueryDefs с установкой параметра. Или заданием строки SQL прямо в коде ВБА, где вместо ссылки на контрол формы подставить его значение
— Неверные имена. Проверить, возможно спутаны имя поля и его алиас. Или одна из букв написана в другой раскладке, типа русская «с» и английская «c».



0



618 / 216 / 51

Регистрация: 22.11.2010

Сообщений: 1,778

Записей в блоге: 3

29.11.2015, 17:14

 [ТС]

3

mobile, Таблица ДниНедели самостоятельная, и на запросе не строится. В ней наоборот определены 7 дней недели и проиндексированы, и от нее строится поле для расписания.



0



Эксперт MS Access

17250 / 7091 / 1595

Регистрация: 21.06.2012

Сообщений: 13,335

29.11.2015, 17:59

4

Цитата
Сообщение от Supernatural
Посмотреть сообщение

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 это понедельник по пятницу. В общем вывел следующую ситуацию, если напрямую составить запрос

Visual Basic
1
select код_дня from table where table.название_дня=formday

то запрос отработает без каких-либо замечаний, но стоит мне его как-то попытаться собрать из кусков типа

Visual Basic
1
StrSQL = "Select [ДниНедели].[Код] from ДниНедели Where [ДниНедели].[ДеньНедели]= " & form_day & ""

то тут уже начинаются разногласия. В сообщении msgbox все выводится верно, но вот запрос отказывается работать. Хотел приклеить концовку так

Visual Basic
1
...Where [ДниНедели].[ДеньНедели]= " & form_day & """

но тут возник коллапс, VBA сам вставляет 4ую кавычку.



0



шапоклякистка 8-го дня

3675 / 2235 / 391

Регистрация: 26.06.2015

Сообщений: 4,647

Записей в блоге: 1

29.11.2015, 18:21

6

Лучший ответ Сообщение было отмечено Supernatural как решение

Решение

Цитата
Сообщение от Supernatural
Посмотреть сообщение

но стоит мне его как-то попытаться собрать из кусков типа
Visual BasicВыделить код
1
StrSQL = «Select [ДниНедели].[Код] from ДниНедели Where [ДниНедели].[ДеньНедели]= » & form_day & «»

Потому что строковые величины нужно брать в кавычки

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's user avatar

gideon

19.3k11 gold badges72 silver badges113 bronze badges

asked Mar 26, 2011 at 20:23

uk52rob's user avatar

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

david's user avatar

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

Caleb McNevin's user avatar

answered Jul 5, 2013 at 18:08

DATS's user avatar

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 Doe's user avatar

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

Brad's user avatar

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

Pramine's user avatar

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 C's user avatar

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

AMissico's user avatar

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

Alan M Robertson's user avatar

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:

  1. Open «Linked Table Manager» («External Data» tab on ribbon);
  2. Select a checkbox near the table you want to refresh;
  3. Press «OK» button.

answered Mar 4, 2017 at 15:20

tm-'s user avatar

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

Amy's user avatar

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

rob's user avatar

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

Jim22's user avatar

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

wulfithewulf's user avatar

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.

Brian Tompsett - 汤莱恩's user avatar

answered Sep 6, 2019 at 16:26

Çağlar Durgun's user avatar

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

jaggy's user avatar

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

Aaron C's user avatar

Содержание

  1. Ошибка выполнения запроса ADO
  2. Почему появляется ошибка SQLException: [Microsoft] [ODBC Excel Driver] Слишком мало параметров. Ожидается 1
  3. 3 ответы
  4. 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

Доктор Зло(диагност, настоящий, с лицензией и полномочиями)

Профиль
Группа: Модератор
Сообщений: 5819
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 141

В чём проблема не знаю,полагаю сведений недостаточно. Но есть момент

Цитата(GreyKarapetyan @ 11.7.2009, 21:54 )
«select column5,column6,column16,column8,column9,column10 from » + filename + «»»

Прежде чем создать тему, посмотрите сюда:
  • Что же такое .NET? Краткое описание,изучаем.
  • Какой язык программирования выбрать? выбираем.
  • C#. С чего начать? начинаем.
  • Защита исходного кода .NET приложений, защищаем.
  • Литература по .NET, обращаемся.
  • FAQ раздела,ищем здесь.
  • Архиполезные ссылки:www.connectionstrings.com, www.pinvoke.net, www.codeproject.com

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс «транслит» если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим 🙂
Так же не забывайте отмечать свой вопрос решенным, если он таковым является 🙂

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »

[ Время генерации скрипта: 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 должен быть заключен в одинарные кавычки, а целые числа — нет.

Logo
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»
Set tbl = dbs.OpenRecordset(SQLr)

При выполнении кода, выдает ошибку: Слишком мало параметров. Требуется 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-или я что-то не так понял?)

  • Ошибка слишком длинный путь что делать
  • Ошибка скания aps 679
  • Ошибка слишком длинное имя файла как исправить windows 7
  • Ошибка скания aps 663
  • Ошибка слишком богатая смесь слишком бедная смесь