none
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

    Dienstag, 13. August 2013 13:44

Alle Antworten

  • Öffne die Tabelle in Access im Entwurfsmodus, was wird angezeigt? Text oder Zahl?

    Servus
    Winfried
    Dienstag, 13. August 2013 16:31
  • Im Entwurfsmodus wird Text, Feldgröße 38 angezeigt.

    Gruß

    Olaf

    Mittwoch, 14. August 2013 05:18
  • Im Entwurfsmodus wird Text, Feldgröße 38 angezeigt.

    Was wird sonst noch im Entwurfsmodus angezeigt? Format oder ähnliches? Zeig doch bitte ein Tabellenerstellungsscript vom SQL Server.

    Servus
    Winfried


    Servus Winfried

    Mittwoch, 14. August 2013 06:50
  • 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

    Mittwoch, 14. August 2013 07:11
  • 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

    Mittwoch, 14. August 2013 14:23
  • 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: Standard

    Die restlichen Feldeigenschaften zeigen keine Werte.

    Gruß

    Olaf

    Mittwoch, 14. August 2013 14:46
  • 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

    Mittwoch, 14. August 2013 14:53
  • Hallo Olaf,

    falls Du nicht über ein SQL Server Management Studio verfügst, so tut es notfalls auch eine Access SQL Passthrough Abfrage, die man füttert mit

    EXEC sp_help 'tabelle'

    Gruß Elmar

    Mittwoch, 14. August 2013 17:36
  • 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

      

    Donnerstag, 15. August 2013 09:46
  • 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

    Donnerstag, 15. August 2013 09:58
  • 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


    Donnerstag, 15. August 2013 10:25
  • 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
    Winfried


    Servus Winfried

    Donnerstag, 15. August 2013 10:27
  • 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

    Donnerstag, 15. August 2013 10:41
  • Hallo Winfried,

    die Tabelle heißt tatsächlich so -- mit dem Punkt hatte ich es auch schon probiert.

    Ich lasse es aber jetzt offen.

    Gruß

    Olaf

    Donnerstag, 15. August 2013 10:49
  • 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
    Winfried


    Servus Winfried

    Donnerstag, 15. August 2013 10:56
  • Hallo Elmar,

    Problem gelöst -- ich danke dir für deine Unterstützung.

    Gruß

    Olaf

    Donnerstag, 15. August 2013 11:35