AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

RAW Feld richtig auslesen

Ein Thema von Jumpy · begonnen am 29. Mär 2017 · letzter Beitrag vom 1. Apr 2017
Antwort Antwort
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.737 Beiträge
 
Delphi 6 Enterprise
 
#1

RAW Feld richtig auslesen

  Alt 29. Mär 2017, 15:14
Datenbank: Oracle • Version: 11g • Zugriff über: ADO
Hallo,

ich habe in einer Oracle-DB ein Feld vom Datentyp RAW. Wenn ich mir das mit Substr mal als Text ausgeben lasse, steht darin (Dummy-Besipiel):

003100320033

Ich weiß, dass das dem String 123 entsprechen soll.

Versuche ich dies im SQL als String auszulesen mittels UTL_RAW.CAST_TO_Varchar2(Feld) kommt nichts anzeigbares raus.

Wenn ich mal selber '123' mit UTL_RAW.CAST_TO_RAW('123') in das Feld schreibe steht darin:

313233

Es fehlen also immer die Nullen.

Irgendwie schein mir das ein Charset/Multibyte/irgendwas-Problem zu sein und ich weiß nicht, wie ich jetzt (SQL) aus dem Raw-Feld mit 003100320033 den Inhalt 123 rauskriege. Was muss ich das wie konvertieren vorher?
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: RAW Feld richtig auslesen

  Alt 30. Mär 2017, 09:04
003100320033

Ich weiß, dass das dem String 123 entsprechen soll.
Tut es auch. $31 ist der hexadezimale Code für 1, siehe Ascii-Tabelle. Und ein Unicodezeichen ist zwei Byte groß, also $0031.

Mit Raw-Feldern habe ich noch nicht gearbeitet und weiß daher nicht wie man die Auslesen kann. Ich hätte es mit FieldByName(...).AsWideString versucht, aber da Delphi 6 damals noch nicht unicodefähig war...
Ansonsten, wenn du es im Speicher jetzt als AnsiString hast mit 0, 0, 3, 1 usw. jeweils als ein Zeichen, könntest du jeweils 4 Zeichen kopieren und mit Chr(StrToInt('$' + Copy(DeinString, 1, 4))) versuchen auszulesen.

Vermutlich gibt es aber auch noch bessere Lösungen.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.737 Beiträge
 
Delphi 6 Enterprise
 
#3

AW: RAW Feld richtig auslesen

  Alt 30. Mär 2017, 10:14
Zur Klarstellung: Ich möchte das wenn möglich auf SQL-Ebene lösen, nicht in einer Delphianwendung. Hintergrund ist vereinfacht, dass 123 sowas wie ein Fremdschlüssel ist, der auf einen Datensatz in einer anderen Tabelle verweist (ohne das es jetzt tatsächlich ein Fremdschlüssel im Datenbank Sinne als Constraint ist). Die Fremd-Originalanwendung wird das vermutlich wie von jaenicke gedacht irgendwie in der Anwendung lösen, ich würde für eine externe Auswertung da gerne einen Join der zwei Tabellen hinbekommen.
Ralph
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
972 Beiträge
 
Delphi 6 Professional
 
#4

AW: RAW Feld richtig auslesen

  Alt 30. Mär 2017, 13:42
Hmm..

Schom mal mit 'Select cast(<RawdataField> AS NVARCHAR2) from TABLE' versucht?
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.737 Beiträge
 
Delphi 6 Enterprise
 
#5

AW: RAW Feld richtig auslesen

  Alt 30. Mär 2017, 15:14
Schom mal mit 'Select cast(<RawdataField> AS NVARCHAR2) from TABLE' versucht?
Liefert leider auch nur 003000310032 als "String".
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: RAW Feld richtig auslesen

  Alt 30. Mär 2017, 15:58
Vielleicht ist UTL_RAW ja das Problem. Vielleicht geht es mit UTL_I18N.RAW_TO_CHAR (DeinFeld, 'AL32UTF8')?
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.737 Beiträge
 
Delphi 6 Enterprise
 
#7

AW: RAW Feld richtig auslesen

  Alt 31. Mär 2017, 09:52
UTL_I18N. kannte ich nicht und das hat mir zunächst Hoffnung gemacht. Half aber leider auch nicht.
Wenn ich nichts sinnvolles mehr finde werde ich es versuchen mit:

Substr(Feld,4,1)||Substr(Feld,8,1)||Substr(Feld,12 ,1)

Da es nur um einen Teil des Feldes geht der dem PK einer anderen Tabelle entspricht und dieser Teil nur numerisch ist kann ich so aus z.B. 0032->2 gewinnen usw.
Wenn ich dann doch irgendwo bei Oracle noch eine andere Lösung finde, oder jemand von euch noch eine Idee hat, kann ich das ja anpassen.

Danke für den Einsatz
Ralph
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#8

AW: RAW Feld richtig auslesen

  Alt 1. Apr 2017, 17:26
Raw ist ziemlich alt, das UTL_RAW package sollte es schon in yestercentury Oracle versionen geben. (in denen habe ich es vor Ewigkeiten zuletzt benutzt, k.A. wie es mit 11g/12c aussieht)
Was du wohl suchst ist utl_raw.cast_to_varchar2 (bzw nvarchar2, je nach code page/encoding)
cast_to_raw funzt in die andere Richtung.
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  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 12:35 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