DBF zu PostgreSQL

Hier dreht es sich um den PostGre Server

Moderator: Moderatoren

Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: DBF zu PostgreSQL

Beitrag von Werner_Bayern »

Carlo,

wo gibt es eigentlich die
libpg4xb
?
es grüßt

Werner

<when the music is over, turn off the lights!>
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: DBF zu PostgreSQL

Beitrag von ramses »

Servus Werner

Bis jetzt gab es Funtionen ohne Beschreibung bezw. mit dem Kürzel TBD jetzt gibts Beschreibungen die mehr Beschreiben als tatsächlich geht.

Jugend forscht, simulieren oder herauszufinden was geht jetzt oder doch nicht geht oder am schlimmsten in der finalen Version dann doch noch ganz anders geht ist nicht so mein Ding.

Die meisten Resultate benötige ich als Array, für Datatables, genauer als Json formatiertes Array da ist der Umweg bezw. die jetzt funktionierende Read-Only DBF ein grosser Umweg Zahlen und Zeichen müssen konvertiert werden und zum Schreiben dies gleich doppelt. Zudem fehlen die Funktionen um ein String in ein in die Datenbank schreibbares Format zu bringen in Xbase völlig. Stichwort z.B. Apostroph

Die Arbeit ist jetzt da, die Funktionen auch: Native ...... mit guter Dokumentation in Deutscher Sprache ..... leider wird heute rüplelhaft alles nur noch in Englisch dokumentiert Alaska ist hier keine Ausnahme scheinbar ist dies eine "Zeiterscheinung"


Gruss Carlo
Zuletzt geändert von ramses am Do, 13. Jul 2017 17:44, insgesamt 1-mal geändert.
Valar Morghulis

Gruss Carlo
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: DBF zu PostgreSQL

Beitrag von ramses »

Werner schau mal hier:

viewtopic.php?f=24&t=8564
Valar Morghulis

Gruss Carlo
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: DBF zu PostgreSQL

Beitrag von Werner_Bayern »

Danke.
Gibt's dazu eine Doku?
es grüßt

Werner

<when the music is over, turn off the lights!>
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: DBF zu PostgreSQL

Beitrag von ramses »

Servus Werner

nein keine direkte. Du findest jedoch gute Beschreibungen der libpq deren Funktionen ja verwendet werden.

Gruss Carlo
Valar Morghulis

Gruss Carlo
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: DBF zu PostgreSQL

Beitrag von AUGE_OHR »

Werner_Bayern hat geschrieben: Do, 13. Jul 2017 17:39 Gibt's dazu eine Doku?
es gibt doch auf der Website von PostgreSQL ein PDF was dem Buch entspricht.

zur libpq.dll gibt es ein extra Kapitel welche auf die Functionen eingehen ... aber das ist ja "nur" für die Connection.
gruss by OHR
Jimmy
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: DBF zu PostgreSQL

Beitrag von Werner_Bayern »

ramses hat geschrieben: Do, 13. Jul 2017 17:43 Servus Werner

nein keine direkte. Du findest jedoch gute Beschreibungen der libpq deren Funktionen ja verwendet werden.

Gruss Carlo
Ich meinte zu der Klasse, den Methoden. Da ist ja z. B. ein uraltes Tbrowse-Beispiel dabei.
es grüßt

Werner

<when the music is over, turn off the lights!>
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: DBF zu PostgreSQL

Beitrag von ramses »

Servus Werner

Nein eine Beschreibung der Klasse habe ich damals nicht gefunden.

Für mich war es das beste eine eigene Klasse zu schreiben die meinen Wünschen entsprach und mir meine benötigten Funktionen zur Arbeit mit DataTables bezw. Web-Apps bereit stellt.
Die libpq4xb stellt dir einfach die PQ Funktionen zur Verwendung in Xbase zur Verfügung.

Gruss Carlo
Valar Morghulis

Gruss Carlo
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: DBF zu PostgreSQL

Beitrag von ramses »

Hallo
Beim ausführen der .exe kommt bei mir immer die Fehlermeldung "Unable to load libpq.dll",
ich habe die .dll jedoch in den Ordner reinkopiert.
habe heute eine App mit allen DLL's auf einen anderen Rechner kopiert und genau auch diese Fehlermeldung bekommen. Die libpq ist die aktuelle Version 9.6.3. Ich habe dann herausgefunden dass die "Visual C++ 2013 C Runtime" installiert sein muss damit die libpq geladen werden kann.

Der Geschwindigkeitsvorteil von PG gegenüber ADS ist schon gewaltig.
Die App benötigt über die ADSDBE und einem ADS-Server 30 Stunden um eine Aufgabe auszuführen.(Ohne Filter, nur SeeK)

Mit auf natives PG umgeschriebender App ist die selbe Aufgabe nach 6 Stunden erledigt.

Aufbau ADS: <Server mit (ADS) Win 2012R2 auf ML350> <------ <PC mit APP> <------- <Server Freebsd (Daten) auf ML350>

Aufbau PG: <PC mit APP> <-----> <Server Freebsd (Daten und PG-Datenbank) auf ML350>

Ich hätte nie gedacht dass solche Unterschiede möglich sind!

Gruss Carlo
Valar Morghulis

Gruss Carlo
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: DBF zu PostgreSQL

Beitrag von Werner_Bayern »

ramses hat geschrieben: Fr, 21. Jul 2017 18:06 Aufbau ADS: <Server mit (ADS) Win 2012R2 auf ML350> <------ <PC mit APP> <------- <Server Freebsd (Daten) auf ML350>

Aufbau PG: <PC mit APP> <-----> <Server Freebsd (Daten und PG-Datenbank) auf ML350>

Ich hätte nie gedacht dass solche Unterschiede möglich sind!
Servus Carlo,

verstehe ich das richtig: Im 1. Fall holt sich dein Xbase++-Prog Daten von Freebsd, wertet die aus und schickt sie dann an den ADS?
Im 2. Fall holt und schickt sie vom Freebsd? Es fällt hier also die Kommunikation mit einem 2. SQL-Server weg?
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: DBF zu PostgreSQL

Beitrag von AUGE_OHR »

ramses hat geschrieben: Fr, 21. Jul 2017 18:06 habe heute eine App mit allen DLL's auf einen anderen Rechner kopiert und genau auch diese Fehlermeldung bekommen. Die libpq ist die aktuelle Version 9.6.3. Ich habe dann herausgefunden dass die "Visual C++ 2013 C Runtime" installiert sein muss damit die libpq geladen werden kann.
hattest du nur die libpq.DLL kopiert oder alle DLLs aus dem PostgreSQL\BIN Verzeichnis ?
gruss by OHR
Jimmy
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: DBF zu PostgreSQL

Beitrag von ramses »

Hallo Jimmy

ich habe ein ganzen Verzeichniss auf eine andere neu aufgesetzte Maschine kopiert, In diesem Verzeichnis waren die EXE sowie ALLE Xbase Runtimes und alle Postges DLL (alle aus dem ..\bin Verzeichnis)

Auf der Ursprungsmaschine ist es einwandfrei gelaufen obwohl da KEIN Postgres Admin usw. installiert war.

Auf der neuen Maschine konnte die libPQ (9.6.3) wie erwähnt nicht geladen werden.

Nach einigem Suchen und vergleichen kam die Errinnerung dass einige andere Programme (nicht Xbase) meist auch die VC Runtime installieren.
Die VC installiert --> Programm lief --> VC desinstalliert --> Fehlermeldung

Gruss Carlo
Valar Morghulis

Gruss Carlo
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: DBF zu PostgreSQL

Beitrag von ramses »

Hallo Werner

ja. Der ADS Server ist auf einem Windows Server. Alle Daten und der Postgres auf einem FreeBSD.

Obwohl eine ganze Maschine für ADS bereitsstand und nur die Datenbank darauf lief war die Lösung mit Postgres + Daten auf FreeBSD schneller obwohl dieser neben der Danbankverwaltung noch die Daten einige Mio. Files öffnen/lesen musste.

Gruss Carlo
Valar Morghulis

Gruss Carlo
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: DBF zu PostgreSQL

Beitrag von Werner_Bayern »

PostgreSQL benötigt die VC-Runtime, auch z. B. das pgadmin. Darauf scheint alles aufgebaut zu sein, also auch die Schnittstellen.
es grüßt

Werner

<when the music is over, turn off the lights!>
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: DBF zu PostgreSQL

Beitrag von ramses »

Servus Werner

Ja genau. Das weiss ich nun aus eigener Erfahrung auch...... Gelesen hab ich das noch nirgends obwohl schon einige das Problem beim laden der libPQ hatten.

Gruss Carlo
Valar Morghulis

Gruss Carlo
Benutzeravatar
dtmackenzie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 265
Registriert: Do, 22. Nov 2007 9:02
Wohnort: Leipzig
Hat sich bedankt: 66 Mal
Danksagung erhalten: 22 Mal
Kontaktdaten:

Re: DBF zu PostgreSQL

Beitrag von dtmackenzie »

Werner_Bayern hat geschrieben: Do, 13. Jul 2017 16:08 Ja, DacSqlStatement unterstützt m. W. n. noch nicht USQL_RESULT_ARRAY und USQL_RESULT_SINGLE_VALUE.

Letzteres kann man leicht simulieren und statt Array nimm USQL_RESULT_OBJECTS (hab ich aber noch nicht getestet).
Hallo Werner,

USQL_RESULT_SINGLE_VALUE scheint fast zu gehen - ich habe gerade an Alaska Support geschrieben, dass es scheint als ob der Referenzparameter nur nicht zugewiesen wird. Folgendes z.B. geht für mich:

Code: Alles auswählen

FUNC NSelect(cSelect)
// Numerical value from SQL SELECT
LOCAL nWA:=SELECT(), nResult:=0, oStmt1:=DacSqlStatement():fromChar(cSelect),;
      cQWA:=oStmt1:build():query(USQL_RESULT_SINGLE_VALUE,@nResult)
nResult := FieldGet(1)   // Shouldn't be necessary according to help (reference parameter)
CLOSE &cQWA
SELECT (nWA)
RETURN nResult
Viele Grüße,
David
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: DBF zu PostgreSQL

Beitrag von Werner_Bayern »

Servus David,

aktuell geht nur USQL_RESULT_WORKAREA, alles andere geht immer noch nicht (habs auch schon mehrmals gemeldet), aber ja, so kannst Du es simulieren. So ähnlich mache ich das in meiner SQL-Klasse auch.
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
dtmackenzie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 265
Registriert: Do, 22. Nov 2007 9:02
Wohnort: Leipzig
Hat sich bedankt: 66 Mal
Danksagung erhalten: 22 Mal
Kontaktdaten:

Re: DBF zu PostgreSQL

Beitrag von dtmackenzie »

Werner,
USQL_RESULT_SINGLE_VALUE geht beinahe, nur die eigentliche Zuweisung nicht...
USQL_RESULT_ARRAY ist noch weiter weg, da hast Du es bestimmt auch ähnlich gelöst:

Code: Alles auswählen

PROC ASelect(aResult, cSelect)
// Array from SQL SELECT
LOCAL nWA:=SELECT(), oStmt1:=DacSqlStatement():fromChar(cSelect)

// USQL_RESULT_ARRAY funktioniert nicht?
oStmt1:build():query(USQL_RESULT_WORKAREA, "ASelWA")
DBEVAL({|| AADD(aResult, FieldGet(1))})
CLOSE ASelWA

SELECT (nWA)
RETURN
Viele Grüße,
David
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: DBF zu PostgreSQL

Beitrag von Werner_Bayern »

Servus David,

nein, Array hab ich nicht umgesetzt, man schaufelt es halt bei Bedarf in ein Array.

Bei Deinem Beispiel übernimmst Du aber jeweils nur das 1. Feld?

Nutze halt die Funktion Scatter() in Verbindung mit dbeval(), das schaufelt Dir jew. den kompletten Datensatz in ein Array.
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
dtmackenzie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 265
Registriert: Do, 22. Nov 2007 9:02
Wohnort: Leipzig
Hat sich bedankt: 66 Mal
Danksagung erhalten: 22 Mal
Kontaktdaten:

Re: DBF zu PostgreSQL

Beitrag von dtmackenzie »

Hallo Werner,
Danke, das ist ein guter Tipp. Ich finde Scatter() nicht in der Xbase++ Hilfe, nur SCATTER NAME, was ein Dataobject erzeugt. Ist Scatter() vielleicht in den XBTools (ich habe derzeit Probleme, .HLP-Dateien zu öffnen)? Ich habe mir sogar vor langer Zeit selber ein paar kleine Funktionen GetRec() und PutRec() auf Basis von FIELDGET() bzw. FIELDPUT() geschrieben, wobei GetRec() genau Scatter() entspricht.
Jedenfalls funktioniert das mit Scatter (s. unten). Für den eindimensionalen Fall hat FieldGet(1) den Vorteil, dass es eine Verschachtelungsebene im Array spart, aber Deine allgemeinere Lösung ist sehr nett.

Code: Alles auswählen

PROC AASelect(aResult, cSelect)
// Array of arrays from SQL SELECT
LOCAL nWA:=SELECT(), oStmt1:=DacSqlStatement():fromChar(cSelect)

// USQL_RESULT_ARRAY funktioniert nicht?
oStmt1:build():query(USQL_RESULT_WORKAREA, "ASelWA")
DBEVAL({|| AADD(aResult, Scatter())})
CLOSE ASelWA

SELECT (nWA)
RETURN
Viele Grüße,
David
Benutzeravatar
Klaus Schuster
Foren-Administrator
Foren-Administrator
Beiträge: 366
Registriert: Do, 24. Jan 2008 10:01
Wohnort: 90762 Fürth
Hat sich bedankt: 9 Mal
Danksagung erhalten: 9 Mal

Re: DBF zu PostgreSQL

Beitrag von Klaus Schuster »

Hallo David,

hast Du

_scatterObject()

versucht?
Gruß Klaus
Benutzeravatar
dtmackenzie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 265
Registriert: Do, 22. Nov 2007 9:02
Wohnort: Leipzig
Hat sich bedankt: 66 Mal
Danksagung erhalten: 22 Mal
Kontaktdaten:

Re: DBF zu PostgreSQL

Beitrag von dtmackenzie »

Hallo Klaus,

_scatterObject() scheint eine Funktion zu sein was SCATTER NAME implementiert:
https://www.xbaseforum.de/viewtopic.php?f=99&t=10539

Ich habe noch nie Dataobjects benutzt, behalte ich die aber im Kopf für die Zukunft, Danke.
Viele Grüße,
David
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: DBF zu PostgreSQL

Beitrag von Werner_Bayern »

Servus David,

Scatter() und Gather() gibt's schon lange, stehen auch in versch. Beispielen drin, sind aber nicht dokumentiert. Den Quelltext findest Du unter:

Code: Alles auswählen

C:\Users\xxx\Documents\Xbase++\source\runtime\sys\blocks.prg
Sie werden für Arrays benutzt.

Scatter Name ist neu - und dokumentiert - und erzeugt DOs.
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
dtmackenzie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 265
Registriert: Do, 22. Nov 2007 9:02
Wohnort: Leipzig
Hat sich bedankt: 66 Mal
Danksagung erhalten: 22 Mal
Kontaktdaten:

Re: DBF zu PostgreSQL

Beitrag von dtmackenzie »

Hallo Werner,
Danke, der Quellcode ist schon interessant.
Viele Grüße,
David
Antworten