【问题标题】:Upgrade Access 2000 to 2010 then 2016 VB question将 Access 2000 升级到 2010 然后 2016 VB 问题
【发布时间】:2017-11-29 12:00:35
【问题描述】:

请帮助...我已成功从 Access 2000 升级到 2010,然后升级到 2016,没有编译错误,但是我在 VB 代码的表单中有一个 exe 文件,它不再运行或发送错误消息。该项目是一个地磅,已经在 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

【问题讨论】:

  • “在表单中包含 exe 文件”是什么意思?
  • 感谢回复,这是触发exe的事件过程。
  • 设置 objFrmCtrl = Forms!ConsignmentsContract.TareWeight Warning.Caption = "Get Tare Weight 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) If Err.Number = 53 And GrossValue = 0 Then MsgBox "Can't find program 'Weight.exe'", vbInformation, "Alert" End If
  • 抱歉,我尝试粘贴信息,但效果不佳。
  • 这个问题如果移到 StackOverflow 上可能会得到最好的回答。它实际上不涉及数据库设计,而是使用 Access 和 VBA 进行编程

标签: ms-access ms-access-2010 ms-access-2016


【解决方案1】:

根据documentation for SHELL

运行一个可执行程序,如果成功则返回一个 Variant (Double) 表示程序的任务 ID,否则返回零。

您的代码得到一个task ID,而不是执行 .exe 程序的结果(如果没有其他方法阻止执行)。所以,在任何情况下,你都不应该期望得到这个程序生成的值。

您应该使用调试工具进入这个Sub 并真正弄清楚它的作用。

检查Alternative to Call Shell() ? (2000) 是否可以帮助您,还有Access 2000 to 2002 (Shell command)

Shell 函数似乎在很久以前就发生了变化。

【讨论】:

  • 我已经逐步完成了该程序,并在 2016 年进入了 exe,但继续运行,就好像它不存在一样,结果为空白。我会对你给我的东西做更多的研究。谢谢你的耐心。我的 Access 2000 MDB 总是返回一个结果,即如果地磅上什么都没有,那么我得到一个零,但 2016 年结果为空白。再次感谢
  • 如果地磅上有东西怎么办?
  • 当桥上有东西时,在 mdb 数据库中的 Access 2000 中完美运行将显示的重量转储到我的表单中,但是当我更新到 Access 2016(通过 2010)时,它没有注册任何东西......有什么想法吗?
  • 也许您运行的是 x64 位版本的 Access?我会检查并确保您运行的是 x32 版本
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-16
  • 2012-11-03
  • 2012-04-21
  • 2023-03-14
  • 1970-01-01
  • 2014-05-10
相关资源
最近更新 更多