Seite 1 von 1

Erste Versuche

Verfasst: So, 09. Jan 2022 19:10
von Wolfgang Ciriack
Hallo,
habe den Postgres Server 13.5 x64 installiert und die Änderungen bezüglich der Authentifizierung aus dem Artikel von Alaska https://ilx.alaska-software.com/index.p ... h-xbase.6/ durchgeführt.
Wenn ich jetzt das Beispiel sql\xbpbrowse ausführe, bekomme ich folgende Fehlermeldung:
2022-01-09 19_02_12-SqlBrowse.png
2022-01-09 19_02_12-SqlBrowse.png (9.01 KiB) 6214 mal betrachtet
Der Rollenname ist sehr krytisch.
Habe ich da irgendetwas vergessen zu installieren oder eine Einstellung nicht vorgenommen ?
Oder funktioniert das mit der Version 13.5 noch nicht, muss ich was älteres installieren ?

Re: Erste Versuche

Verfasst: So, 09. Jan 2022 23:34
von Martin Altmann
Habe es mal an die richtige Stelle verschoben.

Viele Grüße,
Martin

Re: Erste Versuche

Verfasst: Mo, 10. Jan 2022 0:34
von Werner_Bayern
Servus Wolfgang,

zuerst: pqlib client dll wurde mit der Version 1425 auf die 13.2 aktualisiert, Du brauchst also den Artikel grundsätzlich nicht berücksichtigen.

Die Fehlermeldung betriff ja die Stelle:

Code: Alles auswählen

  IF(!oInfo:isDatabase(cDB))
    oStmt := DacSQLStatement():FromChar([CREATE DATABASE "::dbname" WITH OWNER = "::owner" ENCODING = 'UTF8'])
    oStmt:DbName := cDB
    oStmt:Owner  := _GetValueFromConnectionTuple(cConnStr,"UID")
    oStmt:Build():Execute()
  ENDIF
Es soll also eine neue DB angelegt werden. Hat Dein übergebener Benutzer auch das Recht dazu?

Re: Erste Versuche

Verfasst: Mo, 10. Jan 2022 8:25
von Marcus Herz
Native Fehlermeldungen von PostgreSQL sind grundsätzlich UFT8

Re: Erste Versuche

Verfasst: Mo, 10. Jan 2022 8:45
von Wolfgang Ciriack
Ja, habe mit PgAdmin 4 und dem SQL-Script northwind.postgresql.sql die Tabellen anlegen können.

Re: Erste Versuche

Verfasst: Mo, 10. Jan 2022 15:00
von Werner_Bayern
Servus Wolfgang,

nicht Tabellen, sondern DB = Datenbank.
Mit PGAdmin könntest ja mit einem anderen Benutzer angemeldet gewesen sein, als hier per Xbase++. Also, welche DB hast angegeben, gibt es die schon und hat der Benutzer lt. Connection-String im XbpBrowse-Beispiel die nötigen Rechte?

Re: Erste Versuche

Verfasst: Mo, 10. Jan 2022 16:18
von georg
Hallo, Wolfgang -


meines Wissens hat PostGRE auch eine Konsole. (Ich mache das analog so mit MySQL.)

Wenn etwas nicht funktioniert, melde ich mich an der Konsole an (mit dem entsprechenden Benutzer und Passwort) und führe den Befehl in der Konsole aus. Dann sehe ich, ob es funktioniert oder nicht, und bekomme auch eine etwas aussagekräftigere Fehlermeldung. Es kann sogar sein, dass der Benutzer, den Du im Programm verwendest, nicht die erforderlichen Rechte hat (dann scheitert auch alles weitere).

Mit der Nutzung der Konsole kann man das aber sehr gut eingrenzen.

Re: Erste Versuche

Verfasst: Mo, 10. Jan 2022 16:43
von Tom
Die Konsole zu PostGreS heißt PSQL. Es befindet sich im ..\bin-Verzeichnis der Installation. pgAdmin ist aber viel bequemer.

Re: Erste Versuche

Verfasst: Mo, 10. Jan 2022 16:56
von georg
Hallo, Tom -


Du hast recht, pgAdmin ist bequemer. Aber der läuft unter einem Benutzerprofil in einem Umfeld, wo es (immer) passt.

Wenn der Anwender nicht mit "root" oder sonst einem privilegiertem Profil zugreift (wie über ein Xbase++ Programm), sind die Karten anders gemischt. Daher die Empfehlung, die einzelnen Schritte mit psql durchzugehen.

Re: Erste Versuche

Verfasst: Mo, 10. Jan 2022 17:50
von Tom
pgAdmin kann mehrere Server verwalten, auch unterschiedliche Versionen. Ist schon ziemlich handy.

@Wolfgang: Du machst zunächst einen Connect zum Server, dann zur Datenbank, aber wenn Du nicht administrieren willst, gleich zur Datenbank. Ein Server kann beliebig viele Datenbanken haben. In der Datenbank gibt es dann ein Schema oder mehrere davon (wobei hier der Plural "Schemas" richtig wäre, nicht "Schemata"). Die PGDBE unterstützt standardmäßig (und beim Upsizing) nur "public", das ist sozusagen das Standardschema, wie ein Root-Verzeichnis in einer Ordnerstruktur - darin landen beim Upsizing auch alle Tabellen. Dort gibt es dann irgendwo "Tables", das sind die Tabellen dann auch. Also Server -> Datenbank -> Schema -> Tables. Man könnte parallele Schemas in einer Datenbank wie Unterordner in einem Datenbankpfad verwenden, wo man dann mit SET PATH/SET DEFAULT die Hierarchie regelt, wofür es Kommandos in PostGreS gibt, aber das unterstützt die PGDBE leider auch nicht. Ein <SELECT * FROM pg_tables> listet Dir alle Tabellen.

Re: Erste Versuche

Verfasst: Di, 11. Jan 2022 8:34
von Wolfgang Ciriack
Hallo Tom,
habe jetzt erst mal anderes zu tun, komme aber vielleicht am nächsten Wocheende darauf zurück.
Ich dachte, ich könne das sqlbrowser-Beispiel von Alaska nach installierten Server einfach mal so ausführen.

@Werner,
pqlib client dll wurde mit der Version 1425 auf die 13.2 aktualisiert, Du brauchst also den Artikel grundsätzlich nicht berücksichtigen.
Das heißt, ich brauche die Verschlüsselung nicht von scram-sha-256 auf md5 zu ändern, XBase kann damit umgehen ?

Re: Erste Versuche

Verfasst: Di, 11. Jan 2022 8:53
von Tom
Für einen 13er-Server muss man die Verschlüsselung nicht mehr umstellen, nein. Und das SQLBrowse-Beispiel ist ja kein PGDBE/ISAM-Ding, wenn ich das richtig in Erinnerung habe. Beispiele und Dokumentation zu dieser ganzen PG-Sache sind leider immer noch etwas dürftig.

Re: Erste Versuche

Verfasst: Di, 11. Jan 2022 13:07
von Werner_Bayern
Tom hat geschrieben: Di, 11. Jan 2022 8:53 Und das SQLBrowse-Beispiel ist ja kein PGDBE/ISAM-Ding, wenn ich das richtig in Erinnerung habe.
Zwitter: Zum Editieren eines Satzes wird die ISAM-Maschinerie angeschmissen.

Re: Erste Versuche

Verfasst: So, 30. Jan 2022 11:06
von Wolfgang Ciriack
Gibt es denn gar kein lauffähiges Beispiel für die Anbindung an Postgres für einen ersten Test?
Ich dachte, das sqlbrowse Beispiel wäre gut, da dort ja eine Tabelle aus einer bestehenden DBF angelegt werden soll, wenn diese noch nicht existiert.
Das endet jedoch immer - habe jetzt nochmal die 12.9 statt 13 installiert - mit derselben Fehlermeldung

Code: Alles auswählen

oError:args         :
          -> VALTYPE: U VALUE: NIL
oError:canDefault   : J
oError:canRetry     : N
oError:canSubstitute: J
oError:cargo        : {NIL,         -1, FEHLER:  Rolle »$2« existiert nicht}
oError:description  : FEHLER:  Rolle »$2« existiert nicht
oError:filename     : 
oError:genCode      :       9001
oError:operation    : ABSTRACTSQLSTATEMENTBUILDER:EXECUTESTATEMENT
oError:osCode       :          0
oError:severity     :          2
oError:subCode      :         -1
oError:subSystem    : Remote SQL dacSession
oError:thread       :          1
oError:tries        :          0
------------------------------------------------------------------------------
CALLSTACK:
------------------------------------------------------------------------------
Called from CHECKDATAEXISTS(117)
Weiß jetzt nicht, wo ich die Rolle im pgAdmin4 definieren sollte.
Na vielleicht muss ich mal eine Mail an Alaska schicken.

Re: Erste Versuche

Verfasst: So, 30. Jan 2022 18:27
von Werner_Bayern
Servus Wolfgang,

selber Fehler wie bei Deiner Eingangsmeldung. Du hast schon in der main.prg Deinen Connection-String angepasst???

Zeile 43ff.

Re: Erste Versuche

Verfasst: Mo, 31. Jan 2022 7:15
von Wolfgang Ciriack
Hallo Werner,
nein, habe ich so gelassen, da Benutzer und Kennwort so angelegt sind.
Verbindung wird ja auch aufgebaut.

Re: Erste Versuche

Verfasst: Mo, 31. Jan 2022 13:01
von Werner_Bayern
Dann müsste Deine Rolle aber pgdbe sein!

Geh doch mal mit dem Debugger CheckDataExists() durch und schau Dir die z. B. cDB genau an.

Re: Erste Versuche

Verfasst: Mo, 31. Jan 2022 18:13
von Wolfgang Ciriack
Hallo Werner,

cDB ist "xppsamples"
Owner ist postgres

Re: Erste Versuche

Verfasst: Mo, 31. Jan 2022 21:47
von Werner_Bayern
Servus Wolfgang,

mein Fehler, hab DB mit DBE verwechselt.

Hab mir das jetzt bei mir mal genauer angesehen und kann Deinen Fehler nachstellen. Wenn ich mir dann per PGAdmin das Statement anschaue, kommt folgendes beim PG an:
CREATE DATABASE "$1" WITH OWNER = "$2" ENCODING = 'UTF8'
das kann nicht funktionieren! Da werden die beiden Parameter DbName und Owner nicht ersetzt, da stimmt was nicht. Würde ich an Alaska melden.

Ersetze mal den Code zur Erzeugung der Datenbank in CheckDataExists() durch folgenden:

Code: Alles auswählen

  // Prüfen, ob die Datenbank exisiert. Wennn nicht, neu erzeugen
  oInfo := DacSchema():New(oS)
  IF(!oInfo:isDatabase(cDB))
    oStmt := DacSQLStatement():FromChar([CREATE DATABASE xppsamples WITH OWNER = postgres ENCODING = 'UTF8'])
    oStmt:Build():Execute()
  ENDIF
Dann funktioniert es!

Re: Erste Versuche

Verfasst: Di, 01. Feb 2022 6:41
von Wolfgang Ciriack
Hallo Werner,

danke für das Probieren und Finden des Fehlers.
Werde ich nachher gleich mal probieren.

Re: Erste Versuche

Verfasst: Di, 01. Feb 2022 9:48
von Wolfgang Ciriack
Hallo Werner,
das klappt auch nicht: Statement has no parameter with Name(::dbname)
Habe jetzt mal eine Mail and den Alaska Support geschrieben.

Re: Erste Versuche

Verfasst: Di, 01. Feb 2022 11:50
von Werner_Bayern
Servus Wolfgang,

doch, das klappt, Du musst den Teil aber komplett mit meinem geposteten Code ersetzen! Du hast bei Dir noch

Code: Alles auswählen

oStmt:dbname := cDB
oStmt:owner
im Code :wink:

Re: Erste Versuche

Verfasst: Di, 01. Feb 2022 12:44
von Wolfgang Ciriack
Ok, danke Werner, du hast Recht. Man sollte schon genau hinschauen #-o

Re: Erste Versuche

Verfasst: Fr, 04. Feb 2022 15:14
von Wolfgang Ciriack