URL: https://www.overclockers.at/coding-stuff/zugriff-auf-foxpro-tabellen-in-net-scheitert-an-th_223995/page_1 - zur Vollversion wechseln!
Der Titel ist zugegeben nicht besonders gut, aber ich wüsste nicht wie ich das Problem in wenigen Worten beschreiben sollte:
Ich soll ein Tool schreiben, dass Daten aus einer (immer noch verwendeten) Legacy Software benutzt. Diese Software wurde offenbar mit (Visual)FoxPro geschrieben.
Um auf die Daten zugreifen zu können, habe ich erstmal den Visual FoxPro OLE DB Provider installiert:
http://www.microsoft.com/downloads/...=en&pf=true
Ich kann auf die Datenbank zugreifen, soweit so gut.
Das Problem ist, einige der Tabellen wurden offenbar mit dem 3rd party FoxPro Add-On Phd Base indiziert, was sich dadurch zeigt, dass es bei diesen Tabellen zu den sonst üblichen Files:
<tablename>.dbf
<tablename>.cdx
<tablename>.fpt
dann auch noch das File
<tablename>.phd
gibt.
Das ist insofern ein Problem, dass ich auf diese Tabellen nicht zugreifen kann, weder im Code noch über den Server-Explorer von Visual Studio. Fehlermeldung ist immer, dass er das File "phd.prg" nicht finden kann.
Die Funktionalitäten des Add-Ons sind wohl in der phdbase.fll (FoxPro Dynamic-Link Library), diese Datei habe ich, doch egal wo ich sie hin kopiere (Datenbankverzeichnis, Ausführungsverzeichnis des Tools, Verzeichnis wo die vfpoledb.dll liegt, ...) das ändert nichts am Problem.
Hat irgend jemand eine Ahnung was ich wo und wie konfigurieren muss, damit dieses blöde Add-On auch zur Verfügung steht, wenn ich "von Außen" auf die Datenbank zugreife?
Die Sache hat mich schon mehr als 2 Tage Arbeit gekostet das alles erst mal heraus zu finden doch mittlerweile stehe ich mit meinem Latein bzw. der Google Suche an.
Das einzig eventuell brauchbare zu der Sache habe ich auf "Universal Thread" gefunden:
http://www.universalthread.com/Data...aspx?ID=1238479
Aber da kann man den Thread nicht ohne Account sehen. Hat jemand dort einen Account? Kann man der Seite vertrauen?
Ich mein ich finde nicht mal Infos was ich als Registrierter User kann und was der unterschied zu einer Subscription ist...
Hallo Zet,
dein Problem ist ziemlich simpel: Der OLEDB-Treiber unterstützt nur ein Subset von den möglichen FoxPro-Befehlen und Funktionen, und SET LIBRARY ist da leider nicht mit dabei. Dadurch wird die Library nicht geladen, und deshalb ist auch der dort enthaltene Funktionscode PHD() nicht verfügbar.
Die Liste der erlaubten Befehle findest du (wie üblich) in der Hilfedatei, wenn du nach OLEDB suchst: "Supported Visual FoxPro Commands and Functions in OLE DB Provider"
Warum dieser Befehl nicht unterstützt wird? Ganz einfach: Die FLL-Schnittstelle ist sehr tief mit der grossen FoxPro-Engine verzahnt, da sie z.B. auch direkt in dessen Eventloop drinhängt, und auch noch einige interne Zusatzfunktionen bereitstellt
Als Lösung könntest du dir nen COM-Server in VFP schreiben, der deine Anfragen abarbeitet; quasi ein spezialisierter OLEDB-Ersatz. Der COM-Server verwendet immer die volle Runtime, daher geht dann auch ein SET LIBRARY.
Deine Frage zur Registrierung bei UniversalThread ist ja hoffentlich nicht ernst gemeint? Ich musste mich für dieses Forum hier auch erst mal registrieren, damit ich dir ne Antwort schreiben kann....
Und dann noch so als Tipp: Spezialfragen zu Programmiersprachen stellt man am Besten in den dazu passenden Foren, da wo sich tatsächlich die FoxPro-Programmierer rumtreiben: news://news.dfpug.de oder http://forum.dfpug.de oder http://social.msdn.microsoft.com/Fo...oxprode/threads wären da die richtigen Adressen. Auf deine Frage hier hat mich Google aufmerksam gemacht, ansonsten käme ich nie auf die Idee hier reinzuschaun....
wOOdy
Servoy und Visual FoxPro Technologieberater
Microsoft "Most Valuable Professional" von 1996 bis 2009
"*´¨
¸.•´¸.•*´¨
¸.•*¨
(¸.•´. (¸.•` *
.•`.Visual FoxPro: It's magic !
(¸.•``••*
Vielen Dank für deine Antwort, auch wenn du mir nur meine Befürchtung bestätigt hast, dass ich SET LIBRARY brauche und es dafür keinen Ersatz gibt wenn ich nur über den OLEDB Provider zugreife.
Deine Lösungsidee kommt leider allein vom Aufwand her nicht in Frage. Es geht nur um ein (sehr) simples Tool, die Arbeitsstunden für einen derartigen COM-Server würden die für das Tool bei weitem übersteigen. Ganz abgesehen von der Einarbeitungszeit in VFP. Ich bin kein FoxPro Entwickler und habe auch nicht vor einer zu werden. 
Zu deiner anderen "Kritik": Es geht mir nicht um die Registrierung an sich sondern darum, wie sich die genannte Seite präsentiert. Es gibt keinerlei (oder zumindest nicht leicht auffindbar) Information über die Seite, deren Geschichte, wer Steckt dahinter. Webseiten ohne "About", "Who we are", etc. sind mir einfach mal von vornherein Suspekt. Weiters gibt es die Möglichkeit sich zu registrieren und darüber hinaus eine bezahlte Mitgliedschaft. Doch worin sich die "Leistungen" unterscheiden, steht nirgendwo. Das Unternehmen hinter der Seite, bewirbt selbige als "Produkt", auch das fördert nicht mein vertrauen, etc. etc.
Schön zu sehen, dass overclockers.at nach außen hin offenbar nicht so abschreckend ist! 
Zu deinen Tipps: Wie du an meinem Post-Count und dem Datum meiner Registrierung vielleicht erkannt hast, bin ich schon _sehr_ lange in dieser großartigen Community unterwegs und habe daher sehr gezielt hier diese Frage gestellt (immerhin ist das hier das Coding Forum von oc.at
). Du fragst ja sicherlich auch zuerst in deinem "Network" bevor du wo anders fragst, oder?
Danke jedenfalls noch einmal für deinen Input, auch wenn das für das ganze Projekt in der derzeitigen Form das Ende bedeutet.
Zet
Hallo Zet,
so ein COM-Server in VFP ist eigentlich RuckZuck geschrieben und fertig... Schnelle Anwendungsentwicklung ist ja die Stärke von VFP
Das Ding braucht ja nur ein SQL-Statement als Parameter empfangen, den laufen lassen und das Ergebnis als XML zurückschicken. Des is im Grunde ein DreiZeiler in VFP, mal schnell ausm Bauch raus:
DEFINE CLASS MeiComTest AS CUSTOM OLEPUBLIC
FUNCTION GuggstDu
LPARAMETER cSQL
EXECSCRIPT(cSQL)
CURSORTOXML("Abfrage", cResult)
RETURN cResult
ENDDEFINE
Das haste in 15min am Laufen. ... Und des mit "Legacy" will ich überhört haben, gell!
Als cSQL kannste nun beliebige VFP-Anweisungen ausführen, auch dein SET LIBRARY:
cTest = "SET LIBRARY TO PHDBASE.FLL" + CHR(13) + "SELECT * FROM BLA WHERE BLUB = 'BLEH' INTO CURSOR ABFRAGE"+CHR(13)
oTest = CREATEOBJECT("DeinComTest.MeiComTest")
? oTest.GuggstDu(cTest)
wOOdy
Servoy und Visual FoxPro Technologieberater
Microsoft "Most Valuable Professional" von 1996 bis 2009
"*´¨
¸.•´¸.•*´¨ ¸.•*¨
(¸.•´. (¸.•` *
.•`.Visual FoxPro: It's magic !
(¸.•``••*
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025