none
Access ODBC MSSQL 2008 oder 2012 Memofeld / nvarchar(max) ODBC Fehler wenn Memofeld Inhalt grösser 4000 Zeichen

    Frage

  • Hallo

    ich habe über ODBC Tabellen aus einer mssql DB in Access (2003) via ODBC (DRIVER={SQL Server Native Client 11.0} oder DRIVER={SQL Server Native Client 10.0}) Tabellen eingebunden.

    Ich bekomme aber immer fehler wenn ich ein ursprüngliches Memofeld (Jetzt nvarchar(max)) welches mehr als 4000 zeichen im SQL Server hat zu aktualisieren

    Fehlermeldung: ODBC Fehler

    Die Zeichenfolgedaten wurden rechts abgeschnitten(0#)


    • Bearbeitet MCDPone Mittwoch, 30. Oktober 2013 08:54
    Mittwoch, 30. Oktober 2013 08:53

Antworten

  • Hallo!

    > also in meiner MdB war es ein Memofeld dann habe ich gedacht aus
    > Memo mache ich ein nvarchar(max) (schlechte Idee?)

    Nein, das passt schon. Die "alte" Variante war ntext.
    (Ich dachte ursprünglich du hast in der SQL-Server-Tabelle von ntext auf nvarchar(max) umgestellt.
    Daher die Nachfrage, ob du die Tabelle neu verknüpft hast.

    > Timestamp nein (muss das? wenn ja kannst du mir dann sagen wieso?)

    Der Timestamp erleichtert dem SQL-Server (in Verbindung mit Access/ODBC) herauszufinden ob sich die Daten geändert haben. Ob das auch mit deinem Problem zusammenhängen kann, weiß ich nicht - ausprobieren könntest du es aber.

    Hast du auch schon einmal mit dem "Windows-Standard-Treiber" experimentiert?
    Ich verwende immer noch den "SQL Server" statt dem "SQL Server Native Client 10.0" und konnte dabei keine Probleme feststellen. (Hab allerdings mit Access 2010 und nicht mit 2003 getestet.)

    BTW: Wenn du die verknüpfte Tabelle im Entwurf öffnest, welcher Datentyp wird dann im betroffenen Feld angezeigt?

    mfg
    Josef


    Code-Bibliothek für Access-Entwickler
    AccUnit - Testen von Access-Anwendungen
    Virtueller Access-Stammtisch


    • Bearbeitet Josef Pötzl Mittwoch, 6. November 2013 13:00
    • Als Antwort markiert MCDPone Donnerstag, 7. November 2013 13:21
    Mittwoch, 6. November 2013 12:58

Alle Antworten

  • Hallo!

    "ursprüngliches Memofeld"

    War das vorher ein ntext-Feld?
    Hast du die verknüpfte Tabelle aktualisiert (neue verknüpft)?
    Ist ein PK und ein Timestamp-Feld in der Tabelle?

    Wann kommt diese Fehler?
    Tritt er auf, wenn du per Code oder wenn du die Daten in einem gebundenen Formular ändert?
    Tritt er auch auf, wenn du die Daten direkt in der verknüpften Tabelle änderst?

    mfg
    Josef


    Code-Bibliothek für Access-Entwickler
    AccUnit - Testen von Access-Anwendungen
    Virtueller Access-Stammtisch


    • Bearbeitet Josef Pötzl Donnerstag, 31. Oktober 2013 11:10
    Donnerstag, 31. Oktober 2013 11:09
  • Hi,

    ggfs. kennt der Treiber oder Access 2003 nvarchar( MAX ) nicht, sondern nur nvarchar( <zahl> ) und da ist die maximale Grenze bei 4000 Zeichen.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community


    Donnerstag, 31. Oktober 2013 12:37
    Moderator
  • Hallo Josef,

    -ursprüngliches Memofeld"

    -War das vorher ein ntext-Feld?

    also in meiner MdB war es ein Memofeld dann habe ich gedacht aus Memo mache ich ein nvarchar(max) (schlechte Idee?)

    -Hast du die verknüpfte Tabelle aktualisiert (neue verknüpft)?

    klar hab ich gemacht

    -Ist ein PK und ein Timestamp

    PK ja Timestamp nein (muss das? wenn ja kannst du mir dann sagen wieso?)

    -Tritt er auf, wenn du per Code oder wenn du die Daten in einem gebundenen Formular ändert?
    -Tritt er auch auf, wenn du die Daten direkt in der verknüpften Tabelle änderst?

    bei beiden

    Mittwoch, 6. November 2013 12:20
  • Hallo Stefan

    ich bin mir nicht sicher aber wenn ich die Tabellen über ODBC einbinde und den treiber

    ODBC (DRIVER={SQL Server Native Client 11.0} oder DRIVER={SQL Server Native Client 10.0})

    benutze hat das was mit der Access Version zu tun? nicht dann eher mit dem ODBC treiber

    Mittwoch, 6. November 2013 12:23
  • Hallo!

    > also in meiner MdB war es ein Memofeld dann habe ich gedacht aus
    > Memo mache ich ein nvarchar(max) (schlechte Idee?)

    Nein, das passt schon. Die "alte" Variante war ntext.
    (Ich dachte ursprünglich du hast in der SQL-Server-Tabelle von ntext auf nvarchar(max) umgestellt.
    Daher die Nachfrage, ob du die Tabelle neu verknüpft hast.

    > Timestamp nein (muss das? wenn ja kannst du mir dann sagen wieso?)

    Der Timestamp erleichtert dem SQL-Server (in Verbindung mit Access/ODBC) herauszufinden ob sich die Daten geändert haben. Ob das auch mit deinem Problem zusammenhängen kann, weiß ich nicht - ausprobieren könntest du es aber.

    Hast du auch schon einmal mit dem "Windows-Standard-Treiber" experimentiert?
    Ich verwende immer noch den "SQL Server" statt dem "SQL Server Native Client 10.0" und konnte dabei keine Probleme feststellen. (Hab allerdings mit Access 2010 und nicht mit 2003 getestet.)

    BTW: Wenn du die verknüpfte Tabelle im Entwurf öffnest, welcher Datentyp wird dann im betroffenen Feld angezeigt?

    mfg
    Josef


    Code-Bibliothek für Access-Entwickler
    AccUnit - Testen von Access-Anwendungen
    Virtueller Access-Stammtisch


    • Bearbeitet Josef Pötzl Mittwoch, 6. November 2013 13:00
    • Als Antwort markiert MCDPone Donnerstag, 7. November 2013 13:21
    Mittwoch, 6. November 2013 12:58
  • Am 06.11.2013 schrieb MCDPone:

    /-Ist ein PK und ein Timestamp/

    PK ja Timestamp nein (muss das? wenn ja kannst du mir dann sagen wieso?)

    Timestamp sollte immer dabei sein. Ansonsten kannst Du in Access
    Fehlermeldungen bekommen, ob Du die Änderungen die ein anderer
    gespeichert hat oder deine Änderungen speichern möchtest. Ganz ungute
    Sache das.


    Servus
    Winfried

    Gruppenrichtlinien
    WSUS Package Publisher
    HowTos zum WSUS Package Publisher

    Mittwoch, 6. November 2013 17:51
  • Hallo Josef

    wenn ich den ODBC Treiber {SQL Server} benutze geht es DANKE

    gibt es irgendwo eine liste der unterschiede zwischen diesen treibern?

    wenn ich mich recht erinnere hatte ich irgend ein anderes Problem mit dem treiber - nur fällt mir das natürlich nicht mehr ein

    Nur noch Fragen zu der Timestamp spalte wie würdest du diese Anlegen

    je Tabelle?

    kann ich die Spalte einfach Timestamp nennen oder macht das Probleme in SQL Abfragen oder würdest du die Spalte tblName_Timestamp nennen?

    funktioniert das zwischen Jet/ODBC auch mit rowversion (hab gelesen soll das neue Timestamp sein)

    Muss ich bei Timestamp einen Standardwert hinterlegen oder reicht es wenn der Datentyp Timestamp ist

    Donnerstag, 7. November 2013 13:37
  • Hallo!

    timestamp ist in neueren SQL-Server-Versionen nur ein anderer Name für rowversion.
    => http://msdn.microsoft.com/en-us/library/ms182776.aspx

    Der Name für das Attribut ist im Prinzp auch egal - ich würde nur keinen Datentyp als Namen verwenden - ein einfaches "rv" oders "ts" oder "DiesesFeldWirdEinBinaerFeldInDerVerknuepftenTabelleInAccess" reicht auch. :-)

    mfg
    Josef


    Code-Bibliothek für Access-Entwickler
    AccUnit - Testen von Access-Anwendungen
    Virtueller Access-Stammtisch

    Donnerstag, 7. November 2013 17:11
  • Am 07.11.2013 schrieb MCDPone:

    Nur noch Fragen zu der Timestamp spalte wie würdest du diese Anlegen

    je Tabelle?

    Natürlich, und anschließend die Tabellen im Access-FE wieder neu
    verknüpfen.

    kann ich die Spalte einfach Timestamp nennen oder macht das Probleme in SQL Abfragen oder würdest du die Spalte tblName_Timestamp nennen?

    Bei mir heißen die immer fldTimestamp.

    funktioniert das zwischen Jet/ODBC auch mit rowversion (hab gelesen soll das neue Timestamp sein)

    In SQL 2012 gibt es Timestamp noch.

    Muss ich bei Timestamp einen Standardwert hinterlegen oder reicht es wenn der Datentyp Timestamp ist

    Einfach nur den Datentyp Timestamp anlegen.


    Servus
    Winfried

    Gruppenrichtlinien
    WSUS Package Publisher
    HowTos zum WSUS Package Publisher

    Donnerstag, 7. November 2013 17:15
  • Hallo
    Josef,

    jetzt weiss ich wieder was mein Problem bei dem ODBC Treiber

    DRIVER={SQL Server}

    ist die Datumsfelder des SQL Servers werden als Datentyp Text in Access Tabellen
    angezeigt und für mich unbrauchbar (Access 2003) (gerade getestet auch Access 2013 Datumsfeld = Textfeld)

    Ich habe
    gestern mit Access 2013 experimentiert dort läuft eine mdB mit dem

    DRIVER={SQL Server Native Client 11.0} auch mit Memo feldern

    Leider tue ich mich echt schwer in Access 2013 aber das ist ja wohl eher ein persönliches problem

    oder hast du eine andere lösung für das Text/Datum Problem




    • Bearbeitet MCDPone Freitag, 8. November 2013 09:19
    Freitag, 8. November 2013 09:18
  • Hallo!

    Du verwendest vermutlich Date und nicht DateTime im SQL-Server, oder?
    Beim alten Treiber ({SQL Server}) wirst du generell Probleme bekommen, wenn du die neueren Datentypen einsetzen willst, die dieser Treiber nicht kennt.

    Ich verwende in meinen Datenbanken immer datetime - damit gibt es keine Probleme mit Access. (Beachte: der Date-Datentyp in Jet entspricht DateTime.)

    > oder hast du eine andere lösung für das Text/Datum Problem

    Hast du schon geprüft, ob das Problem auch in einem ADODB-Recordset auftritt? - Falls es mit ADODB funktioniert, könntest du die Formulare an ein ADODB-Recordset binden.

    mfg
    Josef


    Code-Bibliothek für Access-Entwickler
    AccUnit - Testen von Access-Anwendungen
    Virtueller Access-Stammtisch

    Freitag, 8. November 2013 10:33