TParadoxDataSet: Illegal type conversion "PChar" to "PtrRec"

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Ich934
Lazarusforum e. V.
Beiträge: 316
Registriert: So 5. Mai 2019, 16:52
OS, Lazarus, FPC: ArchLinux und Windows mit FPCUPdeluxe (L: 2.0.X, FPC 3.2.0)
CPU-Target: x86_64, i386
Wohnort: Bayreuth

TParadoxDataSet: Illegal type conversion "PChar" to "PtrRec"

Beitrag von Ich934 »

Guten Morgen,

ich versuche aktuell ein Projekt zu erstellen, dass alte Paradox Datenbanken einlesen und dann für die Vorbereitung auf ein neues Projekt in SQLite überführen soll. Von der Theorie her ist das Ganze kein Problem.

Praktisch stehe ich vor dem Problem, das sich die Komponente "TParadoxDataSet" nicht kompilieren lässt. Ich bleibe mit folgenden Fehlern hängen:

Code: Alles auswählen

paradox.pas(185,15) Note: Virtual method "SetFieldData(TField;Pointer);" has a lower visibility (protected) than parent class TDataSet (public)
paradox.pas(349,7) Error: Illegal type conversion: "PChar" to "PtrRec"
paradox.pas(350,7) Error: Illegal type conversion: "PChar" to "PtrRec"
paradox.pas(351,7) Error: Illegal type conversion: "PChar" to "PtrRec"
paradox.pas(352,7) Error: Illegal type conversion: "PChar" to "PtrRec"
paradox.pas(354,9) Error: Illegal type conversion: "PChar" to "PtrRec"
paradox.pas(376,11) Error: Illegal type conversion: "PChar" to "PtrRec"
paradox.pas(377,11) Error: Illegal type conversion: "PFldInfoRec" to "PtrRec"
paradox.pas(585,13) Error: Illegal type conversion: "PChar" to "PtrRec"
paradox.pas(587,13) Error: Illegal type conversion: "PChar" to "PtrRec"
paradox.pas(588,11) Error: Illegal type conversion: "PFldInfoRec" to "PtrRec"


Der Eintrag dazu hier im Forum (https://www.lazarusforum.de/viewtopic.php?f=2&t=9668&p=85118&hilit=paradox#p85118) hat mir hier auch nicht weiter geholfen. Mehr Einträge dazu hab ich nicht gefunden.

Das Problem hab ich auf allen drei Systemen von mir. Also scheint es etwas grundlegendes zu sein. Zwei Systeme sind ArchLinux Systeme mit Lazarus aus dem Repo. Das dritte System ist ein Windows 10 Enterprise x64 mit Lazarus 2.0.2 (64-Bit).

Es kann doch eigentlich nicht sein, dass eine Typkonvertierung an der 64-Bit Version scheitert? Hat hier jemand eine Idee? Vielen Dank und schöne Grüße
Tipp für PostgreSQL: www.pg-forum.de

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: TParadoxDataSet: Illegal type conversion "PChar" to "Ptr

Beitrag von wp_xyz »

Nachdem Paradox eine uralte Datenbank aus DOS- und Windows3.1-Zeiten ist, könnte ich mir vorstellen, dass es die benötigten DLLs (siehe den von dir zitierten Forumbeitrag) nicht für 64-Bit gibt. Bei mir kann unter den 64-Bit-Versionen von Laz/trunk und Laz 2.0.2 das Package ebenfalls nicht übersetzt werden ("regparadox.pp(19,65) Fatal: Kann paradox nicht finden verwendet von regparadox von Package lazparadox"), unter den 32-Bit-Versionen von Laz/trunk und 2.0.0 dagegen problemlos.

Ich934
Lazarusforum e. V.
Beiträge: 316
Registriert: So 5. Mai 2019, 16:52
OS, Lazarus, FPC: ArchLinux und Windows mit FPCUPdeluxe (L: 2.0.X, FPC 3.2.0)
CPU-Target: x86_64, i386
Wohnort: Bayreuth

Re: TParadoxDataSet: Illegal type conversion "PChar" to "Ptr

Beitrag von Ich934 »

Naja aber unter Linux habe ich diese auf jeden Fall zur Verfügung. Und das Problem ist ja diese Konvertierung im TParadoxDataSet.

Ich wüsste jetzt nicht mal, wie ich unter Arch Lazarus für 32-Bit kompilieren könnte...
Tipp für PostgreSQL: www.pg-forum.de

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: TParadoxDataSet: Illegal type conversion "PChar" to "Ptr

Beitrag von af0815 »

Gibt es unter Archlinux ander Programme die Paradoxdateien lesen können ?! Wenn ja, mal nachsehen, was die für einen Zugriffsweg benutzen.

Unter Windows kann man alternativ ODBC verwenden - allerdings auch nur 32 bit.

Lazarus kann auf 32 Bit crosscompilieren, wenn der entsprechende Crosscompiler und die Bibliotheken da sind. FPCUpDeluxe kann da dein Freund werden.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: TParadoxDataSet: Illegal type conversion "PChar" to "Ptr

Beitrag von wp_xyz »

Missverständnisse...

Hab' nur Windows ausprobiert, das aber nicht erwähnt.

Jetzt habe ich unter dem 64-Bit Ubuntu 18.04 die Komponente übersetzt. Kein Problem. Seltsamerweise finde ich in der paradox.pas nirgendwo den Bezeichner PtrRec. Diese Unit gehört zum Package "lazparadox.lpk" im Verzeichnis components/paradox der Lazarus-Installation. Auf CCR gibt es allerdings noch eine weiteres lazparadox-Package, das im Ordner TParadoxDataSet - so wie du es erwähnt hast, was ich aber überlesen habe. Dort gibt es ja wüste Pointer-"Schweinereien"! Da müsste man sich mal in Ruhe reindenken...

Aber warum nimmst du nicht die Komponente, die mit Lazarus mitkommt, also die im Ordner components/paradox. Wiegesagt, diese lässt sich auch unter 64-Bit Linux kompilieren und installieren (allerdings nicht unter 64-bit Windows). Ob sie wirklich eine Datei lesen kann, weiß ich nicht, weil ich keine Paradox-Datei mehr herumliegen habe.

Ich934
Lazarusforum e. V.
Beiträge: 316
Registriert: So 5. Mai 2019, 16:52
OS, Lazarus, FPC: ArchLinux und Windows mit FPCUPdeluxe (L: 2.0.X, FPC 3.2.0)
CPU-Target: x86_64, i386
Wohnort: Bayreuth

Re: TParadoxDataSet: Illegal type conversion "PChar" to "Ptr

Beitrag von Ich934 »

Hm, die Komponente hab ich gar nicht gesehen bzw. war gar nicht vorhanden. Hab ich jetzt manuell aus dem Programm-Zip extrahiert. Schau mir das jetzt mal direkt an. Vielen Dank auf jeden Fall! Einbinden hat sich diese auf jeden Fall schon einmal lassen.
Tipp für PostgreSQL: www.pg-forum.de

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: TParadoxDataSet: Illegal type conversion "PChar" to "Ptr

Beitrag von wp_xyz »

Habe gerade im Netz einige PDX Dateien gefunden (https://github.com/teverett/paradoxRead ... s/examples). Ja, die getestete Contacts.db wird mit der Komponente in components/paradox sauber im DBGrid dargestellt (zumindest unter Windows).

Ich934
Lazarusforum e. V.
Beiträge: 316
Registriert: So 5. Mai 2019, 16:52
OS, Lazarus, FPC: ArchLinux und Windows mit FPCUPdeluxe (L: 2.0.X, FPC 3.2.0)
CPU-Target: x86_64, i386
Wohnort: Bayreuth

Re: TParadoxDataSet: Illegal type conversion "PChar" to "Ptr

Beitrag von Ich934 »

Vielen Dank erst einmal - ich nutz jetzt einfach das bei Lazarus dabei ist. Das scheint zu funktionieren. Unter Windows bekomme ich das nicht hin (also die Komponente) aber unter Linux läuft es und das Crosscompiling scheint auch zu laufen. Da ich das nur für das Konverterprogramm benötige ist das kein Problem und ich kann damit leben.

Schöne Grüße
Tipp für PostgreSQL: www.pg-forum.de

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: TParadoxDataSet: Illegal type conversion "PChar" to "Ptr

Beitrag von wp_xyz »

Das Problem unter Windows ist, dass es die pdxlib.dll in https://forum.lazarus.freepascal.org/in ... ic=26863.0 nur als 32-bit-Version verlinkt ist, und es offenbar auch der Autor der Lib es nicht geschafft hat, die DLL unter Windows zu erzeugen (http://pxlib.sourceforge.net/installation.php).

Interessant wäre es schon, die von dir ursprünglich verwendete Komponente aus CCR zum Laufen zu bringen, denn diese benötigt gar keine DLL. Allerdings ist der Quellcode nur für 32-Bit geeignet. Schon der Paradox-Header enthält in dem Record einige Pointer-Elemente, und Pointer sind auf 64-Bit eben größer als auf 32-Bit, d.h. die gesamte Record-Struktur kommt durcheinander. Man müsste sich mal in Ruhe hinsetzen und das alles auseinanderdividieren...

Ich934
Lazarusforum e. V.
Beiträge: 316
Registriert: So 5. Mai 2019, 16:52
OS, Lazarus, FPC: ArchLinux und Windows mit FPCUPdeluxe (L: 2.0.X, FPC 3.2.0)
CPU-Target: x86_64, i386
Wohnort: Bayreuth

Re: TParadoxDataSet: Illegal type conversion "PChar" to "Ptr

Beitrag von Ich934 »

Naja ich hab hier heute auf Windows extra ein 32-Bit Lazarus installiert. Aber auch das hat keinen Erfolg gebracht. Ich hatte dann aber auch keine Zeit, mich damit näher zu beschäftigen. Ist jetzt egoistisch :mrgreen: aber für mein Konverterprogramm ist es egal, ob dieses eine 32-Bit oder 64-Bit Applikation ist. Die Menge an Daten werden hier nicht bewegt als das dies zu einem Problem werden könnte.

Die neue Anwendung läuft dann mit SQLite und da kann ich ja dann sauber nativ arbeiten. Vielleicht wenn ich mal viel Zeit und Lust habe... :roll:
Tipp für PostgreSQL: www.pg-forum.de

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: TParadoxDataSet: Illegal type conversion "PChar" to "Ptr

Beitrag von wp_xyz »

Ich934 hat geschrieben:Naja ich hab hier heute auf Windows extra ein 32-Bit Lazarus installiert. Aber auch das hat keinen Erfolg gebracht.

Wo hast du das Package denn her? Das von mir verwendete, vom Lazarus CCR stammende (https://sourceforge.net/p/lazarus-ccr/s ... oxdataset/) funktioniert. Und nachdem sich anscheinend niemand mehr um das Package kümmert, habe ich mir erlaubt, es auch für 64-Bit auf Vordermann zu bringen; außerdem wurde die Package-Datei in lazparadoxpkg umbenannt, so dass es mit dem in Lazarus bereits vorhandenen, bisher gleichnamigen Package koexistieren kann.

Wiegesagt, Vorteil von lazparadoxpkg ist, dass keine externen DLLs benötigt werden. Allerdings stürzt es bei einigen meiner Testfiles ab, und es kann keine BLOB-Felder (Memos, Bilder). Dafür versagt das in Lazarus vorhandene lazparadox bei den für Delphi mitgelieferten Paradox-Dateien am Original-Speicherort (in einen anderen Ordner kopiert geht's dann doch - dem will ich jetzt nicht nachgehen...).

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: TParadoxDataSet: Illegal type conversion "PChar" to "Ptr

Beitrag von Warf »

wp_xyz hat geschrieben:Missverständnisse...

Hab' nur Windows ausprobiert, das aber nicht erwähnt.

Jetzt habe ich unter dem 64-Bit Ubuntu 18.04 die Komponente übersetzt. Kein Problem. Seltsamerweise finde ich in der paradox.pas nirgendwo den Bezeichner PtrRec. Diese Unit gehört zum Package "lazparadox.lpk" im Verzeichnis components/paradox der Lazarus-Installation. Auf CCR gibt es allerdings noch eine weiteres lazparadox-Package, das im Ordner TParadoxDataSet - so wie du es erwähnt hast, was ich aber überlesen habe. Dort gibt es ja wüste Pointer-"Schweinereien"! Da müsste man sich mal in Ruhe reindenken...

Aber warum nimmst du nicht die Komponente, die mit Lazarus mitkommt, also die im Ordner components/paradox. Wiegesagt, diese lässt sich auch unter 64-Bit Linux kompilieren und installieren (allerdings nicht unter 64-bit Windows). Ob sie wirklich eine Datei lesen kann, weiß ich nicht, weil ich keine Paradox-Datei mehr herumliegen habe.

Ubuntu 18.04 ist soweit ich weiß eine LTS Version, die packages in den apt repositories sind also sehr stabil, anders ausgedrückt, seit Jahren out of date. Wenn du das Lazarus aus den repos verwendet ist das wahrscheinlich noch Version 1.6.4 oder 1.8, eventuell solltest du mal den Package Source von ner alten laz Version unter arch versuchen

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: TParadoxDataSet: Illegal type conversion "PChar" to "Ptr

Beitrag von wp_xyz »

Nein, ich habe da eine mit fpcupdeluxe installierte Trunk-Version (allerdings schon länger nicht mehr upgedatet).

Ich934
Lazarusforum e. V.
Beiträge: 316
Registriert: So 5. Mai 2019, 16:52
OS, Lazarus, FPC: ArchLinux und Windows mit FPCUPdeluxe (L: 2.0.X, FPC 3.2.0)
CPU-Target: x86_64, i386
Wohnort: Bayreuth

Re: TParadoxDataSet: Illegal type conversion "PChar" to "Ptr

Beitrag von Ich934 »

Guten Morgen,

sorry für die späte Antwort. Ich war die vergangenen Tage etwas verhindert...

Hm, ich habe das Package von Sourceforge und zwar über den Link aus dem Wiki (wenn ich jetzt nicht falsch lieg): http://wiki.freepascal.org/TParadoxDataSet

Ich muss gestehen, ich habe dort aber nicht weiter geprüft, ob es neuere Versionen gibt. Ich werde das jetzt einmal testen. Das mit Ubuntu kann sein. Durch mein Arch habe ich natürlich immer sehr aktuelle Versionen (Rolling Release). Nur bei Lazarus schläft aktuell der Maintainer...

cu tb
Tipp für PostgreSQL: www.pg-forum.de

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: TParadoxDataSet: Illegal type conversion "PChar" to "Ptr

Beitrag von af0815 »

Ich934 hat geschrieben:.. Nur bei Lazarus schläft aktuell der Maintainer...


Mit FPCUpDeluxe brauchst du keinen Maintainer und kannst dir selbst soviele verschiedene Versionen parallel am Rechner holen wie du willst. Ausserdem vereinfacht es das Setup von Crosscompiler sehr stark. Das meiste gibt es 'Out of the box'. Ich verwende keine 'Standardinstallationen' sondern nur welche über FPCUpDeluxe. Vor allen, wenn ich ein Update in trunk mache und draufkomme das es gerade nicht so gut geht, rolle ich die Versionen zurück (Merken muss man sich halt die aktuelle lauffähige).
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Antworten