Domanda

Come principiante di FoxPro (ma un esperto di Clipper), sono un po 'perplesso per capire come restituire un array dalla seguente classe OLEPUBLIC. modifica : ho modificato la cintura del codice per prendere in considerazione le osservazioni fatte da @Stuart di seguito.

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

Dato il seguente bit di VBScript, posso aprire bene il file. Quello che non riesco a fare è restituire qualcosa di più utile di un messaggio di errore.

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

Questo è il messaggio di errore:

  

c: \ temp \ foo.vbs (3, 1) sloop.db sloop.db: .getrecord p: \ testing \ sloop \ sloop.prg Errore nella riga 41 Errore di sintassi. 200

La riga 41, a quanto pare, è

      RETURN @THIS.ada

che è davvero strano in quanto è la sintassi suggerita da Microsoft. Qualche indizio?

È stato utile?

Soluzione

Prova 'return @ada', ma gli array VFP non hanno mai funzionato bene con altre lingue nonostante tenta di farlo .

Altri suggerimenti

(5 anni di ritardo, ma forse ancora utile per qualcuno là fuori ...)

Un'opzione migliore sarebbe che il tuo codice VFP crei invece un oggetto Collection, quindi analizzi l'array e aggiunga tutti gli elementi alla collection (usando il metodo .Add ()). Quindi puoi restituire l'oggetto della raccolta a VB, che è felice di giocarci.

Il tuo codice modificato funziona per me in VFP9SP2 - Ho dovuto creare un file EXE ma sono riuscito ad accedere ai dati da VBSCript.

Questo era il mio codice 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))
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top