Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
369 / 78 / 6
Регистрация: 23.05.2012
Сообщений: 232

Запрос на обновление таблицы через CurrentDb.Execute - слишком мало параметров

12.06.2022, 15:35. Показов 576. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Камрады добрый день!
подскажите как правильно сформулировать запрос на обновление записей через CurrentDb.Execute
Нифига не вдупляю.
Нагуглил только по форуму и в инете, что что то не так, а не доходит как исправить.
Везде вроде бы проблемы связаны с полями из формы, а у меня вылетает на таблице, с полем из формы я разобрался и проверил - просто запрос на обновление поля [Дата По] датой с формы без условий на отбор отрабатывает.
Проблемный запрос:
Visual Basic
1
2
3
        ' проапдейтим дубли в основной таблице - закроем их датой Me.DataOpen - 1 чтобы потом добавить новые записи
        strSQL = "UPDATE Аллергены SET [Дата По] = '" & Me.DataOpen - 1 & "' where Аллергены.[Код аллергена] = ВременнаяДляИмпорта.[Код аллергена] and ВременнаяДляИмпорта.[Не импортировать] = false and '" & Me.DataOpen - 1 & "' between Аллергены.[Дата С] and Аллергены.[Дата По] "
        CurrentDb.Execute strSQL
Вот где то в условии where что то не так.
Пробовал всяко, и через where exists (select...) тоже, не проходит никак.
По задумке суть апдейта в следующем: если в таблице существуют записи которые пытаемся повторно импортировать, то существующие записи надо "закрыть" изменив в них дату действия записи [Дата По]
База прилагается, ошибка появляется при попытке импортировать данные из Excel-файла при снятом с одной или нескольких записей флажке "Не импортировать".
Подскажите где туплю
Вложения
Тип файла: zip test.zip (62.4 Кб, 5 просмотров)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.06.2022, 15:35
Ответы с готовыми решениями:

Запрос на обновление сопровождается ошибкой "Слишком мало параметров. Требуется 1"
Ну вот что ему еще надо: CurrentDb.Execute "UPDATE tbl_Inbox SET = " & Forms!!.Form!.Value & " Where = Me..Value;", а? Добрый вечер!...

Запрос на добавление и "слишком мало параметров"
Что я упускаю? Нужно взять из формы значения полей и добавить их в другую таблицу Dim s s = "Insert into (Код, Название,...

Слишком мало параметров
Пытаюсь выгрузить запрос в шаблон Excell Dim app As Object Dim wrk As Object Dim rst As DaO.Recordset Set app =...

12
598 / 404 / 51
Регистрация: 06.03.2022
Сообщений: 2,129
12.06.2022, 17:43
А Вы в курсе работы с датами в VBA? Дату надо указывать в "буржуинском" формате типа:"... [таблицаИсточникФормы].[myDate]=#" & Format(me.датаС,"mm\/dd\/yyyy") & "#"
(1.2.2020 в процедуре VBA должно выглядеть так:#2/1/2020# или так #2020-2-1#)

Добавлено через 25 минут
PS.:"...датаПО=#" & Format(me.DataОпеn,"mm\/dd\/yyyy") & "# ...."
0
369 / 78 / 6
Регистрация: 23.05.2012
Сообщений: 232
12.06.2022, 20:15  [ТС]
Цитата Сообщение от SDKU Посмотреть сообщение
А Вы в курсе работы с датами в VBA? Дату надо указывать в "буржуинском" формате типа:"... [таблицаИсточникФормы].[myDate]=#" & Format(me.датаС,"mm\/dd\/yyyy") & "#"
(1.2.2020 в процедуре VBA должно выглядеть так:#2/1/2020# или так #2020-2-1#)
В курсе, но тут дело видимо не в этом. Пробовал, не помогает.
Да и хавает он в селектах и в инсертах дату в обычном режиме, неужели апдейт отличается?
К тому же если сделать вот такой апдейт:
Visual Basic
1
2
        strSQL = "UPDATE Аллергены SET [Дата По] = '" & Me.DataOpen - 1 & "'"
        CurrentDb.Execute strSQL
То все отработает, по всем записям, без условия на них.
При этом если дату взять 01.06.2022 то в поле [Дата По] будет 31.05.2022, как и полагается.
Если все же дело в датах, можете написать целиком строку запроса на обновление, чтобы заработало?
0
598 / 404 / 51
Регистрация: 06.03.2022
Сообщений: 2,129
12.06.2022, 20:55
а поля [lдатаПо] и me.датаОпеn какого типа: дата\время или текст? Дата обрамляется # а не '
0
369 / 78 / 6
Регистрация: 23.05.2012
Сообщений: 232
12.06.2022, 21:37  [ТС]
Цитата Сообщение от SDKU Посмотреть сообщение
а поля [lдатаПо] и me.датаОпеn какого типа: дата\время или текст?
В таблице Дата/время, в форме "краткий формат даты".
Там в первом сообщении файлик приложен с рабочим примером
Точнее не рабочим
0
Эксперт MS Access
 Аватар для ltv_1953
17536 / 7288 / 1663
Регистрация: 21.06.2012
Сообщений: 13,957
12.06.2022, 22:01
Дата хранится в Аксессе как "Двойное с плавающей точкой", целая часть - дата, дробная - время. Запрос работает, т.к. воспринимает дату (в форме) как целое число и вычитает из нее 1. Но делать так не стоит, хотя использование вычитания некоторого количества дней вместо соответствующего DateDiff делают часто. НО лучше к этому не привыкать, в других SQL даты храняться по другому.
1
598 / 404 / 51
Регистрация: 06.03.2022
Сообщений: 2,129
12.06.2022, 22:18
Цитата Сообщение от skol13 Посмотреть сообщение
В таблице Дата/время, в форме "краткий формат даты".
А как же это
Цитата Сообщение от SDKU Посмотреть сообщение
Дата обрамляется # а не '
1
369 / 78 / 6
Регистрация: 23.05.2012
Сообщений: 232
12.06.2022, 23:59  [ТС]
Елы палы...
У меня не работает апдейт, и не работает не из-за формата даты.
Потому что пробовал я по всякому, и с форматами игрался в том числе.
Кто то может сказать по существу - в чем проблема?
Если вы упорствуете в том, что проблема в формате даты - ок, пусть так, тогда напишите, пожалуйста, рабочий запрос на апдейт.
Условия на апдейт в первом сообщении, там же лежит база данных с нужными таблицами и образцом данных для загрузки.
И неработающим апдейтом.

Добавлено через 24 минуты
вот такая конструкция отрабатывает:
Visual Basic
1
2
3
        strSQL = "UPDATE Аллергены SET [Дата По] = '" & Me.DataOpen - 1 & "' where " & _
                         Format$(Me.DataOpen, "\#mm\/dd\/yyyy\#") & " Between Аллергены.[Дата С] And Аллергены.[Дата По]"
        CurrentDb.Execute strSQL
т.е. дело точно не в формате даты.
пусть это коряво и не в стандарте, но мне надо, чтобы хотя бы заработало так как задумывалось, для начала...
проблема где то в проверке на наличие записи во временной таблице для загрузки.
0
Модератор
Эксперт MS Access
6231 / 2909 / 707
Регистрация: 12.06.2016
Сообщений: 7,839
13.06.2022, 00:11
Цитата Сообщение от skol13 Посмотреть сообщение
Елы палы...
)))

Попробуйте так:
Visual Basic
1
2
3
4
5
6
strSQL = "UPDATE Аллергены INNER JOIN ВременнаяДляИмпорта " & _
         "ON Аллергены.[Код аллергена] = ВременнаяДляИмпорта.[Код аллергена] " & _
         "SET [Дата По] = '" & Me.DataOpen - 1 & "' " & _
         "where NOT ВременнаяДляИмпорта.[Не импортировать] and '" & Me.DataOpen - 1 & "' " & _
         "between Аллергены.[Дата С] and Аллергены.[Дата По]"
CurrentDb.Execute strSQL
БД не смотрела.
1
369 / 78 / 6
Регистрация: 23.05.2012
Сообщений: 232
13.06.2022, 00:21  [ТС]
Все, разобрался.
Перестановка мест слагаемых и сборка по кусочкам помогли понять, где был косяк.
Вот так работает:
Visual Basic
1
2
3
4
        strSQL = "UPDATE Аллергены SET [Дата По] = '" & Me.DataOpen - 1 & "' where " & _
                         Format$(Me.DataOpen, "\#mm\/dd\/yyyy\#") & " Between Аллергены.[Дата С] And Аллергены.[Дата По]" & _
                         " and exists (select 1 from ВременнаяДляИмпорта where [Не импортировать] = false and Аллергены.[Код аллергена] = ВременнаяДляИмпорта.[Код аллергена])"
        CurrentDb.Execute strSQL
Можно закрывать, спасибо всем за участие.
0
Модератор
Эксперт MS Access
6231 / 2909 / 707
Регистрация: 12.06.2016
Сообщений: 7,839
13.06.2022, 00:25
Цитата Сообщение от skol13 Посмотреть сообщение
Все, разобрался.
Но всё же, попробуйте с INNER JOIN.

Побыстрее будет, чем с exists.
1
369 / 78 / 6
Регистрация: 23.05.2012
Сообщений: 232
13.06.2022, 00:50  [ТС]
Цитата Сообщение от Capi Посмотреть сообщение
Но всё же, попробуйте с INNER JOIN.
Может, побыстрее будет, чем с exists ?
Спасибо, попробую.

Добавлено через 18 минут
Отработало, но тут пришлось таки приводить все даты к формату #mm/dd/yyyy#
Иначе не принимал. Писал ошибку несоответствия типов параметров
Visual Basic
1
2
3
4
5
6
strSQL = "UPDATE Аллергены INNER JOIN ВременнаяДляИмпорта " & _
         "ON Аллергены.[Код аллергена] = ВременнаяДляИмпорта.[Код аллергена] " & _
         "SET [Дата По] = " & Format$(Me.DataOpen - 1, "\#mm\/dd\/yyyy\#") & _
         "where NOT ВременнаяДляИмпорта.[Не импортировать] and " & Format$(Me.DataOpen, "\#mm\/dd\/yyyy\#") & " " & _
         "between Аллергены.[Дата С] and Аллергены.[Дата По]"
CurrentDb.Execute strSQL
0
Модератор
Эксперт MS Access
6231 / 2909 / 707
Регистрация: 12.06.2016
Сообщений: 7,839
13.06.2022, 00:55
Цитата Сообщение от skol13 Посмотреть сообщение
но тут пришлось таки приводить все даты к формату #mm/dd/yyyy#
Вот и эта информация пригодилась. )))
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.06.2022, 00:55
Помогаю со студенческими работами здесь

Слишком мало параметров. Требуется 3
Здравствуйте друзья!. Работаю с акцесовской базой. В самой акцесовской базе создал запрос на INSERT INSERT INTO history (...

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

Слишком мало параметров. Требуется 1
Если я запрос полностю вбиваю одной строкой, то все нормально: void __fastcall TAdd_in_Storage::Button1Click(TObject *Sender) { ...

Слишком мало параметров. требуется 1
есть код strSQL = "insert into ЖурналИнноваций select * from ВременныеДанные where ВременныеДанные.Имя <>...

FDQuery Слишком мало параметров
Мир всем и привет Помогите пожалуйстта выдаёт ошибку


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 03.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru