Pregunta

Como novato en FoxPro (pero veterano en Clipper), estoy un poco perdido para descubrir cómo devolver una matriz de la siguiente clase OLEPUBLIC. edit : modifiqué el siguiente código para tener en cuenta las observaciones hechas por @Stuart a continuación.

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

Dado el siguiente bit de VBScript, puedo abrir bien el archivo. Lo que parece que no puedo hacer es recuperar algo más útil que un mensaje de error.

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

Este es el mensaje de error:

  

c: \ temp \ foo.vbs (3, 1) sloop.db sloop.db: .getrecord p: \ testing \ sloop \ sloop.prg Error en la línea 41 Error de sintaxis. 200

La línea 41, como resulta, es

      RETURN @THIS.ada

que es realmente extraño ya que esa es la sintaxis que sugiere Microsoft. ¿Alguna pista?

¿Fue útil?

Solución

Intente 'return @ada', pero las matrices VFP nunca han jugado bien con otros idiomas a pesar de intenta hacer que lo hagan .

Otros consejos

(5 años de retraso, pero quizás aún útil para alguien por ahí ...)

Una mejor opción sería hacer que su código VFP creara un objeto Colección, luego analizar la matriz y agregar todos los elementos a la colección (usando el método .Add ()). Luego puede pasar el objeto de colección de nuevo a VB, que luego estará feliz de jugar con él.

Su código revisado funciona para mí en VFP9SP2: tuve que compilar como EXE pero logré acceder a los datos de VBSCript.

Este fue mi código 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))
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top