1

作为 FoxPro 的新手(但 Clipper 的老手),我有点不知所措,不知道如何从以下 OLEPUBLIC 类返回数组。编辑:我已经修改了下面的代码,以考虑下面@Stuart 所做的评论。

DEFINE CLASS db AS CUSTOM OLEPUBLIC

    DIMENSION ada(1) && public scope for later return

    FUNCTION opendb( cpName )
        SET MULTILOCKS ON
        USE (cpName) EXCLUSIVE NOUPDATE
        = CURSORSETPROP("Buffering",5)
        RETURN ALIAS()
    ENDFUNC

    && etc

    FUNCTION getrecord( sAlias, nRecno )
        SELECT (sAlias)
        GOTO (nRecno)
        fc = FCOUNT()
        DIMENSION this.ada(fc)
        FOR i = 1 TO fc
            STORE CURVAL(FIELD(i)) to THIS.ada(i)
        ENDFOR
        RETURN @THIS.ada
    ENDFUNC
ENDDEFINE

鉴于以下 VBScript,我可以很好地打开文件。我似乎无法做的是取回比错误消息更有用的东西。

set sp = createobject("sloop.db")
al = sp.opendb("p:\testing\sloop\patient.dbf")
wscript.echo sp.getrecord(al,1)

这是错误消息:

c:\temp\foo.vbs(3, 1) sloop.db sloop.db: .getrecord p:\testing\sloop\sloop.prg 第 41 行错误语法错误。200

事实证明,第 41 行是

      RETURN @THIS.ada

这真的很奇怪,因为这是微软建议的语法。有什么线索吗?

4

3 回答 3

2

(晚了 5 年,但也许对那里的人仍然有用......)

更好的选择是让您的 VFP 代码创建一个 Collection 对象,然后解析数组并将所有元素添加到集合中(使用 .Add() 方法)。然后您可以将集合对象传回给 VB,VB 很乐意使用它。

于 2014-07-10T08:42:58.863 回答
0

尝试'return @ada',但 VFP 数组从未与其他语言很好地配合,尽管试图让它们这样做

于 2009-02-02T19:08:52.023 回答
0

您修改后的代码在 VFP9SP2 中对我有用 - 我必须构建为 EXE,但设法从 VBSCript 访问数据。

这是我的 VBScript 代码:

set sp = createobject("stack1.db") ' Different project name
al = sp.opendb("C:\WORK\VFP\DATABASES\DATA\DATA.DBF")
arrData = sp.getrecord(al,1)
msgbox(arrData(1))
于 2009-02-03T20:02:25.520 回答