2009-02-02 2 views
1

Как новичок в FoxPro (но старая рука в Clipper), я немного не понимаю, как вернуть массив из следующего класса OLEPUBLIC. Редактировать: Я изменил код belw, чтобы принять во внимание замечания, сделанные @Stuart ниже.Как вернуть массив из класса OLEPUBLIC Visual FoxPro 9?

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 р: \ тестирование \ шлюп \ шлюп. prg Ошибка в строке 41 Синтаксическая ошибка. 200

линия 41, как выясняется, является

 RETURN @THIS.ada 

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

ответ

0

Попробуйте «вернуть @ada», но массивы VFP никогда не играли хорошо с другими языками, несмотря на то, что attempts to make them do so.

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)) 
+0

Я только что понял, что я все еще использую VFP6. Это была моя старая машина, которая была v9. Embarrassment ++ – bugmagnet

2

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

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

+0

Этот вопрос уже дан. – PKlumpp

+1

Возможно, так, но, как указал сам @Stuartd, это не идеальное решение, поэтому я предлагал альтернативный подход. Хотя «Boost» вряд ли выиграет от этого, другие посетители, посетившие эту страницу в будущем, могут. –

+1

Boost считает, что комментарий хорошо сделан и желает, чтобы он подумал об этом. Спасибо @KeithTrangmar! – bugmagnet