"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

Zugriff auf FoxPro Tabellen in .NET scheitert an third-party add-on?

Mr. Zet 12.05.2011 - 14:40 3218 3 Thread rating
Posts

Mr. Zet

Super Moderator
resident spacenerd
Avatar
Registered: Oct 2000
Location: Edge of Tomorrow
Posts: 12040
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...:rolleyes:

woody-soft

Bloody Newbie
Registered: May 2011
Location: germany
Posts: 2
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 !
(¸.•``••*

Mr. Zet

Super Moderator
resident spacenerd
Avatar
Registered: Oct 2000
Location: Edge of Tomorrow
Posts: 12040
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

woody-soft

Bloody Newbie
Registered: May 2011
Location: germany
Posts: 2
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 !
(¸.•``••*
Bearbeitet von woody-soft am 13.05.2011, 18:36
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz