Sortierung Ziffer vor Buchstabe

22/08/2007 - 21:27 von Ralf Reimann | Report spam
Hallo zusammen,

ich greife mit Access 2002 auf eine Oracle8 Datenbank zu (verknüpfte
Tabelle). In der Oracle DB gibt es ein Textfeld, was als Sortierfeld genutzt
wird. Die Delphianwendung, die darauf zugreift, gibt z.B. als aufsteigende
Sortierung den Eintrag "B0.426A" vor "B0.4B78" aus. Access macht das genau
andersherum.
Gibt es eine Einstellung in Access, mit der also Ziffern vor Buchstaben
ausgegeben werden?

Gruß Ralf
 

Lesen sie die antworten

#1 Josef Poetzl
22/08/2007 - 22:47 | Warnen spam
Hallo!

Ralf Reimann schrieb:
ich greife mit Access 2002 auf eine Oracle8 Datenbank zu (verknüpfte
Tabelle). In der Oracle DB gibt es ein Textfeld, was als Sortierfeld genutzt
wird. Die Delphianwendung, die darauf zugreift, gibt z.B. als aufsteigende
Sortierung den Eintrag "B0.426A" vor "B0.4B78" aus. Access macht das genau
andersherum.



Das ist eine Gemeinheit von ODBC. ;-)
Access selbst würde so sortieren, wie du es willst. Aber in deinem
Fall wird vermutlich die OrderBy-Anweisung an Oracle weitergegeben und
dort wird anders sortiert.

Eine Notlösung wàre die Verwendung einer selbst geschriebenen
VBA-Funktion in der Abfrage. Dies Funktion soll verhindern, dass
Access/ODBC die OrderBy-Anweisung an Oracle weiter gibt und
stattdessen Access die Sortierung übernimmt. Das bremst natürlich die
Abfrage aus!

Beispiel:
SELECT Textfeld FROM Tabelle
Order By Textfeld
=>
B0.4B78
B0.426A

Lösung:
in einem normalen Modul eine Funktion erstellen:
Public Function KillOdbcOpt(X As Variant) As Variant
KillOdbcOpt = X
End Function

Nun diese Funktion in die Abfrage einbauen:
SELECT Oracle_DATENTYPEN.ID, TEXTFELD
FROM Oracle_DATENTYPEN
ORDER BY KillOdbcOpt(TEXTFELD)
=>
B0.426A
B0.4B78

Eine andere (imo bessere) Lösung ist die Verwendung einer
Pass-Through-Abfrage mit Angabe der Sortierung für Oracle.

z.B.
SELECT TEXTFELD
FROM TABELLE
ORDER BY NLSSORT(TEXTFELD, 'NLS_SORT=german')
=>
B0.4B78
B0.426A


SELECT TEXTFELD
FROM TABELLE
ORDER BY NLS_UPPER(TEXTFELD, 'NLS_SORT=binary')
=>
B0.426A
B0.4B78


mfg
Josef

EPT: (Access Error Prevention Table) http://access.joposol.com/
FAQ: (Access-FAQ von Karl Donaubauer) http://www.donkarl.com/

Ähnliche fragen