Как я могу вернуть массив из класса OLEPUBLIC Visual FoxPro 9? - PullRequest
1 голос
/ 02 февраля 2009

Будучи новичком в FoxPro (но раньше он работал в Clipper), я немного затрудняюсь понять, как вернуть массив из следующего класса OLEPUBLIC. edit : я изменил код, чтобы учесть замечания, сделанные @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

, что действительно странно, так как это синтаксис, который предлагает Microsoft. Любые подсказки?

Ответы [ 3 ]

2 голосов
/ 10 июля 2014

(с опозданием на 5 лет, но, возможно, все еще полезно кому-то там ...)

Лучшим вариантом было бы, чтобы ваш код VFP вместо этого создал объект Collection, затем проанализировал массив и добавил все элементы в коллекцию (используя метод .Add ()). Затем вы можете передать объект коллекции обратно в VB, который затем с удовольствием поиграет с ним.

0 голосов
/ 03 февраля 2009

Ваш исправленный код работает для меня в 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))
0 голосов
/ 02 февраля 2009

Попробуйте 'return @ada', но массивы VFP никогда не играли хорошо с другими языками, несмотря на попытки заставить их сделать это .

...