![]() |
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 ? |
AW: client encoding mismatch PostgreSQL 9.3
Verschiedene Codepages/Collations?
|
AW: client encoding mismatch PostgreSQL 9.3
was muss ich ändern ?
|
AW: client encoding mismatch PostgreSQL 9.3
Zitat:
Bisher weiß doch kein Schw... warum das da nicht tut und Zitat:
|
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=;' |
AW: client encoding mismatch PostgreSQL 9.3
|
AW: client encoding mismatch PostgreSQL 9.3
Doch bei MySQL läufts optimal. Seit Jahren. Und auch nun unter Win 8
|
AW: client encoding mismatch PostgreSQL 9.3
Zitat:
|
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- |
AW: client encoding mismatch PostgreSQL 9.3
Zitat:
Da wird der TE schon Recht haben. Annhand des etwas kryptischen MSDASQL kann ich das aber auswendig auch nicht sagen. |
AW: client encoding mismatch PostgreSQL 9.3
Zitat:
|
AW: client encoding mismatch PostgreSQL 9.3
ein falsches Passwort wird immerhin erkannt.
|
AW: client encoding mismatch PostgreSQL 9.3
Zitat:
Vielleicht hilft das ![]() 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. |
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.:!: |
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: ![]() 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. |
AW: client encoding mismatch PostgreSQL 9.3
Zitat:
|
AW: client encoding mismatch PostgreSQL 9.3
Zitat:
Daran kann es vielleicht liegen. |
AW: client encoding mismatch PostgreSQL 9.3
|
AW: client encoding mismatch PostgreSQL 9.3
Zitat:
Das verlinkte Tool ist kein Postgres Client. |
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. |
AW: client encoding mismatch PostgreSQL 9.3
Zitat:
Code:
oder
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=;
Code:
Das
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=;
Delphi-Quellcode:
muss natürlich auch den Gegebenheiten angepasst werden (sollte aber klar sein) ;)
PASSWORD
|
AW: client encoding mismatch PostgreSQL 9.3
Zitat:
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? |
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. |
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? |
AW: client encoding mismatch PostgreSQL 9.3
Zitat:
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. |
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:
aber der freie String mit "PostgreSQL UNICODE" läuft nicht:
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
Delphi-Quellcode:
Da bekomme ich allerdings nun diese Meldung:
'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=;'; "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. |
AW: client encoding mismatch PostgreSQL 9.3
Liste der Anhänge anzeigen (Anzahl: 1)
Also ich teste mit diesem hochkomplexen Programm
Delphi-Quellcode:
ob da eine Verbindung Zustandekommen oder nicht (EXE im Anhang)
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. 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:
Nachher:
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=;
Code:
Anyway, bei beiden klappt die Verbindung ganz vorzüglich (du kannst es selber testen).
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=" Ach ja: Meine installierte postgreSQL ODBC Version lautet: 9.03.04.00 (die aktuelleste die ich gefunden habe) |
AW: client encoding mismatch PostgreSQL 9.3
so geht der Mist nun:
Delphi-Quellcode:
Ich hab nun den String verwendet, den der ODBC-Konfigurator in der Verwaltung anbietet.
'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=;'; 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. |
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 |
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 |
AW: client encoding mismatch PostgreSQL 9.3
Schau lieber in der Registry nach
Code:
HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers
|
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: ![]() |
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 14:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz