【问题标题】:Accessing Visual FoxPro COM server from VB 6.0从 VB 6.0 访问 Visual FoxPro COM 服务器
【发布时间】:2012-03-25 09:51:14
【问题描述】:

此问题与 Visual basic 6.0 (SP 6) 中 VFP COM 服务器的使用有关。

代码(相关)

Private moVFPServer As f_vfpsvr.VFPServer

在潜艇中:

Dim oRec As f_vfpsvr.VFPRecord 
Set oRec = moVFPServer.NewRecord("LoanMstr")    
With oRec    
  .SetField "ssn", sSSN    
  .SetField "awdyr", sAwardYear    
  .SetField "tran_date", Format(Now, "mm/dd/yyyy")    
  .Commit    
End With

来自 moVFPServer 的方法“NewRecord”返回一个对象,该对象表示 VFP 表“LoanMstr”中的一个新的空记录。

以下代码用于填充属性/字段并保存数据。

如果 VFP COM 服务器是使用 VFP 8.0 构建的,并且在使用 VFP 9.0 构建时不起作用,所有这些都可以工作。

具体来说,VB 应用程序在代码行出错:

Set oRec = moVFPServer.NewRecord("StdMstr")

COM 服务器抛出异常:自动化错误 -2147417851。

这发生在同一台机器上。

【问题讨论】:

  • 从 VFP 9 调用 COM 对象是否工作?
  • -2147417851 = 0x80010105 = "服务器抛出异常"。你的 foxpro 代码崩溃了。
  • Tamar,我检查了,它在 VFP 8 或 VFP 9 上的 VFP 开发环境中不起作用。
  • 汉斯,它确实崩溃了。关键是代码是由 COM 服务器中的方法执行的,并且恰好在对象返回给调用的 VB 程序时崩溃。
  • 顺便说一句,VFPServer 中的 NewRecord 方法调用了另一个方法,该方法又根据位于同一 DLL 中的类 VFPRecord 实例化对象。如果有人想知道 NewRecord 方法的工作原理,我将通过电子邮件发送包含类的程序。它很短很干净。

标签: com visual-foxpro


【解决方案1】:

VFP 构建的 COM 对象有时会表现得有些奇怪,尤其是在将错误滴入堆栈时。

但是这似乎很奇怪,只有在 VFP9 中才会出现。我相信在 8 到 9 之间的数据库中发生了一些重大变化,您可能已经遇到了其中之一?

VFP 代码中是否有 ERROR 函数?如果没有,请尝试在其中设置一些错误属性并在收到错误时在 VB 中查询它们?

也就是说,我们有类似的东西

FUNCTION ERROR(nError, cMethod, nLine)
    THIS.cErrDesc = "Error Number: " + TRANSFORM(nError) + CRLF + "Message: " + MESSAGE() + CRLF  + "Method: " + cMethod + CRLF  + "Line #: " + TRANSFORM(nLine)

    COMRETURNERROR(cMethod, THIS.cErrDesc)

ENDFUNC

【讨论】:

  • 我会尝试实现 ERROR 功能。我使用日志来跟踪程序(COM 服务器)中发生崩溃的点。实际上COM服务器方法中的所有代码行都正确执行,直到对象返回给调用程序。
  • @Paul,在不知道结果记录结构的情况下,我会考虑查看返回的数据类型。您是否有任何可能是 VFP8 和 9 问题的 General、Memo、Currency 或其他列,如果有,请尝试一次删除一个 TYPE 或全部删除它们,然后逐渐将列添加到返回的集合中。最简单的测试,尝试将单列的对象返回为 char 或 int。如果 THAT 崩溃了,那么其他的都无关紧要。
  • 感谢 DRapp 的创意。实际上所有字段都是字符串或日期类型。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多