[Gelöst] SQL Decimal wird in Access zu Text

7. Januar 2008 22:52

Sämtliche decimal-Felder in Navision werden auf dem SQL-Server als Felder vom SQL-Typ decimal angelegt.

Erstelle ich eine Verknüpfung in Access zu einer SQL-Tabelle, so werden alle decimal-Felder zu Text(!)-Felder konvertiert. Dies liegt daran, dass Access mit diesem Datentyp nichts anfangen kann.

Gibt es eine Möglichkeit, via besondere ODBC-Treiber oder sonstige Tricks Access dazu zu bewegen, diese Felder automatisch als float-Werte (oder was sonst dazu passen könnte, bin kein Access-Kenner) umzuwandeln?

Im Augenblick kenne ich nur Workarounds, erst in der Abfrage diesen Text-Wert in einen Zahlenwert zu konverieren (z.B. indem man den Feldnamen mit +1-1 erweitert) - es muss doch irgendwie anders gehen??
Zuletzt geändert von Natalie am 9. Januar 2008 09:39, insgesamt 1-mal geändert.

8. Januar 2008 09:40

Welches DBMS ist die Basis?

8. Januar 2008 09:42

?? Sorry, verstehe die Frage nicht. Was muss ich wo nachschauen?

8. Januar 2008 09:55

SQL-Server

Ich sollte mal lesen üben... :-|

In der ODBC-Treiberkonfiguration gibt es das Boolean Zeichenkonvertierung. Ist es evtl. gesetzt oder nicht?
Zuletzt geändert von MrBurns am 8. Januar 2008 10:07, insgesamt 1-mal geändert.

8. Januar 2008 09:59

MrBurns hat geschrieben:In der ODBC-Treiberkonfiguration gibt es das Boolean Zeichenkonvertierung. Ist es evtl. gesetzt oder nicht?

Beides ausprobiert - ohne Erfolg.

8. Januar 2008 10:15

Was passiert, wenn Du in der Verknüpfung den Datentyp einfach änderst?
Eine Alternative wäre evtl. ein CAST.

8. Januar 2008 10:22

MrBurns hat geschrieben:Was passiert, wenn Du in der Verknüpfung den Datentyp einfach änderst?
Eine Alternative wäre evtl. ein CAST.

Eine Änderung an der Verknüpfung hätte eine Änderung der Originaltabelle im SQL-Server zu folge. Das rühre ich nicht an.

Ist CAST ein SQL-Befehl? Soweit ich weiß, kann ich innerhalb der Verknüpfung nichts machen/ändern, sondern erst in der Abfrage (und da hab ich das ja schon gemacht).

8. Januar 2008 10:30

Ein Cast bzw. Typecast ist ein Befehl zur Datentypenänderung. Manche SQL-Dialekte wie z.B. T-SQL unterstützen dies. Bei Access-SQL weiß ich es nicht zu 100%. In der Access-Hilfe werden die Schlüsselwörter CAST und CONVERT angezeigt.

8. Januar 2008 10:39

MrBurns hat geschrieben:Ein Cast bzw. Typecast ist ein Befehl zur Datentypenänderung. Manche SQL-Dialekte wie z.B. T-SQL unterstützen dies. Bei Access-SQL weiß ich es nicht zu 100%. In der Access-Hilfe werden die Schlüsselwörter CAST und CONVERT angezeigt.


Aber dies kann ich doch erst in der Abfrage verwenden und nicht schon in der Verknüpfung ,oder?

8. Januar 2008 10:45

Da liegst Du richtig.

9. Januar 2008 09:38

Wir haben es - fürs Erste - gelöst, jedoch nicht auf Access-Seite, sondern direkt auf dem SQL-Server.

Man erstelle einen View auf die entsprechende Tabelle in Form einer einfachen SELECT-Anweisung mit Typkonvertierung.
Als Beispiel verwende ich hier eine Tabelle namens Test mit den Feldern Code (=Varchar(20)) und Decimal(=decimal).
Der Befehl lautet nun:
Code:
SELECT CONVERT(int, Code), CONVERT(float, Decimal)
FROM Test;


Dieses Verfahren bietet zweilerei Vorteile:
  • Dieser View ist wie die Originaltabelle Test in Access als zu verknüpfende Tabelle verwendbar
  • Die Ergebnismenge liegt in einem direkt für Access verwendbaren Format vor, somit nummerisch statt Text.
  • Ist das Feld Code leer (also mit Leerstring gefüllt), so konvertiert der SQL-Server dieses Feld automatisch richtig in eine (Integer-)Null :-)


Nachteil: Naja, es wird wohl nicht nur bei dieser einen Tabelle bleiben ;-)