runner-ralf
Goto Top

Oracle DB Connect String für UTF8 Verbindung

Hallo alle zusammen,

ich habe einen Oracle DB String der seit Jahren einwandfrei funktioniert.

Die Variablen werden auch alle richtig übergeben(will sie hier nicht reinschreiben)
Sonst würde es bei NICHT UTF8 auch fehlschlagen)

Host
Port
Servicename
Trim(User)
Trim(pw)

ich nutze oraoledb12.dll.

cnDB.Open "Provider=OraOLEDB.Oracle;Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=" & Host & ")(Port=" & Port & "))(CONNECT_DATA=(SERVICE_NAME=" & Servicename & ")));User ID=" & Trim(User) & ";Password=" & Trim(pw) & ""

Jetzt habe ich eine UTF8 Umgebung dazu bekommen und da bekomme ich immer die Fehlermeldung "Falscher User oder Passwort". Im SQL Developer kann ich aber mit dem User und Passwort die DB öffnen.

Host, Port und Servicename wurden natürlich auf die neue Umgebung angepasst und wie im SQL Developer eingetragen.

Es liegt wohl an dem UTF8 Code aber ich weiß nicht wie ich dem Connection String dies mitteilen soll dass es sich bei der Verbindung um eine UFT8 Verbindung handelt und somit die Strings in Unicode umgewandelt werden.

Habe jetzt eine Weile gegoogelt aber nichts dazu gefunden.

Nur das der NLS_CHARACTERSET der Datenbank ein AL32UTF8 ist.

Gibt es noch einen Parameter mit dem ich das hinterlegen kann?


Viele Grüße aus Bamberg

Ralf

Content-ID: 593312

Url: https://administrator.de/contentid/593312

Ausgedruckt am: 23.11.2024 um 04:11 Uhr

GrueneSosseMitSpeck
GrueneSosseMitSpeck 04.08.2020 um 12:24:51 Uhr
Goto Top
vermutlich wird der Benutzername und das Paßwort fälschlicherweise als UTF8 übergeben, du arbeitest da ja mit Variablen.
Soweit ich mich erinnere, erwartet der Oracle-server solche Daten immer als 8 Bit ASCII auch wenn die Instanz als AL32UTF8 (und die Datenbank als AL16UTF16) konfiguriert ist.

Gibt ürigens noch einen Spfile Eintrag, der die UTF8 Fähigkeit beeinflußt - NLS Length semantics muß für einige Anwenungsfälle auf "CHAR" stehen, für andere auf "BYTE". Ich würde noch mal in die SPFILE Variablen reinschauen (per Anmeldugn am WEbinterface des Servers zugänglich)

Kann auch sein daß das an Sonderzeichen im Kennwort liegt, die Besonderheit bei UTF8 ist ja daß die esten 127 Ascii Zeichen als 8 Bit übergeben werden, aber wenn ein Zeichen ab Code 128 dabei ist dann wird aus einem Byte dann zwei.
runner-ralf
runner-ralf 04.08.2020 um 13:25:08 Uhr
Goto Top
OK,
das hört sich irgendwie logisch an aber wie ich das in meinen Connection String darstellen soll weiß ich jetzt aber nicht. Habe soeben mal gegoogelt und was gefunden wie ich den String in UTF8 bekomme.

https://dbwiki.net/wiki/VBA_Tipp:_ANSI-String_ins_UTF8-Format_konvertier ...

Habe dann zwei Variablen angelegt:

Dim utf8user() As Byte
Dim utf8pw() As Byte

und mit

utf8user = UnicodeToUtf8(User)
utf8pw = UnicodeToUtf8(pw)

befüllt.

Wenn ich aber diese Variablen(utf8user und utf8pw) statt den Variablen "user" und "pw" oder direkt die Funktionen UnicodeToUtf8(User) und UnicodeToUtf8(pw) übergebe bekomme ich den Fehler "Typen unverträglich".


Hast du noch einen Rat?