Wie kehre ich ein Array aus einer visuellen Foxpro 9 -Olepublic -Klasse zurück?
-
20-08-2019 - |
Frage
Als Neuling von FoxPro (aber als altes Hand bei Clipper) bin ich ein bisschen gerecht, um herauszufinden, wie man ein Array aus der folgenden Olepublic-Klasse zurückgibt. bearbeiten: Ich habe den Code Belw geändert, um die Bemerkungen von @Stuart unten zu berücksichtigen.
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
Angesichts des folgenden Bits VBScript kann ich die Datei gut öffnen. Was ich anscheinend nicht tun kann, ist, etwas Nützlicheres als eine Fehlermeldung zurückzubekommen.
set sp = createobject("sloop.db")
al = sp.opendb("p:\testing\sloop\patient.dbf")
wscript.echo sp.getrecord(al,1)
Dies ist die Fehlermeldung:
C: temp foo.vbs (3, 1) Sloop.db Sloop.db: .getRecord P: Testing Sloop Sloop.prg -Fehler In Zeile 41 Syntaxfehler. 200
Zeile 41, wie sich herausstellt, ist
RETURN @THIS.ada
Das ist wirklich seltsam, denn das ist die Syntax, die Microsoft vorschlägt. Irgendwelche Hinweise?
Lösung
Versuchen Sie 'return @ada', aber VFP -Arrays haben trotz anderer Sprachen noch nie gut mit anderen Sprachen gespielt Versuche, sie dazu zu bringen.
Andere Tipps
(5 Jahre spät, aber vielleicht immer noch nützlich für jemanden da draußen ...)
Eine bessere Option wäre, dass Ihr VFP -Code stattdessen ein Sammelobjekt erstellt, dann das Array analysiert und alle Elemente zur Sammlung hinzufügt (mit der Methode .add ()). Dann können Sie das Sammelobjekt an VB zurückgeben, was dann gerne damit spielt.
Ihr überarbeiteter Code funktioniert für mich in VFP9SP2 - ich musste als EXE erstellen, aber es gelang es, von VBScript auf Daten zuzugreifen.
Dies war mein VBScript -Code:
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))