Обновите Access 2000 до 2010, затем вопрос VB 2016

Помогите, пожалуйста... Я успешно обновился с Access 2000 до 2010, а затем до 2016 без ошибок компиляции, однако у меня есть исполняемый файл в форме в коде VB, и он больше не запускается и не отправляет сообщение об ошибке. Проект представляет собой весы и работает на Access 2000 в течение 15 или более лет с множеством изменений в дизайне, где exe-файл захватывает данные из «сигнального» окна весов и отправляет их в мою форму. Этот exe-файл больше не работает в Access 2010 (программа перехода во время обновления) или в Access 2016. Это очень важно для проекта, у меня больше нет исходного кода в VB или копии VB на моем компьютере, хотя у меня есть скопируйте текстовый файл, оставленный первоначальным программистом. Может ли кто-нибудь сказать мне, почему Access 2016 не признает этот exe. Есть ли ссылка, которую нужно нажать? Я потерян.

Код

Private Sub Form_Load() 
    On Error GoTo Err_Form1 
    Select Case strDocName 
    Case "GetGrossWeight" 
       Set objFrmCtrl = Forms!ConsignmentsIN.GrossWeight
       Warning.Caption = "Get Gross Weight In"   
    Case "GetTareWeight"
       Set objFrmCtrl = Forms!ConsignmentsContractIN.TareWeight 
       Warning.Caption = "Get Tare Weight In" 
    Case "GetGrossWeightcontract" 
       Set objFrmCtrl = Forms!ConsignmentsContract.GrossWeight
       Warning.Caption = "Get Gross Weight In"   
    Case "GetTareWeight"
       Set objFrmCtrl = Forms!ConsignmentsContract.TareWeight 
       Warning.Caption = "Get Tare Weight In" 
    End Select
    OpenEXE
Exit_Form2:
    Exit Sub
Err_Form1:
    MsgBox Error$
    Resume Exit_Form2
End Sub

Private Sub OpenEXE() 
    On Error Resume Next 
    GrossValue = Shell("c:\weighbr\auto\Weight.exe", 6) 
    If Err.Number = 53 And GrossValue = 0 Then 
        MsgBox "Can't find program 'Weight.exe'", vbInformation, "Alert" 
    End If 
    ' ...
End Sub

person Izzy    schedule 25.06.2017    source источник
comment
Что вы подразумеваете под наличием exe-файла в форме?   -  person joanolo    schedule 25.06.2017
comment
Спасибо за ответ, это процедура события, которая запускает exe.   -  person Izzy    schedule 25.06.2017
comment
Set objFrmCtrl = Forms!ConsignmentsContract.TareWeight Warning.Caption = Получить вес тары Out Box54.BackColor = vbRed End Select OpenEXE Exit_Form2: Exit Sub Err_Form1: MsgBox Error$ Resume Exit_Form2 End Sub Private Sub OpenEXE() On Error Resume Next GrossValue = Shell( c:\weighbr\auto\Weight.exe, 6) Если Err.Number = 53 и GrossValue = 0, тогда MsgBox не может найти программу «Weight.exe», vbInformation, Alert End If   -  person Izzy    schedule 25.06.2017
comment
Извините, я пытался вставить информацию, и это не очень хорошо сработало.   -  person Izzy    schedule 25.06.2017
comment
Лучше всего, если вы отредактируете свой вопрос   -  person joanolo    schedule 25.06.2017
comment
Он начинается с Private Sub Form_Load() On Error GoTo Err_Form1 Select Case strDocName Case GetGrossWeight   -  person Izzy    schedule 25.06.2017
comment
На этот вопрос, вероятно, лучше всего ответить, если его переместить в StackOverflow. На самом деле это не проектирование базы данных, а программирование с использованием Access и VBA.   -  person joanolo    schedule 25.06.2017


Ответы (1)


Согласно документация для SHELL:

Запускает исполняемую программу и возвращает Variant (Double), представляющий идентификатор задачи программы в случае успеха, в противном случае возвращает ноль.

Ваш код получает task ID, а не результат выполнения программы .exe (если ничто другое не препятствует выполнению). Таким образом, вы не должны ожидать, в любом случае, получить значение, сгенерированное этой программой.

Вы должны использовать инструменты отладки, чтобы войти в этот Sub и выяснить, что он делает.

Проверьте, есть ли альтернатива вызову Shell() ? (2000) может вам помочь, а также Доступ с 2000 по 2002 год (команда оболочки).

Кажется, что функция Shell могла измениться очень давно.

person joanolo    schedule 25.06.2017
comment
Я прошел программу, и в 2016 году она доходит до exe, но продолжается, как будто ее там не было, результат пустой. Я еще немного изучу то, что вы мне дали. Спасибо за терпение. Мой MDB Access 2000 всегда возвращает результат, т. е. если на платформенных весах ничего нет, то я получаю ноль, но результаты 2016 пустые. Спасибо еще раз - person Izzy; 25.06.2017
comment
Что, если есть что-то на платформенных весах? - person Sir Swears-a-lot; 25.06.2017
comment
Отлично работает в Access 2000 в базе данных mdb, когда что-то находится на мосту, сбрасывает отображаемый вес в мою форму, но когда я обновился до Access 2016 (через 2010), он ничего не регистрирует... есть идеи? - person Izzy; 25.06.2017
comment
возможно, вы используете 64-разрядную версию Access? Я бы проверил и убедился, что вы используете версию x32 - person Albert D. Kallal; 26.06.2017