¿Cómo devuelvo una matriz de una clase OLEPUBLIC de Visual FoxPro 9?
-
20-08-2019 - |
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?
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))