none
Frage zu einer Fehlermeldung

    Frage

  • Hallo an alle!

    Ich bekomme neuerdings von Access eine Fehlermeldung, die ich nicht verstehe bzw. die mir nicht logisch oder passend erscheint.

    Erst einmal Daten zum Systemaufbau:

    Das Access-Frontend (eine MDE; Access 2003) lief ursprünglich auf einem Terminalserver auf WinSrv 2008 R2 und mit Office 2003 (für das Access ist die Runtime 2003 installiert). Die Daten liegen auf einem SQL 2005 Server und das Fontend ist per ODBC angeschlossen Da kam der Fehler nicht.

    Jetzt wurde ein neuer Terminalserver eingerichtet mit WinSrv 2012 R2, Office 2010 und Access 2003 Runtime. Seit dem kommt immer wieder diese merkwürdige Fehlermeldung.

    "Der von Ihnen eingegebene Wert genügt nicht der Gültigkeitsregel, die für das Feld bzw. Steuerelement definiert ist."

        '###################################################################
        '### setzte Filter neu und zeige alle Detailsätze im Formular an ###
        SQL = "SELECT DISTINCTROW * FROM Auftrag INNER JOIN Auftrag_Einzelpos_Artikel ON Auftrag.Auftragsnr = Auftrag_Einzelpos_Artikel.Auftragsnr"
        SQL = SQL + " WHERE((Auftrag_Einzelpos_Artikel.Artikelname = '" & Me![AN] & "')"
        SQL = SQL + " AND (Auftrag_Einzelpos_Artikel.LS_Rück_Datum IS NULL))"
        If Me.cmbFilterOwner <> -1 Then
          SQL = SQL & " AND Auftrag_Einzelpos_Artikel.LS_Ort = " & Me.cmbFilterOwner
        End If
        ' [ /AP ]
        SQL = SQL + " ORDER BY Auftrag_Einzelpos_Artikel.LS_Datum DESC , Auftrag_Einzelpos_Artikel.Plan_LS_Datum"
        
        'Forms![Dispo_Center_Auftrag].Requery
        'Sleep 1000 'Millisekunden
        Forms![Dispo_Center_Auftrag].RecordSource = SQL    <-------
        Forms![Dispo_Center_Auftrag].Requery
    

    Der Fehler tritt an der Stelle auf, wo ich das SQL Statement der RecordSource des Formulars zuweise. Aber komischerweise nicht beim öffnen des Formulars, sondern erst nach einer Aktion auf dem Formular.

    Das Formular zeigt Dispo-Konflikte an und bietet verschiedene Möglichkeiten an, diese Konflikte zu beseitigen. Wie gesagt beim öffnen des Formulars funktioniert diese Funktion, nach eine Konfliktbeseitigung bekomme ich obige Fehlermeldung.

    Da ich aber in keinem einzigen Feld, Steuerelement oder Formular eine Gültigkeitsregel definiert habe, möchte ich gerne wissen, wie dieser Fehler zustande kommt und wie ich diesen beseitigen kann???

    Ich hoffe auf eure Hilfe.

    Viele Grüße

    Thorsten Schröer


    Thorsten Schröer Dipl-Inform (FH) - EDV, Beratung & Service - double-D-IT -Office- / Information system support Bismarckstraße 18a Germany-12169 Berlin Steglitz phone: &#43;49-(0)30-303286770 fax: &#43;49-(0)30-303286779

    Dienstag, 8. März 2016 13:40

Alle Antworten

  • Hallo Thorsten,
    zeig doch mal die produzierte SQL.
    2 Stellen scheinen Interressant:
    1,. Me![An]
    2. Me.cmbFilterOwner

    Grüße Alexander

    Dienstag, 8. März 2016 14:02
  • der SQL String sieht so aus (Beispielhaft):

    SELECT DISTINCTROW * 
    FROM Auftrag INNER JOIN Auftrag_Einzelpos_Artikel ON Auftrag.Auftragsnr = Auftrag_Einzelpos_Artikel.Auftragsnr 
    WHERE((Auftrag_Einzelpos_Artikel.Artikelname = 'Kurbelstativ -Stahl-   max. Höhe 3,6m') AND (Auftrag_Einzelpos_Artikel.LS_Rück_Datum IS NULL)) AND Auftrag_Einzelpos_Artikel.LS_Ort = 1 ORDER BY Auftrag_Einzelpos_Artikel.LS_Datum DESC , Auftrag_Einzelpos_Artikel.Plan_LS_Datum


    Thorsten Schröer Dipl-Inform (FH) - EDV, Beratung & Service - double-D-IT -Office- / Information system support Bismarckstraße 18a Germany-12169 Berlin Steglitz phone: &#43;49-(0)30-303286770 fax: &#43;49-(0)30-303286779

    Dienstag, 8. März 2016 14:17
  • Hallo Thorsten,
    nun kennen wir ja dein Datenbankmodel nicht.

    ist LS_Ort numerisch?
    AND Auftrag_Einzelpos_Artikel.LS_Ort = 1
    Grüße Alexander

    Dienstag, 8. März 2016 14:32
  • Der Artikelname ist ein NVARCHAR(62) und LS_Ort vom Typ smallint mit Standardwert ((0))

    Thorsten Schröer Dipl-Inform (FH) - EDV, Beratung & Service - double-D-IT -Office- / Information system support Bismarckstraße 18a Germany-12169 Berlin Steglitz phone: &#43;49-(0)30-303286770 fax: &#43;49-(0)30-303286779

    Dienstag, 8. März 2016 14:41
  • Hallo!

    Habt ihr beim Umzug auch etwas Richtung BE geändert, SQL Server Version oder ODBC-Treiber?

    Klappt die Sache, wenn du den WHERE-Abschnitt (und auch den ORDER BY-Abschnitt) weglässt? Falls ja, dann füge die Kriterien mal Schritt-für-Schritt hinzu und teste jedesmal, wann der Hänger kommt.

    Natürlich musst du bei diesem Test mit der Klammerung aufpassen bzw. dann auch ein Leerzeichen nach dem "WHERE" einfügen, damit du dir keine Syntaxfehler einfängst.

    Bissel gefährlich sieht der Umlaut im Feldnamen "LS_Rück_Datum" aus. Sowas solltest du generell vermeiden. Setze den Namen mal in eckige Klammern, also [LS_Rück_Datum].

    Übrigens ist das abschließende Requery überflüssig und nur eine Performancebremse, weil die Neuzuweisung der Datenherkunft bereits die stärkste machbare Aktualisierung darstellt.


    cu
    Karl
    Access FAQ (de/it): donkarl.com
    Access Lobby: AccessDevelopers.org

    Dienstag, 8. März 2016 14:47
  • Am 08.03.2016 schrieb Thorsten Schröer:

    Jetzt wurde ein neuer Terminalserver eingerichtet mit WinSrv 2012 R2, Office 2010 und Access 2003 Runtime. Seit dem kommt immer wieder diese merkwürdige Fehlermeldung.

    Gibt es einen besonderen Grund, weshalb hier keine Access 2010 SP2
    Runtime eingesetzt wird? Auch die Runtime von Access 2003 ist schon
    lange aus dem Support. Und eine MDB/MDE läuft IMHO auch mit A2010 ganz
    wunderbar.

    Servus
    Winfried


    Access-FAQ: http://www.donkarl.com/AccessFAQ.htm Access-Stammtisch: http://www.access-muenchen.de
    NNTP-Bridge für MS-Foren: http://communitybridge.codeplex.com/
    vbeTwister: http://www.vbetwister.com/

    Dienstag, 8. März 2016 17:22
  • Hallo!

    Habt ihr beim Umzug auch etwas Richtung BE geändert, SQL Server Version oder ODBC-Treiber?

    Klappt die Sache, wenn du den WHERE-Abschnitt (und auch den ORDER BY-Abschnitt) weglässt? Falls ja, dann füge die Kriterien mal Schritt-für-Schritt hinzu und teste jedesmal, wann der Hänger kommt.

    Natürlich musst du bei diesem Test mit der Klammerung aufpassen bzw. dann auch ein Leerzeichen nach dem "WHERE" einfügen, damit du dir keine Syntaxfehler einfängst.

    Bissel gefährlich sieht der Umlaut im Feldnamen "LS_Rück_Datum" aus. Sowas solltest du generell vermeiden. Setze den Namen mal in eckige Klammern, also [LS_Rück_Datum].

    Übrigens ist das abschließende Requery überflüssig und nur eine Performancebremse, weil die Neuzuweisung der Datenherkunft bereits die stärkste machbare Aktualisierung darstellt.


    cu
    Karl
    Access FAQ (de/it): donkarl.com
    Access Lobby: AccessDevelopers.org

    Guten Morgen,

    der SQL Server ist der gleiche und wir verwenden auch noch den gleichen ODBC Treiber.

    Mit den Feldnamen bin ich selber nicht glücklich, aber die DB ist schon ca. 15 Jahre alt und es haben schon so einige Programmierer sich darin verewigt.

    Die eckigen Klammern kann ich hinzufügen, macht aber an dieser Stelle kaum einen Unterschied. Ich versuche das mal mit dem weglassen der Where Bedingung. Das Problem ist nur, dass der Fehler nur unsystematisch auftritt und schwer nachzuvollziehen ist.


    Thorsten Schröer Dipl-Inform (FH) - EDV, Beratung & Service - double-D-IT -Office- / Information system support Bismarckstraße 18a Germany-12169 Berlin Steglitz phone: &#43;49-(0)30-303286770 fax: &#43;49-(0)30-303286779

    Mittwoch, 9. März 2016 07:33
  • Gibt es einen besonderen Grund, weshalb hier keine Access 2010 SP2

    Runtime eingesetzt wird? Auch die Runtime von Access 2003 ist schon
    lange aus dem Support. Und eine MDB/MDE läuft IMHO auch mit A2010 ganz
    wunderbar.

    Servus
    Winfried


    Access-FAQ: http://www.donkarl.com/AccessFAQ.htm Access-Stammtisch: http://www.access-muenchen.de
    NNTP-Bridge für MS-Foren: http://communitybridge.codeplex.com/
    vbeTwister: http://www.vbetwister.com/

    Der neue Server musste sehr schnell in Betrieb genommen werden, daher konnten wir das einfach nicht testen. Außerdem hätten wir evtl. noch das Frontend für Access 2010 umprogrammmieren müssen und das wollen wir vermeiden solange es geht (da solche Arbeiten vom Kunden weder verstanden, noch bezahlt werden).

    Thorsten Schröer Dipl-Inform (FH) - EDV, Beratung & Service - double-D-IT -Office- / Information system support Bismarckstraße 18a Germany-12169 Berlin Steglitz phone: &#43;49-(0)30-303286770 fax: &#43;49-(0)30-303286779

    Mittwoch, 9. März 2016 07:38
  • Hallo!

    Das Problem ist nur, dass der Fehler nur unsystematisch auftritt und schwer nachzuvollziehen ist.

    Wenn der Fehler immer nur sporadisch auftritt, dann könnte das erzeugte SQL-Statement der Grund dafür sein.

    Vorschlag:
    Du schreibst im Fall eines Fehlers jeweils das SQL-Statement in eine Tabelle. Später kannst Du Dir dann die Statements, die zum Fehler geführt haben, einzeln anschauen.
    Wenn Du mit dem bloßen Auge keinen Fehler erkennst, kann Du die SQL-Statements auch direkt als Abfrage ausführen. Wahrscheinlich wirst Du dann ebenfalls eine Fehlermeldung erhalten. Diese kannst Du dann im Abfrageeditor analysieren.

    CU


    Thomas@Team-Moeller.de
    Blog: Blog.Team-Moeller.de
    Homepage: www.Team-Moeller.de


    Samstag, 12. März 2016 11:00
  • Hallo Thorsten

    Könnte es sein dass der Fehle an den Länderienstellungen Dezimaltrennzeichen oder Listentrennzeichen zu finden ist.

    überprüfe das mal den 10.0 und 10,0 ergibt einen Fehler, auch IN(10, 12 , 13) oder IN(10; 12; 13) ist nicht das Gleiche.

    Gruss Markus

    Mittwoch, 16. März 2016 13:09