4 / 4 / 1
Регистрация: 02.02.2017
Сообщений: 180
1

Периодически вылетает ошибка передачи аргументов

10.10.2017, 12:34. Показов 769. Ответов 26
Метки нет (Все метки)

при переходе из формы в форму командой DoCmd.OpenForm, я передаю аргументом различные данные, например:
Visual Basic
1
2
3
DoCmd.OpenForm "to_STOCK", , , , , , Me.field_login & "," & Replace(Me.QTY, ",", ".") & "," & Replace(Me.PO_PRICE, ",", ".") & "," _
        & Replace(Me.AMOUNT, ",", ".") & "," & Replace(Me.BALANCE, ",", ".") & "," & Replace(Me.NAME_UNIT, ",", ".") & "," & Replace(Me.PART_NUMBER, ",", ".") _
        & "," & Replace(Me.AC, ",", ".") & "," & Replace(Me.Incoming_AWB, ",", ".") & "," & Replace(Me.via, ",", ".") & "," & Replace(Me.cnt, ",", ".") & "," & x
иногда вылетает ошибка "Invalid use of null"
по сути, как я понимаю, он по одному или нескольким аргументам передает вместо данных "null", что и вызывает ошибку. причем повторный вызов при тех же вводных может сработать без проблем...
подскажите, что можно сделать (может добавить какуюто процедуру обновления формы или может, какуюто проверку или еще что, чтоб оно четче срабатывало и не выдавало ошибку иногда)??
подскажите, опытные товарищи! 0)

Добавлено через 48 секунд
ошибка, кстати, вылетает уже при активации новой формы, там, где я эти аргументы пытаюсь принять, ессно )
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.10.2017, 12:34
Ответы с готовыми решениями:

При копировании ячеек из одного Excel файла в другой, периодически вылетает ошибка
Добрый день, помогите пожалуйста разобраться. У меня есть два Excel файла. Столбцы из первого файла...

Ссылочный механизм передачи аргументов
Не могу понять эти ссылки, можете подсказать что конкретно и куда идёт, как так получается что при...

Каков способ (механизм) передачи аргументов в функцию?
Каков способ (механизм) передачи аргументов в функцию?

Периодически вылетает 0x00000124
день добрый, кто умеет разбираться в этом объясните плз в чем причина моего бсода

26
Мы один, давай на "ты"
2474 / 1063 / 254
Регистрация: 16.06.2016
Сообщений: 2,378
10.10.2017, 12:47 2
Replace(Me.QTY, ",", ".")
Str(Nz(Me.QTY))

?
1
4 / 4 / 1
Регистрация: 02.02.2017
Сообщений: 180
10.10.2017, 12:49  [ТС] 3
Панург, реплейсом я меняю запятые в значениях полей на точки, потому как запятые воспринимаются vba как разделитель между аргументами
или в чем вопрос?
0
Мы один, давай на "ты"
2474 / 1063 / 254
Регистрация: 16.06.2016
Сообщений: 2,378
10.10.2017, 12:51 4
blade_snl, заменить не пробовал?

Добавлено через 29 секунд
upd. все конечно
1
4 / 4 / 1
Регистрация: 02.02.2017
Сообщений: 180
10.10.2017, 12:55  [ТС] 5
Панург, так я итак заменяю вроде - разве нет? )
0
Мы один, давай на "ты"
2474 / 1063 / 254
Регистрация: 16.06.2016
Сообщений: 2,378
10.10.2017, 13:00 6
Цитата Сообщение от blade_snl Посмотреть сообщение
Панург, так я итак заменяю вроде - разве нет? )


Заменить одну конструкцию на другую. (а не запятую на точку) Образец я привёл.
1
Модератор
Эксперт MS Access
3617 / 2068 / 509
Регистрация: 12.06.2016
Сообщений: 5,290
10.10.2017, 13:04 7
blade_snl,

Нужно смотреть в процедуре, в которой распознается этот OpenArgs.
И потом, зачем разделять компоненты запятыми,
можно ведь другой символ в качестве разделителя использовать.
Тогда и Replace'ы не понадобятся.
1
4 / 4 / 1
Регистрация: 02.02.2017
Сообщений: 180
10.10.2017, 13:13  [ТС] 8
Панург, Str(Nz(Me.QTY)) - насколько я понимаю, это переводит мне значение в строковые данные и проверяет на null, верно?

Добавлено через 1 минуту
Capi, вот как я принимаю эти аргументы:
Visual Basic
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
Private Sub Form_Load()
    Dim p, w, h
    p = Split(Me.OpenArgs, ",")
    Me.field_login = p(0)
    Me.Date_of_delivery = p(1)
    Me.NAME_UNIT = Replace(p(2), ".", ",")
    Me.PART_NUMBER = Replace(p(3), ".", ",")
    Me.QTY = Replace(p(4), ".", ",")
    Me.Pur_Price = Replace(p(5), ".", ",")
    Me.AMOUNT = Replace(p(6), ".", ",")
    Me.QTY_history = Replace(p(7), ".", ",")
    Me.Pur_Amount = Replace(p(8), ".", ",")
    Me.Inv_By = Replace(p(9), ".", ",")
    Me.IncomingAWB = Replace(p(10), ".", ",")
    Me.via = Replace(p(11), ".", ",")
    Me.MFG_Invoice = Replace(p(12), ".", ",")
    Me.Pur_Inv_No_Comments = Replace(p(13), ".", ",")
    Me.ORI_SEAL_FULL = Replace(p(14), ".", ",")
    Me.ORI_PARTIAL = Replace(p(15), ".", ",")
    Me.cnt = Replace(p(16), ".", ",")
    ch_old = Nz(p(17), "")
    ch_new = p(18)
    Me.STORE_moving = Replace(p(19), ".", ",")
    Me.ORI_cnt = Replace(p(20), ".", ",")
    
    On Error GoTo errRef
    DoCmd.Echo False
    DoCmd.Maximize
    w = Me.WindowWidth
    h = Me.WindowHeight
    DoCmd.Restore
    Me.Move (w - Me.InsideWidth) / 3, (h - Me.InsideHeight) / 4, Me.InsideWidth + 550, Me.InsideHeight + 950
errRef:
    DoCmd.Echo True
End Sub
...но я думаю, что проблема именно в том, что один или несколько аргументов передаются не значением, а null

Добавлено через 3 минуты
Capi, "можно ведь другой символ в качестве разделителя использовать.
Тогда и Replace'ы не понадобятся"

это да, можно, но изменит ли это суть и решит ли мою проблему? ) кода весьма немало прийдется перелопатить чтоб изменить )))
0
Мы один, давай на "ты"
2474 / 1063 / 254
Регистрация: 16.06.2016
Сообщений: 2,378
10.10.2017, 13:20 9
Цитата Сообщение от blade_snl Посмотреть сообщение
Панург,... проверяет на null, верно?
Не проверяет, а заменяет на 0 в данном случае. Вторым аргументом можно поставить любое значение.
Цитата Сообщение от blade_snl Посмотреть сообщение
Панург, Str(Nz(Me.QTY)) - насколько я понимаю, это переводит мне значение в строковые данные ...
Разве не это требуется?
1
Модератор
Эксперт MS Access
3617 / 2068 / 509
Регистрация: 12.06.2016
Сообщений: 5,290
10.10.2017, 13:20 10
Цитата Сообщение от blade_snl Посмотреть сообщение
вот как я принимаю эти аргументы:
Это понятно, что Split'ом.
Про другой разделитель вместо запятой что думаете?

Кстати, можно вообще без OpenArgs.
Просто в свойстве полей Значение по умолчанию указать ссылку на соответствующие поля первой формы:
=Forms!имя_первой_формы.QTY
и так далее.
1
Мы один, давай на "ты"
2474 / 1063 / 254
Регистрация: 16.06.2016
Сообщений: 2,378
10.10.2017, 13:21 11
Me.NAME_UNIT = Replace(p(2), ".", ",") Val(p(2))
1
Модератор
Эксперт MS Access
3617 / 2068 / 509
Регистрация: 12.06.2016
Сообщений: 5,290
10.10.2017, 13:43 12
Цитата Сообщение от blade_snl Посмотреть сообщение
"можно ведь другой символ в качестве разделителя использовать.
Тогда и Replace'ы не понадобятся"
это да, можно, но изменит ли это суть и решит ли мою проблему? ) кода весьма немало прийдется перелопатить чтоб изменить )))
М-м-м....

Суть это изменит.
Код станет не такой страшный.
Как минимум.

Вам жаль 15 минут на перелопачивание?

Добавлено через 16 минут
Цитата Сообщение от Capi Посмотреть сообщение
Кстати, можно вообще без OpenArgs.
Просто в свойстве полей Значение по умолчанию указать ссылку на соответствующие поля первой формы:
=Forms!имя_первой_формы.QTY
и так далее.
Прошу прощения.
Второпях оговорилась.
Конечно, это не в Значение по умолчанию, а в Данные (ControlSource).
1
4 / 4 / 1
Регистрация: 02.02.2017
Сообщений: 180
10.10.2017, 14:20  [ТС] 13
Панург, "Разве не это требуется?"

по сути, сама передача аргументов в том виде, что есть у меня, меня устраивает, сложность состоит именно в периодически возникающей ошибке.
если эти изменения исключают ошибку - то да )

Добавлено через 4 минуты
Цитата Сообщение от Capi Посмотреть сообщение
Кстати, можно вообще без OpenArgs.
Просто в свойстве полей Значение по умолчанию указать ссылку на соответствующие поля первой формы:
=Forms!имя_первой_формы.QTY
и так далее.
изначально я пробовал так, но по многим причинам, это не работало... старая форма, как минимум, закрывается, новая форма обрабатывает данные, затем может их вернуть в старую, а может в третью... в общем, ньюансов уже не помню, но подобный способ переноса данных не прокатил, именно тогда, на этом же форуме и рекомендовали перейти к передаче через аргументы функции...

Добавлено через 5 минут
Цитата Сообщение от Панург Посмотреть сообщение
Me.NAME_UNIT = Replace(p(2), ".", ",") Val(p(2))
что именно это дает, разжуйте плз )

Добавлено через 2 минуты
Цитата Сообщение от Capi Посмотреть сообщение
Вам жаль 15 минут на перелопачивание?
боюсь, не 15... ))) форм немало... но щас разберусь, как именно было бы красиво - думаю, потрачу время...
просто чутка запутался в ответах, потому не вычленил зерно истины - как именно сделать... )))

Добавлено через 8 минут
Цитата Сообщение от Capi Посмотреть сообщение
Конечно, это не в Значение по умолчанию, а в Данные (ControlSource).
а источник данных для некоторых полей вообще связанные таблицы, которые там и прописаны... )

Добавлено через 54 секунды
Цитата Сообщение от Capi Посмотреть сообщение
можно ведь другой символ в качестве разделителя использовать
кстати, а как использовать другой символ? ))))
0
Модератор
Эксперт MS Access
3617 / 2068 / 509
Регистрация: 12.06.2016
Сообщений: 5,290
10.10.2017, 14:29 14
Цитата Сообщение от blade_snl Посмотреть сообщение
изначально я пробовал так, но по многим причинам, это не работало...
старая форма, как минимум, закрывается
Ее же можно не закрывать, а прятать, делать Hidden.
Не настаиваю, просто вариант.

Добавлено через 6 минут
Цитата Сообщение от blade_snl Посмотреть сообщение
кстати, а как использовать другой символ?
При формировании передаваемой строки - думаю, понятно, как.
А при распознавании - заменить значение второго аргумента в Split.
Visual Basic
1
2
3
4
' вместо
p = Split(Me.OpenArgs, ",")
' сделать, например, так
p = Split(Me.OpenArgs, "#")
1
4 / 4 / 1
Регистрация: 02.02.2017
Сообщений: 180
10.10.2017, 14:31  [ТС] 15
Цитата Сообщение от Capi Посмотреть сообщение
Ее же можно не закрывать, а прятать, делать Hidden.
мне бы всеже остановиться на передаче данных аргументами... )
если остановиться на приведении в более приглядный вид сего действа, то:
Str(Nz(Me.QTY)) - переведет данные в строку или передаст "0" в случае, если значение исходного поля "null", верно?
...но запятые же останутся все-равно, если они были в тексте исходного поля? и разорвут мне аргумент надвое...

Добавлено через 1 минуту
Цитата Сообщение от Capi Посмотреть сообщение
1
2
3
4
' вместо
p = Split(Me.OpenArgs, ",")
' сделать, например, так
p = Split(Me.OpenArgs, "#")
о, точно, спасибо ))
0
Модератор
Эксперт MS Access
3617 / 2068 / 509
Регистрация: 12.06.2016
Сообщений: 5,290
10.10.2017, 14:33 16
Цитата Сообщение от blade_snl Посмотреть сообщение
а источник данных для некоторых полей вообще связанные таблицы, которые там и прописаны... )
Тогда нужно в Значение по умолчанию.
А первую форму не закрывать, а скрывать.
1
4 / 4 / 1
Регистрация: 02.02.2017
Сообщений: 180
10.10.2017, 15:05  [ТС] 17
Цитата Сообщение от Capi Посмотреть сообщение
Тогда нужно в Значение по умолчанию.
А первую форму не закрывать, а скрывать.
ну это да, но мы, всеже остановимся на передаче данных аргументами... )
мне важно другое, если я поубираю реплейсы - это снизит риск ошибки? )
0
Модератор
Эксперт MS Access
3617 / 2068 / 509
Регистрация: 12.06.2016
Сообщений: 5,290
10.10.2017, 15:17 18
Цитата Сообщение от blade_snl Посмотреть сообщение
если я поубираю реплейсы - это снизит риск ошибки?
Они просто засоряют код в данном случае.

Nz снизит и даже уберет.

Но я бы до добавления Nz посмотрела, на какой строке возникает ошибка.
Действительно ли нужно там бороться с Null путем Nz,
может, Null там допустим, но что-то его не пускает.
1
4 / 4 / 1
Регистрация: 02.02.2017
Сообщений: 180
10.10.2017, 15:33  [ТС] 19
Цитата Сообщение от Capi Посмотреть сообщение
Nz снизит и даже уберет
он уберет передаваемый нулл, но он заменит его на 0... т.е., все равно не передаст нужные данные, вместо них передаст 0 в случае глюка, верно? )
0
Эксперт MS Access
16358 / 6793 / 1492
Регистрация: 21.06.2012
Сообщений: 12,549
10.10.2017, 15:57 20
А вариант передачи данных через глобальные переменные не пробовали?
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.10.2017, 15:57

Программа периодически вылетает с ошибкой
Пишу чат-бота для вк. Работает минут 15 и вылетает вот с такой ошибкой:...

Игра Prototype периодически вылетает
Играл в игру прототип после трех месяцев решил еще раз поиграть но при попытке воити в сохраненную...

Периодически вылетает реклама в браузере
В браузере Гугл Хром периодически открывается новая вкладка с рекламой. То Вулкан, то Покердом, то...

SSD-диск периодически вылетает
Поставил на комп ssd диск только для операционной системы, файлы лежат на обычном hdd, компьютер...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.