Меню

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

Marit

0 / 0 / 0

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

Сообщений: 24

1

30.08.2011, 15:20. Показов 12429. Ответов 21

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


Здравствуйте, помогите, пожалуйста, исправить ошибку.
Я хочу выбрать из таблицы строчки, в которых дата соответствует диапазону от d1 до d2.
Пишу:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Dim rs As Recordset
Dim txt As String
Dim db As Database
Dim d1, d2 As Date
 
 Set db = CurrentDb
 
 d1 = Format(Me.d1, "dd/mm/yyyy")
 d2 = Format(Me.d2, "dd/mm/yyyy")
 
 txt = "SELECT * FROM " & "VnIzm" & " WHERE ( VnIzm.data  Between  d1  and  d2  ) ORDER BY " & "Konstruktor" & ";"
 Set rs = db.OpenRecordset(txt)
End Sub

После запуска программа выдает ошибку Run-time error ‘3061’ Слишком мало параметров. Требуется 2.
Подскажите, пожалуйста как поправить.
Спасибо.

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



1904 / 781 / 31

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

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

30.08.2011, 16:03

2

у тебя переменные не видны из VBA надо так … & d1 & » and » & d2 & …



1



alvk

Эксперт MS Access

7262 / 4465 / 287

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

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

30.08.2011, 16:47

3

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

Dim d1, d2 As Date

это неправильно, нужно так:

Visual Basic
1
2
Dim d1 As Date
Dim d2 As Date

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

VnIzm

это переменная? а где её описание?



1



ironegg

1904 / 781 / 31

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

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

30.08.2011, 17:13

4

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

это неправильно

почему? просто, первая переменная получается типа Variant. а после выполнения строки

Visual Basic
1
d1 = Format(Me.d1, "dd/mm/yyyy")

она становиться типа Variant-String.
кстати да, если в таблице поле типа Data то надо бы заключить переменные в решетки … #» & d1 & «# and #» & d2 & «# …
потому как в движок обработки запросов передается строка

VnIzm, я так понимаю, это таблица



1



Marit

0 / 0 / 0

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

Сообщений: 24

30.08.2011, 17:49

 [ТС]

5

Спасибо, что пришли на помощь .
VnIzm это действительно таблица.
Я заключила переменные в решетки. Теперь запрос выглядит так:

Visual Basic
1
 txt = "SELECT * FROM " & "VnIzm" & " WHERE ( VnIzm.data  Between  #" & d1 & "#  and  #" & d2 & "#  ) ORDER BY " & "Konstruktor" & ";"

Но программа продолжает ругаться. Говорит, что Дата содержит синтаксическую ошибку в выражении запроса ‘(VnIzm.data Between #16.08.2011# and #20.08.2011#’ .



0



alvk

Эксперт MS Access

7262 / 4465 / 287

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

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

30.08.2011, 17:55

6

SQL
1
2
SELECT * FROM VnIzm WHERE VnIzm.data BETWEEN " & d1 & " AND " & d2 & " 
 ORDER BY " & "Konstruktor" & ";"

А так? и расскажите про Konstruktor



1



Marit

0 / 0 / 0

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

Сообщений: 24

31.08.2011, 09:42

 [ТС]

7

Konstruktor это поле таблицы VnIzm, в котором хранятся фамилии.
alvk, Если записать как вы говорите:

Visual Basic
1
 txt = "SELECT * FROM " & "VnIzm" & " WHERE  VnIzm.data  Between  " & d1 & "  and  " & d2 & "   ORDER BY " & "Konstruktor" & ";"

То все равно появляется ошибка:
Число содержит синтаксическую ошибку в выражении запроса ‘VnIzm.data Between 16.08.2011 and 20.08.2011’



0



alvk

Эксперт MS Access

7262 / 4465 / 287

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

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

31.08.2011, 09:51

8

я так не говорил и не писал, это неправда!

попробуйте ещё так:

Visual Basic
1
2
3
4
txt = "SELECT * FROM VnIzm WHERE VnIzm.DATA " _
& " BETWEEN #" & Format(d1, "mm/dd/yy hh:mm:ss") & "# " _
& " AND #" & Format(d2, "mm/dd/yy hh:mm:ss") & "# " _
& " ORDER BY Konstruktor"



1



0 / 0 / 0

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

Сообщений: 24

31.08.2011, 10:03

 [ТС]

9

alvk, извините, я, наверно, вас непрпвильно поняла.
Ваш последний вариант подходит, все прекрасно работает.
Спасибо.



0



Anna Morty

0 / 0 / 0

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

Сообщений: 6

04.07.2016, 20:10

10

Здравствуйте. Помогите, пожалуйста, найти косяк. Ругается на строчку-мало параметров.

Visual Basic
1
Set rrst = CurrentDb.OpenRecordset("Select * From [Комплекты 12] Where [Комплекты 12].[Индекс]=" & rst![Индекс] & " And [Комплекты 12].[Обозначение]=" & rst![Обозначение])



0



shanemac51

Модератор

Эксперт MS Access

11261 / 4592 / 739

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

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

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

04.07.2016, 20:16

11

подозреваю, что обозначение символьное(а может и индекс) и не забывайте про контрольную распечатку

Visual Basic
1
2
3
4
5
6
7
dim s1
s1="Select * From [Комплекты 12] "
s1=s1 & " Where [Комплекты 12].[Индекс]=" & rst![Индекс] 
s1=s1 & "  And [Комплекты 12].[Обозначение]='" & rst![Обозначение] & "'"
debug.print s1
 
Set rrst = CurrentDb.OpenRecordset(s1)



1



Anna Morty

0 / 0 / 0

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

Сообщений: 6

04.07.2016, 20:23

12

Да. Только в другом случае это нисколько не помешало:

Visual Basic
1
Set rst = CurrentDb.OpenRecordset("Select * From [Состав папки З] Where [Состав папки З].[Папка З]=" & nameFolder)

Добавлено через 1 минуту
Не помогает. Так же ругается.



0



Модератор

Эксперт MS Access

11261 / 4592 / 739

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

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

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

04.07.2016, 20:25

13

может nameFolder у вас подстановка

Не помогает. Так же ругается.

выкладывайте базу



0



Эксперт MS Access

26771 / 14450 / 3192

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

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

04.07.2016, 20:30

14

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

Не помогает. Так же ругается.

Предположу, что [Комплекты 12] не таблица, а запрос с параметрами. Где есть ссылки на формы или явные параметры. Тогда вполне объяснимо появление ошибки — DAO ничего не знает об интерфейсных объектах Access и воспринимает ссылки на формы как неизвестные параметры



0



Anna Morty

0 / 0 / 0

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

Сообщений: 6

04.07.2016, 20:53

15

PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
Private Sub Êíîïêà5_Click()
 
 
Dim path, nameFile
 
path = "Ñ:Ýëåêòðîííûé âèä"
nameFolder = Me.Ïàïêà_Ç
If Dir(path & "" & nameFolder) = "" Then
 Dim SubToCall As String
 Set fso = CreateObject("Scripting.FileSystemObject")
      fso.CreateFolder "C:Ýëåêòðîííûé âèä" & nameFolder
 MsgBox "Ïàïêà" & " " & nameFolder & " " & "ñîçäàíà", vbInformation
 
End If
Dim npath, nnameFile
npath = "C:Ýëåêòðîííûé âèä" & nameFolder
nnameFolder = "Russian"
If Dir(path & "" & nnameFolder) = "" Then
 Set fso = CreateObject("Scripting.FileSystemObject")
      fso.CreateFolder "C:Ýëåêòðîííûé âèä" & nameFolder & "Russian"
 MsgBox "Ïàïêà Russian ñîçäàíà", vbInformation
 
End If
 
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("Select * From [Ñîñòàâ ïàïêè Ç] Where [Ñîñòàâ ïàïêè Ç].[Ïàïêà Ç]=" & nameFolder)
       Do While Not rst.EOF
       
       cnameFolder = rst![Èíäåêñ] & " " & rst![Îáîçíà÷åíèå]
       Set fso = CreateObject("Scripting.FileSystemObject")
       fso.CreateFolder "C:Ýëåêòðîííûé âèä" & nameFolder & "Russian" & cnameFolder
       'rst.MoveNext
       
                     
                     Dim rrst As DAO.Recordset
                      'Set rrst = CurrentDb.OpenRecordset("Select * From [Êîìïëåêòû_12] Where [Êîìïëåêòû_12].[Âûðàæåíèå1] =" & cnameFolder)
                      Set rrst = CurrentDb.OpenRecordset("Select * From [Êîìïëåêòû 12] Where [Êîìïëåêòû 12].[Èíäåêñ]=" & rst![Èíäåêñ] & " And [Êîìïëåêòû 12].[Îáîçíà÷åíèå]= '" & rst![Îáîçíà÷åíèå] & "'")
        
                      Do While Not rrst.EOF
                      
                      rnameFolder = rrst![Èíäåêñ_Ê] & " " & rrst![Îáîçíà÷åíèå_Ê]
                      Set fso = CreateObject("Scripting.FileSystemObject")
                      fso.CopyFolder "C:ÆäàíÀðõèâ ÷åðòåæåéÐóññêèé ÿçûê" & rnameFolder, "C:Ýëåêòðîííûé âèä" & nameFolder & "Russian" & cnameFolder & ""
                      rrst.MoveNext
                      Loop
                      rrst.Close
                      Set rrst = Nothing
        rst.MoveNext
        Loop
        rst.Close
        Set rrst = Nothing

Дальше не дописано-спотыкается на строчке.

Добавлено через 1 минуту
Комплекты 12-таблица. Есть еще запрос Комплекты_12. Но с ним та же самая история.

 Комментарий модератора 
копируйте код при русской раскладке клавиатуры

Добавлено через 11 минут

PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
Private Sub Кнопка5_Click()
 
 
Dim path, nameFile
 
path = "С:Электронный вид"
nameFolder = Me.Папка_З
If Dir(path & "" & nameFolder) = "" Then
 Dim SubToCall As String
 Set fso = CreateObject("Scripting.FileSystemObject")
      fso.CreateFolder "C:Электронный вид" & nameFolder
 MsgBox "Папка" & " " & nameFolder & " " & "создана", vbInformation
 
End If
Dim npath, nnameFile
npath = "C:Электронный вид" & nameFolder
nnameFolder = "Russian"
If Dir(path & "" & nnameFolder) = "" Then
 Set fso = CreateObject("Scripting.FileSystemObject")
      fso.CreateFolder "C:Электронный вид" & nameFolder & "Russian"
 MsgBox "Папка Russian создана", vbInformation
 
End If
 
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("Select * From [Состав папки З] Where [Состав папки З].[Папка З]=" & nameFolder)
       Do While Not rst.EOF
       
       cnameFolder = rst![Индекс] & " " & rst![Обозначение]
       Set fso = CreateObject("Scripting.FileSystemObject")
       fso.CreateFolder "C:Электронный вид" & nameFolder & "Russian" & cnameFolder
       'rst.MoveNext
       
                     
                     Dim rrst As DAO.Recordset
                      'Set rrst = CurrentDb.OpenRecordset("Select * From [Комплекты_12] Where [Комплекты_12].[Выражение1] =" & cnameFolder)
                      Set rrst = CurrentDb.OpenRecordset("Select * From [Комплекты 12] Where [Комплекты 12].[Индекс]=" & rst![Индекс] & " And [Комплекты 12].[Обозначение]= '" & rst![Обозначение] & "'")
        
                      Do While Not rrst.EOF
                      
                      rnameFolder = rrst![Индекс_К] & " " & rrst![Обозначение_К]
                      Set fso = CreateObject("Scripting.FileSystemObject")
                      fso.CopyFolder "C:ЖданАрхив чертежейРусский язык" & rnameFolder, "C:Электронный вид" & nameFolder & "Russian" & cnameFolder & ""
                      rrst.MoveNext
                      Loop
                      rrst.Close
                      Set rrst = Nothing
        rst.MoveNext
        Loop
        rst.Close
        Set rrst = Nothing

Добавлено через 8 минут
Когда запускаю со строчкой

PureBasic
1
Set rrst = CurrentDb.OpenRecordset("Select * From [Комплекты_12] Where [Комплекты_12].[Выражение1] =" & cnameFolder)

жалуется на ошибку синтаксиса. Но запрос из запроса не из таблицы.



0



Бормалей

104 / 55 / 7

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

Сообщений: 314

05.07.2016, 02:05

16

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

Когда запускаю со строчкой
PureBasicВыделить код
1
Set rrst = CurrentDb.OpenRecordset(«Select * From [Комплекты_12] Where [Комплекты_12].[Выражение1] =» & cnameFolder)
жалуется на ошибку синтаксиса. Но запрос из запроса не из таблицы.

Наверное так

SQL
1
SET rrst = CurrentDb.OpenRecordset("Select * From [Комплекты_12] Where [Комплекты_12].[Выражение1] = '" & cnameFolder & "';")



0



0 / 0 / 0

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

Сообщений: 6

05.07.2016, 07:05

17

Все равно ругается.



0



104 / 55 / 7

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

Сообщений: 314

05.07.2016, 09:06

18

может nameFolder у вас подстановка

выкладывайте базу

Тогда выкладывайте базу. Как вам и говорили до этого



0



0 / 0 / 0

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

Сообщений: 6

05.07.2016, 09:47

19

Вот она



0



shanemac51

Модератор

Эксперт MS Access

11261 / 4592 / 739

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

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

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

05.07.2016, 12:27

20

замечания после почти часа разбирательства
—нет таблицы вид обработки
—прошла по многим кнопкам, в конце концов застряла
1-ералаш с именами каталогов
2-нет кавычек для индекса и обозначения

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Dim s
s = ""
s = s & "Select [Состав папки З].[Индекс],"
s = s & " [Состав папки З].[Обозначение],"
s = s & " [Комплекты 12].[Индекс_К],"
s = s & " [Комплекты 12].[Обозначение_К]"
s = s & " From [Состав папки З]"
s = s & " Inner Join [Комплекты 12]"
s = s & " On ([Состав папки З].[Обозначение] = [Комплекты 12].[Обозначение])"
s = s & "   And ([Состав папки З].[Индекс] = [Комплекты 12].[Индекс])"
s = s & " Where [Состав папки З].[Индекс]='" & rst![Индекс] & "'"
s = s & "   And [Состав папки З].[Обозначение]='" & rst![Обозначение] & "'"
Debug.Print s
Set rrst = CurrentDb.OpenRecordset(s)



1



Содержание

  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

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

GreyKarapetyan
Дата 11.7.2009, 21:54 (ссылка) | (нет голосов) Загрузка .
Код
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
Дата 12.7.2009, 04:03 (ссылка) | (нет голосов) Загрузка .

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

Профиль
Группа: Модератор
Сообщений: 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]

> =) Банальная ошибка. Не верное имя поля.
?
> Имена правильные.
> такая же ошибка выскакивает
?

наверняка «крекс пекс фекс» помогло.


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.2k11 gold badges73 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

6315 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

9267 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

Coops's user avatar

CoopsCoops

4,6575 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 badges76 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-

3231 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

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

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

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.2k11 gold badges73 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

6315 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

9267 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

Coops's user avatar

CoopsCoops

4,6575 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 badges76 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-

3231 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

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

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

Вопрос:

В настоящее время я работаю над проектом, который использует Tweets и проводит быстрый анализ настроений и загружает идентификатор твита, дату твита, текст твита и полярность твитов в таблицу доступа MS (Office 2013). Я преобразовал выходы в строки, за исключением полярности настроения, чтобы соответствовать типам данных таблицы (Test). Вот мой код:

from pattern.web import Twitter
import time
import pyodbc
from textblob import TextBlob

cnxn = pyodbc.connect(r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:...SentimentAnalysis.accdb;')
cursor = cnxn.cursor()

s = Twitter().stream('#testhash')
for i in range(25):
time.sleep(1)
s.update(bytes=1024)
if s:
Ident = str(s[-1].id)
TweetDate = str(s[-1].date)
TweetText = str(s[-1].text.encode('utf8'))
x = s[-1].text
blob = TextBlob(x)
sent = blob.sentiment.polarity
cursor.execute('insert into Test([Ident],[TweetDate],[TweetText],[TweetSentiment]) values (Ident,TweetDate,TweetText,sent);')
cnxn.commit()
print 'Inserted: ', Ident
else: ''
s.clear()

Проблема в том, что я получаю следующую ошибку:

pyodbc.Error: (‘07002’, ‘[07002] [Microsoft] [ODBC Microsoft Access Driver] Слишком мало параметров. Ожидаемое 4. (-3010) (SQLExecDirectW)’)

Я видел другие сообщения об этой ошибке, но большинство из них только что были из-за проблем с двойными кавычками в Access. Поскольку я использовал только одинарные кавычки и все еще получаю эту проблему, я в тупике. Это сводит меня с ума! Любая помощь будет принята с благодарностью!

Лучший ответ:

Ваш SQL-оператор включает идентификаторы Ident, TweetDate и т.д., Как литерал, а механизм Database Datatabase Engine рассматривает их как заполнители параметров. Что вам нужно сделать, так это создать фактические заполнители параметров в тексте команды, а затем передать значения параметров. Например:

sql = """
INSERT INTO [Test] ([Ident], [TweetDate], [TweetText], [TweetSentiment]) 
VALUES (?,?,?,?)
"""
params = (Ident, TweetDate, TweetText, sent)
cursor.execute(sql, params)
cnxn.commit()

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

А вот еще интересные материалы:

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