Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   client encoding mismatch PostgreSQL 9.3 (https://www.delphipraxis.net/182561-client-encoding-mismatch-postgresql-9-3-a.html)

luisk 31. Okt 2014 14:21

Datenbank: PostgreSQL • Version: 9.3 • Zugriff über: ADO Delphi 6

client encoding mismatch PostgreSQL 9.3
 
beim Versuch über ADO Delphi 6 auf Postgresql 9.3 32 Bit zu connecten erhalte ich folgenden Fehler:
Betriebssystem Win 8.1

client encoding mismatch
Woran kann das liegen ?

mkinzler 31. Okt 2014 14:23

AW: client encoding mismatch PostgreSQL 9.3
 
Verschiedene Codepages/Collations?

luisk 31. Okt 2014 14:25

AW: client encoding mismatch PostgreSQL 9.3
 
was muss ich ändern ?

Sir Rufo 31. Okt 2014 14:48

AW: client encoding mismatch PostgreSQL 9.3
 
Zitat:

Zitat von luisk (Beitrag 1278233)
was muss ich ändern ?

Deine Sichtweise?

Bisher weiß doch kein Schw... warum das da nicht tut und
Zitat:

Zitat von mkinzler (Beitrag 1278232)
Verschiedene Codepages/Collations?

Ist eine vage Vermutung (erkennt man ?)

luisk 31. Okt 2014 14:58

AW: client encoding mismatch PostgreSQL 9.3
 
Hier der ADO-Connectionstring für PostgreSQL
Fehlt da evtl. eine Angabe ?
'
Provider=MSDASQL.1;
Persist Security Info=False;
Driver={PostgreSQL};
DATABASE=postgres;
SERVER=127.0.0.1;
UID=postgres;
PASSWORD=xxxxxx;
PORT=5432;
USER=postgres;
OPTION=3;
STMT=;
'

bei MySQL läufts super:

Provider=MSDASQL.1;
Persist Security Info=False;
Driver={MySQL ODBC 3.51 Driver};
DATABASE=DB1;
SERVER=127.0.0.1;
UID=user1;
PASSWORD=xxxxx;
PORT=3306;
USER=user1;
OPTION=3;
STMT=;'

Sir Rufo 31. Okt 2014 15:05

AW: client encoding mismatch PostgreSQL 9.3
 
  1. Ich bezweifle, dass du mit dem ConnectionString eine Verbindung zu einem MySQL-Server hinbekommst
  2. Warum keine Code-Tags?
    Code:
    Provider=MSDASQL.1;
    Persist Security Info=False;
    Driver={PostgreSQL};
    DATABASE=postgres;
    SERVER=127.0.0.1;
    UID=postgres;
    PASSWORD=xxxxxx;
    PORT=5432;
    USER=postgres;
    OPTION=3;
    STMT=;
  3. Was sagt Tante Google dazu?
    Bei Google suchenpostgresql client encoding mismatch

luisk 31. Okt 2014 15:09

AW: client encoding mismatch PostgreSQL 9.3
 
Doch bei MySQL läufts optimal. Seit Jahren. Und auch nun unter Win 8

Sir Rufo 31. Okt 2014 15:10

AW: client encoding mismatch PostgreSQL 9.3
 
Zitat:

Zitat von luisk (Beitrag 1278246)
Doch bei MySQL läufts optimal. Seit Jahren. Und auch nun unter Win 8

Aha, also doch ein anderer ConnectionString

luisk 31. Okt 2014 15:14

AW: client encoding mismatch PostgreSQL 9.3
 
"Aha, also doch ein anderer ConnectionString"

oben stehen doch die beiden unterschiedlichen Connection-Stings für MySQL und Postgre.
der eine geht der andere geht nicht mehr. früher lief der auch.

Die ODBC-Treiber unter Win 8 scheinen anders zu reagieren.
Vielleicht hat jemand ähnliche Erfahrungen gemacht-

jobo 31. Okt 2014 15:18

AW: client encoding mismatch PostgreSQL 9.3
 
Zitat:

Zitat von Sir Rufo (Beitrag 1278247)
Zitat:

Zitat von luisk (Beitrag 1278246)
Doch bei MySQL läufts optimal. Seit Jahren. Und auch nun unter Win 8

Aha, also doch ein anderer ConnectionString

Das ist wahrscheinlich der Connectionstring MS OLEDB auf irgendwasMitODBC.
Da wird der TE schon Recht haben.
Annhand des etwas kryptischen MSDASQL kann ich das aber auswendig auch nicht sagen.

Sir Rufo 31. Okt 2014 15:20

AW: client encoding mismatch PostgreSQL 9.3
 
Zitat:

Zitat von jobo (Beitrag 1278250)
Zitat:

Zitat von Sir Rufo (Beitrag 1278247)
Zitat:

Zitat von luisk (Beitrag 1278246)
Doch bei MySQL läufts optimal. Seit Jahren. Und auch nun unter Win 8

Aha, also doch ein anderer ConnectionString

Das ist wahrscheinlich der Connectionstring MS OLEDB auf irgendwasMitODBC.
Da wird der TE schon Recht haben.
Annhand des etwas kryptischen MS kann ich das aber auswendig auch nicht sagen.

In seinem ursprünglichen nun geänderten Beitrag hatte er einen ConnectionString (für postgreSQL) stehen mit der Erläuterung, dass damit die MySQL Verbindung super läuft.

luisk 31. Okt 2014 15:25

AW: client encoding mismatch PostgreSQL 9.3
 
ein falsches Passwort wird immerhin erkannt.

jobo 31. Okt 2014 15:26

AW: client encoding mismatch PostgreSQL 9.3
 
Zitat:

Zitat von Sir Rufo (Beitrag 1278251)

In seinem ursprünglichen nun geänderten Beitrag hatte er einen ConnectionString (für postgreSQL) stehen mit der Erläuterung, dass damit die MySQL Verbindung super läuft.

Hab ich nicht gesehen in der Version.
Vielleicht hilft das http://www.connectionstrings.com/
Achund wenn ich mich richtig erinnere, kann man das doch interaktiv zusammenklicken oder nicht?
UDL File bauen, OLEDBProvider für ODBC auswählen, usw.
Notfalls mit einem 3. Werkzeug erstmal die ODBC Verbindung allein an den Start bringen.

luisk 31. Okt 2014 15:27

AW: client encoding mismatch PostgreSQL 9.3
 
"In seinem ursprünglichen nun geänderten Beitrag hatte er einen ConnectionString (für postgreSQL) stehen mit der Erläuterung, dass damit die MySQL Verbindung super läuft. "
Damit keine Antworten dieser Art kommen hab ich den anderen String drangehängt. Is ja wohl klar,
dass der String anders aussieht. Die Methodik ist die selbe.:!:

luisk 31. Okt 2014 15:29

AW: client encoding mismatch PostgreSQL 9.3
 
"Notfalls mit einem 3. Werkzeug erstmal die ODBC Verbindung allein an den Start bringen. "
hab ich auch mal probiert über diesen hier:
http://mingsoftware.com/universalsql.../overview.html
selbe Fehlermeldung.

die 64-Bit Version lief über Windows->Verwaltung->ODBC-Datenquellen->Benutzer-DSN : Test-Button

bei der 32-Bit Version wird leider kein Test-Butten angeboten.

MySQL bietet hier einen an und läuft natürlich auch.

jobo 31. Okt 2014 15:33

AW: client encoding mismatch PostgreSQL 9.3
 
Zitat:

Zitat von luisk (Beitrag 1278254)
Is ja wohl klar,
dass der String anders aussieht. Die Methodik ist die selbe.:!:

Ja, sollte klar sein, weiß aber niemand, der hier Unterstützung bietet. Also einfach mal den Ball flachhalten.

jobo 31. Okt 2014 15:37

AW: client encoding mismatch PostgreSQL 9.3
 
Zitat:

Zitat von luisk (Beitrag 1278231)
client encoding mismatch
Woran kann das liegen ?

Ein Internet Nutzer sagt, diese Meldung stammt von einem veralteten Postgres Client.
Daran kann es vielleicht liegen.

luisk 31. Okt 2014 15:44

AW: client encoding mismatch PostgreSQL 9.3
 
der hier bringt den selben Fehler:
http://mingsoftware.com/universalsql.../overview.html

jobo 31. Okt 2014 15:59

AW: client encoding mismatch PostgreSQL 9.3
 
Zitat:

Zitat von luisk (Beitrag 1278262)

Auf die Gefahr hin, dass das klar ist und da Du Dich irgendwie wiederholst.
Das verlinkte Tool ist kein Postgres Client.

luisk 31. Okt 2014 16:04

AW: client encoding mismatch PostgreSQL 9.3
 
nein, das ist kein Prostgres-Client, sondern ein SQL-Editor (.net MS Visual Studio), der auch über QDBC auf PostgreSQL zugreifen kann ( wie auch auf andere Datenbanken)
Die 64-Bit läuft ja als DSN

es scheint so, als ob die 32-Bit Treiber das Problem sind.

Sir Rufo 31. Okt 2014 16:04

AW: client encoding mismatch PostgreSQL 9.3
 
Zitat:

Zitat von jobo (Beitrag 1278263)
Zitat:

Zitat von luisk (Beitrag 1278262)

Auf die Gefahr hin, dass das klar ist und da Du Dich irgendwie wiederholst.
Das verlinkte Tool ist kein Postgres Client.

Macht aber nix, geht wunderbar mit dem PostgreSQL-Server 9.3.5 auch die Verbindung mit dem ConnectionString geht (mit einer kleinen Änderung):
Code:
Provider=MSDASQL.1;
Persist Security Info=False;
Driver={PostgreSQL ANSI};
DATABASE=postgres;
SERVER=127.0.0.1;
UID=postgres;
PASSWORD=xxxxxx;
PORT=5432;
USER=postgres;
OPTION=3;
STMT=;
oder
Code:
Provider=MSDASQL.1;
Persist Security Info=False;
Driver={PostgreSQL UNICODE};
DATABASE=postgres;
SERVER=127.0.0.1;
UID=postgres;
PASSWORD=xxxxxx;
PORT=5432;
USER=postgres;
OPTION=3;
STMT=;
Das
Delphi-Quellcode:
PASSWORD
muss natürlich auch den Gegebenheiten angepasst werden (sollte aber klar sein) ;)

jobo 31. Okt 2014 16:10

AW: client encoding mismatch PostgreSQL 9.3
 
Zitat:

Zitat von luisk (Beitrag 1278264)
nein, das ist kein Prostgres-Client, sondern ein SQL-Editor (MS Visual Studio), der auch über QDBC auf PostgreSQL zugreifen kann ( wie auch auf andere Datenbanken)

Ja, mir ist das klar.

Was ist denn mit Deinem Postgres Client. Und wieso testest Du eine 64 bit Version und eine 32 bit Version? Kennst Du die Version Deines Postgres Client? Hast 32- und 64bit installiert?
Und welche brauchst Du davon?

luisk 31. Okt 2014 16:14

AW: client encoding mismatch PostgreSQL 9.3
 
"Das PassWort muss natürlich auch den Gegebenheiten angepasst werden (sollte aber klar sein) "
oben hab ich schon geschrieben, dass bei falschem Passwort eine entsprechende Fehlermeldung kommt.


zum Postgre-Cient:
der Client ist die Delphi ADO-Komponente, die über ODBC zugreift.
Ich brauche die 32Bit-Version. Habe aber auch mal mit 64 Bit über eine DSN getestet, und die läuft.

jobo 31. Okt 2014 16:23

AW: client encoding mismatch PostgreSQL 9.3
 
Also was ist mit dem 32er Client?
Du kennst die Unterschiede im Aufruf von ODBC Manager und UDL je nach Bitness?
Du kennst vielleicht sogar die installierte 32 bit Postgres Client Version, hast es vielleicht sogar selbst installiert? Ist es eine aktuelle Version?

Sir Rufo 31. Okt 2014 16:32

AW: client encoding mismatch PostgreSQL 9.3
 
Zitat:

Zitat von luisk (Beitrag 1278269)
"Das PassWort muss natürlich auch den Gegebenheiten angepasst werden (sollte aber klar sein) "
oben hab ich schon geschrieben, dass bei falschem Passwort eine entsprechende Fehlermeldung kommt.


zum Postgre-Cient:
der Client ist die Delphi ADO-Komponente, die über ODBC zugreift.
Ich brauche die 32Bit-Version. Habe aber auch mal mit 64 Bit über eine DSN getestet, und die läuft.

Ok, dann muss ich wohl deutlicher werden:

Du hast einen veralteten ODBC-Treiber! Wenn der aktuell ist, dann muss bei DRIVER "PostgreSQL ANSI" oder "PostgreSQL UNICODE" stehen. Steht das nicht da sondern nur "PostgreSQL" und die Verbindung klappt bis zu der ominösen Fehlermeldung, dann sprichst du den alten, falschen ODBC-Treiber an.

Jetzt verstanden?

PS: Über die Systemsteuerung/Verwaltung/ODBC kann man sich sogar die installierten Treiber und Versionen anschauen.

luisk 31. Okt 2014 17:34

AW: client encoding mismatch PostgreSQL 9.3
 
"PostgreSQL ANSI" bzw. "PostgreSQL UNICODE"
laufen zwar als DSN wenn ich diese in der Verwaltung->ODBC-Datenquelle projektiere,
diese DSN kann ich sogar in Delphi verwenden und sie connected:
Delphi-Quellcode:
DSN=PostgreSQL35W;DATABASE=postgres;SERVER=127.0.0.1;PORT=5432;UID=postgres;PWD=xxxx;SSLmode=disable;
ReadOnly=0;Protocol=7.4;FakeOidIndex=0;ShowOidColumn=0;RowVersioning=0;ShowSystemTables=0;ConnSettings=;
Fetch=100;Socket=4096;UnknownSizes=0;MaxVarcharSize=255;MaxLongVarcharSize=8190;Debug=0;CommLog=0;
Optimizer=0;Ksqo=1;UseDeclareFetch=0;TextAsLongVarchar=1;UnknownsAsLongVarchar=0;BoolsAsChar=1;Parse=0;
CancelAsFreeStmt=0;ExtraSysTablePrefixes=dd_;;LFConversion=1;UpdatableCursors=1;DisallowPremature=0;
TrueIsMinus1=0;BI=0;ByteaAsLongVarBinary=0;UseServerSidePrepare=1;LowerCaseIdentifier=0;GssAuthUseGSS=0;
XaOpt=1
aber der freie String mit "PostgreSQL UNICODE" läuft nicht:
Delphi-Quellcode:
'Provider=MSDASQL.1;'
 +'Persist Security Info=False;'
 +'Driver={PostgreSQL UNICODE};'
 +'DATABASE=postgres;'
 +'SERVER=127.0.0.1;'
 +'UID=postgres;'
 +'PASSWORD=xxxx;'
 +'PORT=5432;'
 +'USER=postgres;'
 +'OPTION=3;'
 +'STMT=;';
Da bekomme ich allerdings nun diese Meldung:
"der Datenquellenname wurde nicht gefunden und es wurde kein Standardtreiber angegeben"

Mit dem alten Treiber bin ich im Prinzip weiter gekommen. Das Passwort wird akzeptiert. Daher hab ich
zunächst damit weitergetestet.

mit der MySQL-Variante läuft die Chose einwandfrei.

Sir Rufo 31. Okt 2014 18:02

AW: client encoding mismatch PostgreSQL 9.3
 
Liste der Anhänge anzeigen (Anzahl: 1)
Also ich teste mit diesem hochkomplexen Programm
Delphi-Quellcode:
unit Form.Main;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DB, Data.Win.ADODB, Vcl.StdCtrls;

type
  TForm1 = class( TForm )
    Button1: TButton;
    Memo1: TMemo;
    Button2: TButton;
    ADOConnection1: TADOConnection;
    procedure Button1Click( Sender: TObject );
    procedure Button2Click( Sender: TObject );
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click( Sender: TObject );
begin
  Memo1.Text := PromptDataSource( Self.Handle, Memo1.Text );
end;

procedure TForm1.Button2Click( Sender: TObject );
begin
  ADOConnection1.ConnectionString := Memo1.Text;
  ADOConnection1.Open;
  try
  finally
    ADOConnection1.Close;
  end;
  ShowMessage( 'Connection successful' );
end;

end.
ob da eine Verbindung Zustandekommen oder nicht (EXE im Anhang)

Einfach den ConnectionString in das Memo klatschen, das Passwort abändern und auf Connect -> wunderbar
Interessant ist es diesen ConnectionString einmal durch den Verbindung-Editor zu jagen und schauen, was ohne wirkliche Änderung (nur Speichern des Kennworts angeklickt) dabei rauskommt:

Vorher:
Code:
Provider=MSDASQL.1;
Persist Security Info=False;
Driver={PostgreSQL ANSI};
DATABASE=postgres;
SERVER=127.0.0.1;
UID=postgres;
PASSWORD=******;
PORT=5432;
USER=postgres;
OPTION=3;
STMT=;
Nachher:
Code:
Provider=MSDASQL.1;
Password=******;
Persist Security Info=True;
Extended Properties="Driver={PostgreSQL ANSI};DATABASE=postgres;SERVER=127.0.0.1;UID=postgres;PORT=5432;USER=postgres;OPTION=3;STMT="
Anyway, bei beiden klappt die Verbindung ganz vorzüglich (du kannst es selber testen).

Ach ja: Meine installierte postgreSQL ODBC Version lautet: 9.03.04.00 (die aktuelleste die ich gefunden habe)

luisk 31. Okt 2014 18:03

AW: client encoding mismatch PostgreSQL 9.3
 
so geht der Mist nun:
Delphi-Quellcode:
'Provider=MSDASQL.1;'
  +'Persist Security Info=False;'
  +'Driver={PostgreSQL ODBC Driver(UNICODE)};' // statt 'Driver={PostgreSQL UNICODE};'
  +'DATABASE=postgres;'
  +'SERVER=127.0.0.1;'
  +'UID=postgres;'
  +'PASSWORD=xxxx;'
  +'PORT=5432;'
  +'USER=postgres;'
  +'OPTION=3;'
  +'STMT=;';
Ich hab nun den String verwendet, den der ODBC-Konfigurator in der Verwaltung anbietet.

und was meinst Du nun dazu Sir Rufo ?

Ich sag nur "Macrodoof"

Ich hab die Treiber nun seit 10 Jahren aus der ODBC-INI herausgelesen und in einem Menu angeboten.
Und nun spielt MS hier anscheinend ein neues Spiel.
Jetzt muss ich mal schauen, was die geändert haben.

Sir Rufo 31. Okt 2014 18:06

AW: client encoding mismatch PostgreSQL 9.3
 
Liste der Anhänge anzeigen (Anzahl: 1)
Dann verrate doch mal DEINE Version des ODBC-Treibers?

Da schaut man nach, wenn man wissen will wie der Treiber-Name lautet
Anhang 42086
und erfreulicherweise steht auch die Versionsnummer dabei

luisk 31. Okt 2014 18:19

AW: client encoding mismatch PostgreSQL 9.3
 
Version: 9.03.02.10
ich hatte vorher mit der neuesten Version getestet, da ging es auch nicht,
dann bin ich einige Versionen zurückgegangen.

Das Problem lag nun daran, diesen String herauszufinden:
'Driver={PostgreSQL ODBC Driver(UNICODE)};' // statt 'Driver={PostgreSQL UNICODE};'

ich werde morgen wieder die neuere Version nehmen. Mal sehen, wie der String dann aussehen muss


ODBCinst.ini
hier hab ich immer (10Jahre) automatisch die Strings geholt bei der Kennzeichnung installed:

[MySQL ODBC 3.51 Driver (32 bit)]
Driver=C:\windows\SysWOW64\myodbc3.dll
Setup=C:\windows\SysWOW64\myodbc3S.dll
32Bit=1
[ODBC 32 bit Drivers]
MySQL ODBC 3.51 Driver (32 bit)=Installed
PostgreSQL Legacy (32 bit)=Installed
PostgreSQL Unicode (Beta) (32 bit)=Installed
PostgreSQL (32 bit)=Installed
[PostgreSQL Legacy (32 bit)]
Driver=C:\WINDOWS\SysWOW64\psqlodbc25.dll
Setup=C:\WINDOWS\SysWOW64\psqlodbc.dll
32Bit=1
[PostgreSQL Unicode (Beta) (32 bit)]
Driver=C:\WINDOWS\SysWOW64\psqlodbc30w.dll
Setup=C:\WINDOWS\SysWOW64\psqlodbc.dll
32Bit=1
[PostgreSQL (32 bit)]
Driver=C:\WINDOWS\SysWOW64\psqlodbc.dll
Setup=C:\WINDOWS\SysWOW64\psqlodbc.dll
32Bit=1

------------------------------------------------
"MySQL ODBC 3.51 Driver" geht immer noch super
"PostgreSQL Unicode" geht nun bei meiner Win-Version nicht mehr

Der neue String ist zumindest in der ODBC.ini Datei bei einer entsprechenden DSN zu finden:

[ODBC 32 bit Data Sources]
Microsoft Access-Datenbank=Microsoft Access-Treiber (*.mdb) (32 bit)
dBASE-Dateien=Microsoft dBase-Treiber (*.dbf) (32 bit)
Excel-Dateien=Microsoft Excel-Treiber (*.xls) (32 bit)
PostgreSQL35W=PostgreSQL ODBC Driver(UNICODE) (32 bit)
[Microsoft Access-Datenbank]
Driver32=C:\WINDOWS\system32\odbcjt32.dll
[dBASE-Dateien]
Driver32=C:\WINDOWS\system32\odbcjt32.dll
[Excel-Dateien]
Driver32=C:\WINDOWS\system32\odbcjt32.dll
[PostgreSQL35W]
Driver32=C:\Program Files (x86)\PostgreSQL\psqlODBC\0903\bin\psqlodbc35w.dll

Sir Rufo 31. Okt 2014 18:38

AW: client encoding mismatch PostgreSQL 9.3
 
Schau lieber in der Registry nach
Code:
HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers

luisk 31. Okt 2014 18:47

AW: client encoding mismatch PostgreSQL 9.3
 
danke für den Tipp hab auch dran gedacht:
ich werde jetzt umbauen müssen, und die Treiber aus der Registry holen:
http://www.entwickler-ecke.de/topic_...en_6344,0.html

luisk 31. Okt 2014 19:10

AW: client encoding mismatch PostgreSQL 9.3
 
das mit der registry funzt,
das Auslesen gibt sogar die Treiber her, die man mit regedit nicht sieht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:32 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz