AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken TSQLConnection / Oracle / NSL_CHARACTERSET ändern
Thema durchsuchen
Ansicht
Themen-Optionen

TSQLConnection / Oracle / NSL_CHARACTERSET ändern

Ein Thema von tofse · begonnen am 6. Dez 2012 · letzter Beitrag vom 8. Dez 2012
Antwort Antwort
tofse

Registriert seit: 6. Jun 2011
Ort: Saarlouis
131 Beiträge
 
Delphi XE Professional
 
#1

AW: TSQLConnection / Oracle / NSL_CHARACTERSET ändern

  Alt 6. Dez 2012, 14:07
Danke für den Hinweis, aber das steht nicht zur Diskussion, da es sich um einen großen Softwareanbieter handelt, und wir darauf keinen Einfluss haben. Sind schon froh, dass wir den Algorithmus haben.
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#2

AW: TSQLConnection / Oracle / NSL_CHARACTERSET ändern

  Alt 6. Dez 2012, 15:48
Du musst glaub ich "nur" NLS_LANG im OS Environment passend setzen, bevor(!) du connectest.
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#3

AW: TSQLConnection / Oracle / NSL_CHARACTERSET ändern

  Alt 6. Dez 2012, 16:15
ok ich arbeite mit ADO aber verschlüsselte Passwörter habe ich auch schon ausgelesen. ggf ist die fehlerhafte Darstellung nur ein Darstellungsproblem?
Hast Du mal einen Hex-Dump Deiner Passwörter erstellt?

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
EgonHugeist

Registriert seit: 17. Sep 2011
187 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#4

AW: TSQLConnection / Oracle / NSL_CHARACTERSET ändern

  Alt 6. Dez 2012, 21:33
oje, ich dachte das wäre so einfach wie in php
Ist es eigentlich auch, nur eben nicht mit der UnicodeIDE.

So, wie ich das sehe, brauchst du eine Komponente, mit welcher du den CharacterSet selber bestimmst und bei Bedarf sogar auf den nativen nicht-zu-UnicodeString(stimmt die XE-Compiler Angabe?), um dein Problem zu lösen.

Erst einmal würd ich sagen Finger weg von Ideen wie zu Laufzeit den CharacterSet ändern, wenn du eine UnicodeIDE benutzt:

Ich gehe mal davon aus, das die meisten Komponenten da gleich funktionieren: Stelle den vom Benutzer gewüschten CharacterSet ein, dann macht der Server(außer MsSQL) alle notwendigen Encodierungen und die DB-Zugriffs Komponente weiß, wie sie den vom Server erhaltenen Ansi-String(CP-WhatEver) zum UnicodeString mappt. Sollter der User den CharSet nicht angegeben haben, frage die DB danach und stelle die AnsiToUnicode und umgekehrt Functionen darauf ein, da ein Casten nur zufällig passende Resultate geliefert, wenn ServerCP <> DefaultCodePage. (auch ADO bleibt davon nicht verschont, tut es jedoch intern) Blablabla..

Wenn du den CharSet zur Laufzeit änderst, passt vielleicht der String, den du dir wünschst, jedoch ist es möglich, daß alle anderen Encodierungen totalen Stuß fabrizieren. (da die Componente noch immer den AnsiString mit CP-WhatEver erwartet)

Daher versuchs mal mit dem Vorschlag von jobo.

Wenn dann alles nix hilft:

Lade Zeos7-Beta herunter und installiere die Komponente.
Benutze die TZConnection anstadt oder zusätzlich zu der TSQLConnection (kenne ich nicht )

TZConnection.ClientCodePage := 'WE8MSWIN1252';
TZConnection.UserName etc.....

Verbinde dich mit der DB.
Delphi-Quellcode:
var
  ResultSet: IZResultSet;
  rs: RawByteString;
begin
  with ZConnection1.DbcConnection.PrepareStatement('select CryptedField from deine.tabelle') do
  begin
    ResultSet := ExecuteQueryPrepared;
    while ResultSet.Next do
      rs := ResultSet.GetBinaryStringByName('CryptedField'); //Ergebis ist der direkt von der DB gelieferten nicht encodierte String
    ResultSet.Close;
    ResultSet := nil;
    Close;
  end;
end;
Das funzt auf jeden Fall.
Kannst du damit etwas anfangen? Zeos läßt dem Benutzer in jeder hinsicht alle Freiheiten.

Gruß Michael

Geändert von EgonHugeist ( 6. Dez 2012 um 21:50 Uhr)
  Mit Zitat antworten Zitat
tofse

Registriert seit: 6. Jun 2011
Ort: Saarlouis
131 Beiträge
 
Delphi XE Professional
 
#5

AW: TSQLConnection / Oracle / NSL_CHARACTERSET ändern

  Alt 7. Dez 2012, 08:08
ich schaue mir das mal an.
Irgendwie hatte ich es mir so vorgestellt
Zitat:
TZConnection.ClientCodePage := 'WE8MSWIN1252';
TZConnection.UserName etc.....
Danke
  Mit Zitat antworten Zitat
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.192 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: TSQLConnection / Oracle / NSL_CHARACTERSET ändern

  Alt 8. Dez 2012, 08:33
Hi tofse

Du arbeitest mit TSQLConnection, also mit DBExpress? Seit mW. D2010 gibt es dazu ein komplett überarbeitetes DBX-Framework. Und dieses enthält Routinen, um empfangene Strings in den Zeichensatz der Anwendung umzuwandeln.

Ich selbst arbeite zwar mit MySQL, greife aber auch mit den DBExpress-Komponenten auf den Server zu. Ein Stringgrid befülle ich zB. wie folgt:

Delphi-Quellcode:
    while not DelborDataMod.SQLDataSetXE.Eof do
    begin
      StrGridKathegory.Cells[0, i] := IntToStr(DelborDataMod.SQLDataSetXE.FieldByName('Kath_ID').AsInteger);
      StrGridKathegory.Cells[1, i] := UTF8ToUnicodeString(DelborDataMod.SQLDataSetXE.FieldByName('Kategorie').AsString);
      DelborDataMod.SQLDataSetXE.Next;
      inc(i);
    end;
Damit hast du zwar nicht den Zeichensatz des Servers geändert, sondern nur den der Anwendung. Ausserdem müsstest du dir noch was einfallen lassen, falls du mit Datensensitiven Komponenten arbeitest - ohne dein Zutun zeigen die sonst den Zeichensatz so an, wie er vom Server kommt.
Natürlich hat der Server auch eine sessionspezifische Variable CLIENTDATASET - eine Oracel-DB wohl ebenso wie MySQL.

Gruss
Delbor

PS:

Zitat:
Wie kann ich NLS_CHARACTERSET in Delphi (TSQLConnection) setzen????
Hmm... Solange das der Charakterset deiner Verbindung ist, kannst du das sicher tun - in MySQL gibt's für sowas das SQL-Statement 'SET @@session.character_set_client = ''wasauchimmer'''.
Oracel müsste wohl auch sowas haben.
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch

Geändert von Delbor ( 8. Dez 2012 um 08:45 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:41 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