9 / 8 / 0
Регистрация: 27.09.2015
Сообщений: 837
1

Ошибка при выполнении запроса на добавление через кнопку на форме

29.03.2018, 13:27. Показов 1331. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день.

Возник вопрос при переорганизации базы.

На форме есть комбобоксы, в которых я выбрал уже существующие значения, которые есть в таблице Resource control.
Также есть подформа, в которой также стоят галочки (соответствующие данным из таблицы-справочника)

При нажатии на кнопку Печать ИД-заданий должны выполниться 2 запроса на добавление в другую таблицу Log и выйти на экран 3 отчета. Код на кнопке такой

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Private Sub Кнопка150_Click()
Me.Dirty = False
CurrentDb.Execute "add_id_log"
 
CurrentDb.Execute "del_id"
 
DoCmd.OpenReport "Балкон_наклейки", acViewPreview
DoCmd.OpenReport "Мезонин_наклейки", acViewPreview
DoCmd.OpenReport "Рэки_наклейки", acViewPreview
 
End Sub
Но спотыкается на первом же запросе. Это из-за того, что в одном из предыдущих запросов "Рес_контр_запрос1" перед этим запросом идет ссылка на эти комбобоксы, правильно?
Как решить эту проблему?
Вложения
Тип файла: rar test2.rar (1.27 Мб, 2 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.03.2018, 13:27
Ответы с готовыми решениями:

Ошибка при выполнении запроса на добавление
Помогите определить почему возникает ошибка и как ее устранить. 1.Есть некая база в аксесе, в...

Ошибка при выполнении запроса на добавление (канцтовары для сотрудников)
Здравствуйте. Есть 2 таблицы, сотрудники и предметы (канцелярия), связь один ко многим. Все вроде...

Отобразить введеный период при выполнении запроса на форме
Доброго времени суток. Как мне отобразить введеный период при выполнении запроса на форме...

Нарушение уникальности ключа при выполнении запроса на добавление
Всем доброго времени суток изучаю MS Access по учебнику при выполнении 6 ЛР происходит...

14
10446 / 5445 / 1375
Регистрация: 05.10.2016
Сообщений: 15,430
29.03.2018, 13:38 2
Цитата Сообщение от Dimasterfrom4e Посмотреть сообщение
Но спотыкается на первом же запросе.
Проверьте запрос "Рес_контр_запрос11" - там ошибки (не существующие поля из запроса "Рес_контр_запрос1")
1
9 / 8 / 0
Регистрация: 27.09.2015
Сообщений: 837
29.03.2018, 17:16  [ТС] 3
Цитата Сообщение от Eugene-LS Посмотреть сообщение
Проверьте запрос "Рес_контр_запрос11" - там ошибки (не существующие поля из запроса "Рес_контр_запрос1")
Извиняюсь, проглядел эти запросы. Поправил, но все равно при нажатии на кнопку такая же ошибка
Вложения
Тип файла: rar test2.rar (1.27 Мб, 4 просмотров)
0
9 / 8 / 0
Регистрация: 27.09.2015
Сообщений: 837
29.03.2018, 19:27  [ТС] 4
Поправил также запрос на добавление, у него был путь к связанной таблице-получателю.

Но ошибка при нажатии кнопки на форме так и осталась. Подскажете?
Вложения
Тип файла: rar test2.rar (1.27 Мб, 1 просмотров)
0
10446 / 5445 / 1375
Регистрация: 05.10.2016
Сообщений: 15,430
29.03.2018, 19:37 5
Лучший ответ Сообщение было отмечено Dimasterfrom4e как решение

Решение

Цитата Сообщение от Dimasterfrom4e Посмотреть сообщение
Но ошибка при нажатии кнопки на форме так и осталась. Подскажете?
У вас там косяк неизвестной (мне) этимологии с вложенными запросами.
Мои попытки выяснить причину - не дали результата.
Ну вы то же перемудрили (тройная вложенность запросов).
Попробуйте упростить.
1
9 / 8 / 0
Регистрация: 27.09.2015
Сообщений: 837
29.03.2018, 19:49  [ТС] 6
Цитата Сообщение от Eugene-LS Посмотреть сообщение
Попробуйте упростить.
Да, уже думал об этом. Эту базу делал давно. Пожалуй начну сначала, спасибо)
0
9 / 8 / 0
Регистрация: 27.09.2015
Сообщений: 837
29.03.2018, 21:07  [ТС] 7
Нашел какое-то решение, но частично.

Ошибка связана с тремя параметрами, которые ссылаются на значения комбобоксов в форме.

В одной теме здесь есть решение к похожей ошибке, скопировал оттуда и немного перепрописал с ссылкой только на один комбобокс из трех на форме.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Private Sub Кнопка150_Click()
Me.Dirty = False
 
Dim q As DAO.QueryDef, p As DAO.Parameter, p1 As DAO.Parameter, p2 As DAO.Parameter
  Set q = CurrentDb.QueryDefs("add_id_log")
  
  For Each p In q.Parameters
    p.Value = Me!Ford
    
  Next
  
  q.Execute
 
CurrentDb.Execute "del_id"
 
 
DoCmd.OpenReport "Балкон_наклейки", acViewPreview
DoCmd.OpenReport "Мезонин_наклейки", acViewPreview
DoCmd.OpenReport "Рэки_наклейки", acViewPreview
 
End Sub
Запрос на добавление заработал, но...

Но в запросе Рес_контр_запрос1 мне пришлось оставить только 1 параметр, ссылающий на первый комбобокс из формы. Как мне добавить в этот код проверку одновременно параметров из всех 3 комбобоксов?
Вложения
Тип файла: rar test2.rar (1.30 Мб, 2 просмотров)
0
9 / 8 / 0
Регистрация: 27.09.2015
Сообщений: 837
29.03.2018, 23:10  [ТС] 8
Нашел способ. Через публичные функции в отдельном модуле записываю данные из комбобоксов

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Public Function ORD()
 
        ORD = Form_WH_OUT.Ford
        
End Function
 
Public Function ROU()
 
        ROU = Form_WH_OUT.Froute
   
End Function
 
Public Function STA()
   
        STA = Form_WH_OUT.Fstat
    
End Function
в запросе с параметрами вместо ссылок на комбобоксы формы прописал ссылки на функции. Не знаю точно, верно ли все, но запрос на добавление при нажатии на кнопку стал работать)
Вложения
Тип файла: rar test2.rar (1.31 Мб, 6 просмотров)
0
295 / 256 / 68
Регистрация: 18.06.2015
Сообщений: 570
30.03.2018, 09:00 9
Лучший ответ Сообщение было отмечено Dimasterfrom4e как решение

Решение

Цитата Сообщение от Dimasterfrom4e Посмотреть сообщение
STA = Form_WH_OUT.Fstat
Очень не рекомендую таким образом получать данные с формы. Если на момент вызова форма будет закрыта, создастся автоматически невидимый экземпляр формы, что может привести в дальнейшем к непредсказуемым результатам.
В подобных функциях лучше сначала проверять, открыта ли форма и только потом считывать, лучше использовать обращение через коллекцию форм:
Visual Basic
1
Forms("WH_OUT").Fstat
1
9 / 8 / 0
Регистрация: 27.09.2015
Сообщений: 837
30.03.2018, 09:15  [ТС] 10
Цитата Сообщение от MrShin Посмотреть сообщение
лучше использовать обращение через коллекцию форм:
Спасибо огромное.

Правда я не силен в этом. Подскажите пожалуйста, проверку открытия формы можно примерно таким образом сделать?(копипаст функции из другой бд)

Visual Basic
1
2
3
4
5
6
7
8
Public Function SH()
    On Error Resume Next
    If CurrentProject.AllForms("f_tb_ssr").IsLoaded Then
         
        SH = Forms!f_tb_ssr!ff_tb_ssr!ид_работ
        On Error Resume Next
    End If
End Function
0
295 / 256 / 68
Регистрация: 18.06.2015
Сообщений: 570
30.03.2018, 12:58 11
Лучший ответ Сообщение было отмечено Dimasterfrom4e как решение

Решение

Цитата Сообщение от Dimasterfrom4e Посмотреть сообщение
можно примерно таким образом сделать?
Да, можно. Я еще дополнительно проверяю, что форма открыта не в режиме дизайна:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Public Function IsLoadedForm(ByVal strFormName As String) As Boolean
    ' Returns True if the specified form is open in Form view or Datasheet view.
    Const conObjStateClosed = 0
    Const conDesignView = 0
 
    If SysCmd(acSysCmdGetObjectState, acForm, strFormName) <> conObjStateClosed Then
        If Forms(strFormName).CurrentView <> conDesignView Then
            IsLoadedForm = True
        End If
    End If
End Function
1
9 / 8 / 0
Регистрация: 27.09.2015
Сообщений: 837
30.03.2018, 13:32  [ТС] 12
Цитата Сообщение от MrShin Посмотреть сообщение
Да, можно. Я еще дополнительно проверяю, что форма открыта не в режиме дизайна:
Спасибо вам. Понял)

Цитата Сообщение от MrShin Посмотреть сообщение
создастся автоматически невидимый экземпляр формы
Вот тут вопрос. Как увидеть невидимый экземпляр формы, если он создался?
0
295 / 256 / 68
Регистрация: 18.06.2015
Сообщений: 570
30.03.2018, 13:43 13
Цитата Сообщение от Dimasterfrom4e Посмотреть сообщение
Как увидеть невидимый экземпляр формы, если он создался?
Можно в окне Immediate выполнить
Visual Basic
1
Form_WH_OUT.Visible=True
1
9 / 8 / 0
Регистрация: 27.09.2015
Сообщений: 837
30.03.2018, 15:23  [ТС] 14
Цитата Сообщение от MrShin Посмотреть сообщение
Можно в окне Immediate выполнить
спасибо, попробую
0
10446 / 5445 / 1375
Регистрация: 05.10.2016
Сообщений: 15,430
30.03.2018, 15:32 15
Цитата Сообщение от MrShin Посмотреть сообщение
Можно в окне Immediate выполнить
Сохранку только предварительно сделайте, перед такими экспериментами, думаю, - не помешает.
1
30.03.2018, 15:32
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.03.2018, 15:32
Помогаю со студенческими работами здесь

Нарушение уникальнсоти ключа при выполнении запроса на добавление
Подскажите пожалуйста, что нужно посмотреть/исправить в таблице базы (в самой базе??), чтобы при...

DatagridView добавление данных через кнопку в другой форме
Как добавить в datagridview данные через кнопку в другой форме,с combobox и domainupdown

DatagridView добавление данных через кнопку в другой форме
Как добавить в datagridview данные из другой формы и через кнопку? ----------------------------...

Ошибка при выполнении запроса к БД
Всем привет! Учу PHP по учебнику &quot;Изучаем PHP и MySQL&quot; Л.Бейли. Дошел до момента соединения с MySQL...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru