Fragensteller
Feldinhalte werden nicht vollständig übertragen - eingebunde Tabelle via ODBC 32 bit an SQL-Server 2008

Frage
-
Hallo,
bei einer in Access eingebundenen Tabelle aus einem SQL-Server 2008 zeigt sich bei der Datenblattansicht bei einem Textfeld, welches den Wert 0,456 (Text, Feldgröße 38) in der SQL-Tabelle enthält, dass Access hier den Wert 0,46 (linksbündig) anzeigt.
Zugriffe via Excel oder Jet-Report erbringen korrekte Ergebnisse.
ODBC Version 6.01.7601.17514 vom 20.11.2010.
Welche Einstellungen / Treiber beseitigen dieses Problem?
MFG
Alle Antworten
-
Hallo Olaf,
wegen der Feldgröße 38 vermute ich, dass die Tabelle im SQL Server als Decimal(38, n) angelegt wurde. Access kann aber maximal mit Decimal(28, n) umgehen, größere Datentypen werden als Text dargestellt, siehe auch:
INFO: Verbesserte ODBC-Datentypzuordnungen mit Jet 4.0
Ändere die Datengröße auf einen kleineren Wert.
Gruß Elmar
-
Hallo Elmar,
Datentyp Decimal(38,n) könnte sein - werde ich prüfen. Den Datentyp kann ich aber nicht anpassen, da die Tabelle aus Navision kommt. Den Zugriff habe ich sowohl über Access 2010 wie auch über 2013 (jeweils 32-Bit) probiert. Beide sollten JET 4.0 zur Grundlage haben?
Mit der Übernahme eines Textstrings habe ich ja prinzipiell kein Problem. Ich verstehe nur nicht, warum offensichtlich auf eine 2.te Stelle nach dem Komma gerundet wird.
Gruß
Olaf
-
Hallo Winfried,
mit einem Tabellenerstellungsscript vom SQL Server kann ich leider nicht dienen.
Folgende Feldeigenschaften werden mir in Access angezeigt:
Feldgröße: 38 ,Eingabe erforderlich :JA, Leere Zeichenfolge:JA, Indiziert:Nein
Unicode-Kompression:Nein, IME-Modus: Keine Kontrolle, IME-Satzmodus:Keine
Textausrichtung: StandardDie restlichen Feldeigenschaften zeigen keine Werte.
Gruß
Olaf
-
Hallo Olaf,
Access 2010/13 verwenden die Access Database Engine, eine (geringfügig) verbesserte Version. Aber am Prinzip hat sich nichts geändert. Denn die max. Größe eines Decimal ergibt sich indirekt daraus, was in ein (COM) Variant passt.
Die "Rundung" kann sich wiederum aus den Ländereinstellungen und der Formatierung ergeben. (Weswegen Winfried nach dem Rest fragte).
Wenn Du die Daten nur lesend verwenden willst, könntest Du anstatt dessen eine Sicht verwenden und dort ein
SELECT CAST(spalte AS decimal(28, 3)) AS Spalte
verwenden. Änderungen direkt an der Tabelle werden über Access vermutlich sowieso daneben gehen.
Gruß Elmar
- Als Antwort vorgeschlagen Winfried.Sonntag Freitag, 16. August 2013 15:34
-
Hallo Elmar,
die Passthrough Abfrage --EXEC sp_help 'dbo_Kunde$vk-preis'-- bringt bei Ausführung die Fehlermeldung, dass das Objekt nicht in der DB vorhanden ist oder für diesen Vorgang ungültig ist (#15009). Den Parameter LiefertDatensätze hatte ich auf Nein gesetzt.
Siehst du einen Syntaxfehler / Händlingsfehler?
Keine ausreichenden Rechte auf dem SQL-Server?
Gruß
Olaf
-
Hallo Elmar,
der Select cast steht mir in Access meiner Meinung nach nicht zur Verfügung. Ich habe hier mit CDBL(spalte) AS Spalte und einer entsprechenden Formatierung gearbeitet. Ergebnis bleibt immer gleich, ein auf zwei Stellen nach dem Komma gerundetes Feld. Auch wenn ich andere Datentypen für die Konvertierung wähle.
Wenn du von Ländereinstellungen sprichst, die sich auf die Rundung auswirken, welche meinst du dann?
Gruß
Olaf
-
der Select cast steht mir in Access meiner Meinung nach nicht zur Verfügung. Ich habe hier mit CDBL(spalte) AS Spalte und einer entsprechenden Formatierung gearbeitet. Ergebnis bleibt immer gleich, ein auf zwei Stellen nach dem Komma gerundetes Feld. Auch wenn ich andere Datentypen für die Konvertierung wähle.
Wenn du von Ländereinstellungen sprichst, die sich auf die Rundung auswirken, welche meinst du dann?
Der Select Cast steht dir nur im SQL Server zur Verfügung. Dort eine Sicht erstellen. Hast Du denn Zugriff auf die Datenbank vom SQL Server?
In der Systemsteuerung gibt es Ländereinstellungen, dort prüfen. Wenn Du dort etwas änderst, achte darauf dass Access geschlossen ist. Nimm nur eine Änderung vor, dann ausprobieren. Ansonsten weißt Du später vielleicht nicht, was die Lösung war.
Servus
Winfried
Servus Winfried
- Bearbeitet Winfried.Sonntag Donnerstag, 15. August 2013 10:29 1234
- Als Antwort vorgeschlagen Winfried.Sonntag Freitag, 16. August 2013 15:34
-
die Passthrough Abfrage --EXEC sp_help 'dbo_Kunde$vk-preis'-- bringt bei Ausführung die Fehlermeldung, dass das Objekt nicht in der DB vorhanden ist oder für diesen Vorgang ungültig ist (#15009). Den Parameter LiefertDatensätze hatte ich auf Nein gesetzt.
Siehst du einen Syntaxfehler / Händlingsfehler?
Heißt die Tabelle wirklich so? Probier doch mal 'dbo.Kunde$vk-preis'. Den Unterstrich hast/siehst Du vermutlich in Access so, im SQL Server ist das Trennzeichen ein Punkt. Alternativ das dbo. weglassen.
Servus
WinfriedServus Winfried
-
Hallo Winfried,
guter Riecher und guter Hinweis, Access neu zu starten.
Erster Versuch und es funktioniert alles wie gewünscht.
Ich fasse es nicht -- es lag an der in der Systemsteuerung hinterlegten Anzahl der Nachkommastellen.
Danke für deine Unterstützung.
Gruß
Olaf
-
guter Riecher und guter Hinweis, Access neu zu starten.
Erster Versuch und es funktioniert alles wie gewünscht.
Ich fasse es nicht -- es lag an der in der Systemsteuerung hinterlegten Anzahl der Nachkommastellen.
Danke für deine Unterstützung.
Dann hatte Elmar ja wieder mal den richtigen Riecher. ;)
Freut mich für Dich und Danke für die Rückmeldung. ;)
Servus
WinfriedServus Winfried