Seite 2 von 2

Re: DBF zu PostgreSQL

Verfasst: Do, 13. Jul 2017 17:00
von Werner_Bayern
Carlo,

wo gibt es eigentlich die
libpg4xb
?

Re: DBF zu PostgreSQL

Verfasst: Do, 13. Jul 2017 17:06
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

Re: DBF zu PostgreSQL

Verfasst: Do, 13. Jul 2017 17:08
von ramses
Werner schau mal hier:

viewtopic.php?f=24&t=8564

Re: DBF zu PostgreSQL

Verfasst: Do, 13. Jul 2017 17:39
von Werner_Bayern
Danke.
Gibt's dazu eine Doku?

Re: DBF zu PostgreSQL

Verfasst: Do, 13. Jul 2017 17:43
von ramses
Servus Werner

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

Gruss Carlo

Re: DBF zu PostgreSQL

Verfasst: Do, 13. Jul 2017 18:58
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.

Re: DBF zu PostgreSQL

Verfasst: Do, 13. Jul 2017 22:17
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.

Re: DBF zu PostgreSQL

Verfasst: Fr, 14. Jul 2017 9:54
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

Re: DBF zu PostgreSQL

Verfasst: Fr, 21. Jul 2017 18:06
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

Re: DBF zu PostgreSQL

Verfasst: Fr, 21. Jul 2017 22:49
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?

Re: DBF zu PostgreSQL

Verfasst: Fr, 21. Jul 2017 23:06
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 ?

Re: DBF zu PostgreSQL

Verfasst: Sa, 22. Jul 2017 8:55
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

Re: DBF zu PostgreSQL

Verfasst: Sa, 22. Jul 2017 9:04
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

Re: DBF zu PostgreSQL

Verfasst: Sa, 22. Jul 2017 11:06
von Werner_Bayern
PostgreSQL benötigt die VC-Runtime, auch z. B. das pgadmin. Darauf scheint alles aufgebaut zu sein, also auch die Schnittstellen.

Re: DBF zu PostgreSQL

Verfasst: Sa, 22. Jul 2017 12:49
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

Re: DBF zu PostgreSQL

Verfasst: Mo, 20. Apr 2020 11:03
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

Re: DBF zu PostgreSQL

Verfasst: Mo, 20. Apr 2020 14:21
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.

Re: DBF zu PostgreSQL

Verfasst: Mo, 20. Apr 2020 14:36
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

Re: DBF zu PostgreSQL

Verfasst: Mi, 22. Apr 2020 22:06
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.

Re: DBF zu PostgreSQL

Verfasst: Do, 23. Apr 2020 10:58
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

Re: DBF zu PostgreSQL

Verfasst: Do, 23. Apr 2020 12:46
von Klaus Schuster
Hallo David,

hast Du

_scatterObject()

versucht?

Re: DBF zu PostgreSQL

Verfasst: Do, 23. Apr 2020 13:40
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.

Re: DBF zu PostgreSQL

Verfasst: Do, 23. Apr 2020 16:28
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.

Re: DBF zu PostgreSQL

Verfasst: Fr, 24. Apr 2020 9:10
von dtmackenzie
Hallo Werner,
Danke, der Quellcode ist schon interessant.