46 / 31 / 1
Регистрация: 28.09.2012
Сообщений: 972

Разработка процедуры по последовательному изменении данных в таблице

25.07.2014, 15:57. Показов 2319. Ответов 33
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток форумчане!
Прошу Вашей помощи.

В форме "frmBipyck_OTK_RA" находятся данные, которые должны измениться последовательно двумя запросами:
1.gryBir_Kod_Izd_Amp_Bolt_Icp_B_Tbl_Iden t_Izd ( событие формы "frmBipyck_OTK_RA" - Выгрузка)
2.gryShtrixkod_Izdeliy_Vremy ( событие формы "frmBipyck_OTK_RA" - Закрытие)

Проблема в том что изменение происходят только в одной записи формы frmBipyck_OTK_RA" а должны во всех записях этой формы.Кроме того "Данными" для формы " frmBipyck_OTK_RA" является запрос "gry_Bipyck_OTK_RA" в котором условием отбора является "Дата_Изготовления_Изделия = Is Null" - это вносит дополнительные сложности.

т.е. изменения в таблице "Идентификатор_Изделия" должны вноситься во всех записях которые присутствовали в форме "frmBipyck_OTK_RA" не зависимо от того стоит " Дата_Изготовления_Изделия" или нет.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.07.2014, 15:57
Ответы с готовыми решениями:

Запуск процедуры при изменении данных в диапазоне ячеек( трансляция данных через DDE сервер)
Запуск процедуры при изменении данных в диапазоне ячеек, данные меняются в течении всего рабочего дня,путем трансляции данных из платформы...

Проблема мутации при изменении данных в таблице
Доброго времени суток! Существует задача, при изменении статуса продукта, в той же таблице, триггером выставляется время изменения...

Динамическое изменение данных в таблице при изменении значения в списке
Здравствуйте, Уважаемые. У меня к Вам вопрос. Есть база данных с таблицей "USERS"( очень много разных полей). Данные из поля...

33
Эксперт MS Access
26825 / 14505 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
25.07.2014, 22:01
Ссылка на поле формы в принципе может дать только одно значение. Для создания набора записей надо либо анализировать фильтр формы, что не всегда просто, либо создать строку из уникальных идентификаторов записи. Вот второй вариант Вам и предлагается.
1. Создана публичная функция getIdent() стандартном модуле Module1. Параметры функции: имя_формы, имя поля - уникального идентификатора записи
2. В запросах gryBir_Kod_Izd_Amp_Bolt_Icp_B_Tbl_Ident_ Izd и gryShtrixkod_Izdeliy_Vremy условие Where изменено на
SQL
1
WHERE eval([Код_tblИдентификатор_Изделия] & " in (" & getIdent("frmBipyck_OTK_RA","[Код_tblИдентификатор_Изделия]") & ")")
3. Отработка запросов перенесена из события закрытия формы (Close) на событие выгрузки (Unload), так как на закрытии формы уже нет столе. Не на что ссылаться

Не стал изменять OpenQuery на Currentdb.Execute, но настоятельно советую Вам самому сделать это.
1
46 / 31 / 1
Регистрация: 28.09.2012
Сообщений: 972
27.07.2014, 14:54  [ТС]
mobile, протестировал Ваши рекомендации по вопросу:
"изменения в таблице "Идентификатор_Изделия" должны вноситься во всех записях которые присутствовали в форме "frmBipyck_OTK_RA" не зависимо от того стоит " Дата_Изготовления_Изделия" или нет. "
все работает корректно, спасибо!

что касается исключения всплывающих окон при выполнении запросов на изменение - то на мой взгляд лучшим вариантов из предложенных Вами будет использование Currentdb.Execute. вместо OpenQuery.
Но возникла проблема в написании самой процедуре( синтаксисе).Не подскажете?
0
46 / 31 / 1
Регистрация: 28.09.2012
Сообщений: 972
31.07.2014, 12:12  [ТС]
mobile, заметили особенность работы клиента- когда выходим из формы "frmBipyck_OTK_RA" при ОТСУТСТВИИ в ней какой-либо записи у пользователей с Run-time приложение просто сворачивается "Приложение не может ... из-за ошибки выполнения"
если установлен Аксесс- то возникает ошибка "Run-time error '3021' текущая запись отсутствует" и выйти можно только через диспетчер задач. Можно как-либо изменить процедуры для исключения этой ошибки?
0
Эксперт MS Access
26825 / 14505 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
31.07.2014, 13:39
Измените функцию для обхода пустого рекордсета
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Public Function getIdent(frmName, fldName)
'frmName - имя формы
'fldName - имя поля уникального идентификатора записи
    Dim s
    With Forms(frmName).Form.Recordset
        If .EOF Then getIdent = 0: Exit Function 'Обход, если нет данных
        .MoveFirst
        Do Until .EOF
            s = s & "," & .Fields(fldName)
            .MoveNext
        Loop
        s = Mid(s, 2)
    End With
    getIdent = s
End Function
1
46 / 31 / 1
Регистрация: 28.09.2012
Сообщений: 972
07.08.2014, 14:58  [ТС]
mobile, что-то разработанные процедуры не всегда корректно работают. Может дело в том что я неправильно составил код VBA для последовательно запуска процедур(запросов)? Посмотрите, п-та!

Visual Basic
1
2
3
4
5
6
7
8
9
Private Sub Form_Unload(Cancel As Integer)
Dim stDocName As String
    stDocName = "gryBir_Kod_Izd_Amp_Bolt_Icp_B_Tbl_Ident_Izd"
    CurrentDb.Execute stDocName
 
    stDocName = "gryShtrixkod_Izdeliy_Vremy"
    CurrentDb.Execute stDocName
   
End Sub
Добавлено через 27 минут
mobile, поробовал поэкспериментировал с Модуль1 и :

если применять Модуль1 без обхода пустого рекордсета -то работает корректно

если применить Модуль1 с обходом пустого рекордсета -то работает НЕкорректно

Наверно нужно поменять что-либо в Модуль1

Некорректно-значит запросы "gryBir_Kod_Izd_Amp_Bolt_Icp_B_Tbl_Ident _Izd"
"gryShtrixkod_Izdeliy_Vremy"

не срабатывают.
0
Эксперт MS Access
26825 / 14505 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
07.08.2014, 20:16
Цитата Сообщение от ankan Посмотреть сообщение
если применить Модуль1 с обходом пустого рекордсета -то работает НЕкорректно
Не корректно - это как? И что значит "не срабатывают запросы"? А как вы это видите - нет результата, неверный результат или ошибки? Если ошибки, то какие? Что пишется? Если результат неверный, то в чем это проявляется?
1
46 / 31 / 1
Регистрация: 28.09.2012
Сообщений: 972
07.08.2014, 23:44  [ТС]
Не корректно - при закрытии формы "frmBipyck_OTK_RA" - не формируется и не записывается выражение (т.е. этот самый штрихкод) в поле "Штрихкод" tblИдентификатор_Изделия.
0
46 / 31 / 1
Регистрация: 28.09.2012
Сообщений: 972
12.08.2014, 17:29  [ТС]
mobile,При работе процедуры с обходом пустого рекордсета выявил еще одну неточность - некорректно сформировалось выражение :
"tblIzdely_Modifikaciy!Штрихкод_Номе нкл & "#" & tblИдентификатор_Изделия!Номер_Изделия"

последняя часть с номером изделия получилась одинакова у 20 записей( а т.к. номер изделий у всех приборов разный, следовательно часть выражения после # должна быть разной).Это было у одного человека один раз т.е. какой-либо системной ошибки в этом случае не просматривается.
Пояснения во вложении,Лист4

Системная ошибка видна на листе 1 вложения, а именно:
1. не формируется соответствующее выражение в поле "Bir_Kod_Izd_Amp_Bolt_Icp"
затем
2 Не формируется штрихкод в поле "Штрихкод"
на листе 1 эти поля выделены красным

эта проблема не дает внедрить штрихкодовую идентификацию изделий.
Просьба оказать посильную помощь в ее решении!
Вложения
Тип файла: xls Ошибка формирования штрихкода.xls (41.0 Кб, 1 просмотров)
0
46 / 31 / 1
Регистрация: 28.09.2012
Сообщений: 972
13.04.2015, 16:10  [ТС]
mobile , разработанная Вами процедура
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Public Function getIdent(frmName, fldName)
'frmName - имя формы
'fldName - имя поля уникального идентификатора записи
    Dim s
    With Forms(frmName).Form.Recordset
        If .EOF Then getIdent = 0: Exit Function 'Обход, если нет данных
        .MoveFirst
        Do Until .EOF
            s = s & "," & .Fields(fldName)
            .MoveNext
        Loop
        s = Mid(s, 2)
    End With
    getIdent = s
End Function
работает корректно,спасибо.
Процедура запускалась и запускается в событии выгрузки формы "frmBipyck_OTK_RA"
Стал пробовать ее применение в форме "frmBipyck_OTK_R" , и начались проблемы- срабатывает некорректно (при изменении набора значений в записи формы "frmBipyck_OTK_R" не меняет поле штрихкод с учетом данных изменений в источнике записей этой же формы.
Наверно нужно создать еще модуль с функцией getIdent_1 ?
Или еще что-либо?
0
46 / 31 / 1
Регистрация: 28.09.2012
Сообщений: 972
13.04.2015, 16:51  [ТС]
mobile , - возникли предположения - наверно вместо (frmName) нужно вставить имя моей формы, а вместо (fldName) имя уникального (уникальных) идентификаторов записей этой формы - вставил - начала ругаться. :

"If .EOF Then getIdent = 0: Exit Function 'Обход, если нет данных" - из процедуры убрал т.к. с этой строкой она не работала.
Миниатюры
Разработка процедуры по последовательному изменении данных в таблице  
0
Эксперт MS Access
26825 / 14505 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
13.04.2015, 16:59
Покажите как Вы делаете обращение к функции getIdent. В ней самой ничего менять не надо. Надо только при обращении вставить правильные имена формы и поля.
0
46 / 31 / 1
Регистрация: 28.09.2012
Сообщений: 972
13.04.2015, 17:05  [ТС]
посредством
1.gryBir_Kod_Izd_Amp_Bolt_Icp_B_Tbl_Iden t_Izd
2.gryShtrixkod_Izdeliy_Vremy
Ваш пост от 25.07.2014 23:01
Ссылка на поле формы в принципе может дать только одно значение. Для создания набора записей надо либо анализировать фильтр формы, что не всегда просто, либо создать строку из уникальных идентификаторов записи. Вот второй вариант Вам и предлагается.
1. Создана публичная функция getIdent() стандартном модуле Module1. Параметры функции: имя_формы, имя поля - уникального идентификатора записи
2. В запросах gryBir_Kod_Izd_Amp_Bolt_Icp_B_Tbl_Ident_ Izd и gryShtrixkod_Izdeliy_Vremy условие Where изменено на


Visual Basic
1
WHERE eval([Код_tblИдентификатор_Изделия] & " in (" & getIdent("frmBipyck_OTK_RA","[Код_tblИдентификатор_Изделия]") & ")")
3. Отработка запросов перенесена из события закрытия формы (Close) на событие выгрузки (Unload), так как на закрытии формы уже нет столе. Не на что ссылаться

Не стал изменять OpenQuery на Currentdb.Execute, но настоятельно советую Вам самому сделать это.
0
Эксперт MS Access
26825 / 14505 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
13.04.2015, 17:16
Если Вы ничего не меняли, то я отчетливо вижу, что в запросе написано имя формы "frmBipyck_OTK_RA" в то время как Вам нужно, чтобы функция отработала по форме "frmBipyck_OTK_R". Ну так надо заменить значения параметров функции в запросе на правильные. И имя формы, и имя поля.
0
46 / 31 / 1
Регистрация: 28.09.2012
Сообщений: 972
13.04.2015, 18:04  [ТС]
Создал форму frmBipyck_OTK_R" , изменил параметры в соответствующих запросах , в итоге вновь созданная форма frmBipyck_OTK_R" отрабатывала некорректно.
Затем удалил frmBipyck_OTK_R" и все ее запросы- оставил только изначальную форму "frmBipyck_OTK_RA" с ее запросами.
Далее, в модуле Module1 изменил frmName, fldName на "frmBipyck_OTK_RA" и "Код_tblИдентификатор_Изделия" -возникла ошибка - см. скриншот.
0
Эксперт MS Access
26825 / 14505 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
13.04.2015, 18:21
Еще раз повторяю - в самой функции ничего менять не надо. Как там было frmName, так и должно остаться. Менять надо имена в SQL-выражении
SQL
1
WHERE eval([Код_tblИдентификатор_Изделия] & " in (" & getIdent("frmBipyck_OTK_RA","[Код_tblИдентификатор_Изделия]") & ")")
И важно: форма, упомянутая в SQL-выражении, обязательно должна быть открыта. Если написано getIdent("frmBipyck_OTK_RA", "[Код_tblИдентификатор_Изделия]"), то форма frmBipyck_OTK_RA обязательно должна быть открытой на рабстоле. И в ней должно быть поле [Код_tblИдентификатор_Изделия]
1
46 / 31 / 1
Регистрация: 28.09.2012
Сообщений: 972
24.04.2015, 16:25  [ТС]
mobile, все проблемы решены кроме использования обхода при отсутствии записей:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Public Function getIdent(frmName, fldName)
'frmName - имя формы
'fldName - имя поля уникального идентификатора записи
    Dim s
    With Forms(frmName).Form.Recordset
        If .EOF Then getIdent = 0: Exit Function 'Обход, если нет данных
        .MoveFirst
        Do Until .EOF
            s = s & "," & .Fields(fldName)
            .MoveNext
        Loop
        s = Mid(s, 2)
    End With
    getIdent = s
End Function
т.е. если
Visual Basic
1
If .EOF Then getIdent = 0: Exit Function 'Обход, если нет данных
убрать из модуля то все процедуры по изменению работают( естественно, если нет записей в форме-то приложение закрывается-что неудобно)
Из скриптов видно что в форме выпуска есть записи.( в скрипте "Не работающий запрос...." показан отбор записей при НАЛИЧИИ строки обхода в модуле1)
Возможно дело в условии отбора . В модуле getIdent = 0 . В запросах <> ЛОЖЬ
getIdent = 0 - может использовать "0" вместо "Null" ? . Я пытался- мне не помогло.
Миниатюры
Разработка процедуры по последовательному изменении данных в таблице   Разработка процедуры по последовательному изменении данных в таблице   Разработка процедуры по последовательному изменении данных в таблице  

Разработка процедуры по последовательному изменении данных в таблице  
0
Эксперт MS Access
26825 / 14505 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
24.04.2015, 16:45
ankan, я не понимаю проблему. Она в чем? Вот в этом?
Цитата Сообщение от ankan Посмотреть сообщение
если нет записей в форме-то приложение закрывается-что неудобно
Или в чем-то еще? Тогда напишите в чем.

И еще. Перед выполнением запроса, поставьте брейкпойнт (F9) на предпоследнюю строку в функции. И посмотрите чему равно s. Интересует тип получившегося выражения. Это текст или числа? Если текст, то в функции, при выходе по EOF, надо задать функции любое невозможное текстовое значение. Например getIdent="getIdent". Лишь бы такого не было у Вас в базе.
1
46 / 31 / 1
Регистрация: 28.09.2012
Сообщений: 972
24.04.2015, 17:17  [ТС]
mobile, проблема именно в том что:
1. при наличии строки обхода в модуле - запросы не срабатывают, хотя в самой форме выпуска есть записи.
2.при отсутствии строки обхода в модуле - запросы срабатывают ,но при отсутствии записей в форме выпуска ( а в форму выпуска пользователь заходит, в том числе, для просмотра отчетов и т.п.) приложение закрывается.приходится в форме выпуска держать бестолковую запись-единственное назначение которой- что-бы она была в форме выпуска.

В функции:
1. при отсутствии строки обхода s (54405,54573 и т.д.) т.е. коды записей( числа).
2.при наличии строки обхода s пустое
Миниатюры
Разработка процедуры по последовательному изменении данных в таблице  
0
Эксперт MS Access
26825 / 14505 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
24.04.2015, 18:57
Я кажется догадываюсь в чем дело - условия проверки не "пустоту" рекордсета неполные. Строку проверки надо дополнить на .BOF
Visual Basic
1
 If .EOF And .BOF Then getIdent = 0: Exit Function
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.04.2015, 18:57
Помогаю со студенческими работами здесь

Arduino. Прием данных по последовательному порту
Здравствуйте, подскажите пожалуйста, нашел в инете код приема 2-ух символов, но теперь по одному символу коряво принимает. Почему? Заранее...

Проверка кода на отправку/получения данных по последовательному порту
Доброго времени суток! Написал программу, которая должна отравлять через ком-порт координаты, следующим макаром - отправляет строку, ждет...

Потеря данных при обмене по последовательному порту. MATLAB vs контроллер
Здравствуйте, отправляю запрос в COM порт каждые две секунды (использую Matlab). полученные цифры (цифры с контроллера и время) записываю в...

Как сделать что если нет данных в таблице, чтобы шаблон этой самой таблице не выводился а писалось что данных в таблице нет
В общем проблема такая, есть админка где выводится список жалоб которые без ответа, когда они есть то всё нормально список выводится и с...

На основе БД Sales сделать 3 любые хранимые процедуры по любой таблице и 3 любых триггера также по любой таблице
Помогите пожалуйста! На основе БД Sales сделать 3 любые хранимые процедуры по любой таблице и 3 любых триггера также по любой таблице....


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

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

Новые блоги и статьи
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru