Announcement

Collapse
No announcement yet.

SQLState 22018

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • SQLState 22018

    Hallo,

    versuche verzweifelt in einen MSSQL Server einen Datumswert einzutragen. Der Fehler tritt nur auf wenn der Client in den Laendereinstellungen nicht auf Deutschland eingestellt ist.

    Umgebungsvariablen sind gesetzt :

    DateSeparator := '.';
    TimeSeparator := ':';
    ShortDateFormat := 'dd.mm.yyyy';
    LongDateFormat := 'dd.mm.yyyy';
    ShortTimeFormat := 'hh:nn:ss';
    LongTimeFormat := 'hh:nn:ss';

    Treiber : DBExpress
    (Oracle macht mir keine Probleme)

    Sobald ich den Insert direkt abschiese gibt es keinen Fehler
    dm1.sqldataset4.CommandText := 'insert into kstest (feld3) values (' + #39 + '12.12.2005' + #39 + ')';
    dm1.SQLDataSet4.ExecSQL();

    Wenn ich ueber Parameter arbeite bekomme ich den KonvertierungsError 22018

    Mit jeder Delphi Version !

    THANKS
    karl

  • #2
    Was du in Delphi einstellst und was der SQL-Server verwendet sind zwei Paar Schuhe. Das eine hat mit dem anderen nichts zu tun. Ich habe mir angewohnt, Datum in Stringform immer als YYYYMMDD an den SQL-Server zu senden, in deinem Fall also '20051212'. Das nimmt der SQL-Server auf jeden Fall, da es sich dabei um das ISO-Format handelt.

    bye, Helmu

    Comment


    • #3
      Weisst Du was das Verrueckte ist, es funktioniert nur nicht wenn ich ueber Parameter arbeite

      Feld3 ist ein Datums-Feld

      dm1.sqldataset4.CommandText := 'insert into kstest (feld2,feld3) values (:feld2,:feld3)';

      dm1.SQLDataSet4.ParamByName('feld2').AsString := 'sHelp';
      dm1.SQLDataSet4.ParamByName('feld3').AsString := '20051212'; //funktioniert auch nicht

      dm1.SQLDataSet4.ExecSQL();

      Habe alle moeglichen Varianten ausprobiert und komm nicht voran

      Comment


      • #4
        Loesung ist da

        wenn ich das Datum als yyy-mm-dd uebergebe funktioniert es immer, egal welche Country Einstellungen.

        Mal schauen was jetzt Oracle macht?

        Comment


        • #5
          Hallo Karl,<p>
          warum benutzt du nicht AsDateTime ?
          <p>
          Heik

          Comment


          • #6
            Hallo,

            du könntest auch mit dem SQL-Server experimentieren. Mit
            SET DATEFORMAT dmy
            wüde man für die Anweisung das Datumsformat anpassen können.
            Allerdings verstehe ich dann nicht, warum die Anweisung ohne Parameter funktioniert.

            Grüße

            Juli

            Comment


            • #7
              Das hat wohl damit zu tun, dass der SQL-Server einmal eine komplette SQL-Abfrage als Text bekommt, alles parst, feststellt, oh das Feld ist ja ein Datumsfeld (dann konvertiert), im zeiten Fall aber eine parametrisierte Query bekommt und die Parameter dann dort "reinpackt".
              <p>
              Delphi meldet den Parameter aber als String an.
              <p>
              Heik

              Comment


              • #8
                asDateTime und Set Dateformat dmy habe ich alles ausprobiert.

                Es ist wohl so, dass bei einer parametrisierter Query das Format auf yyyy-mm-dd stehen muss.

                Aber natuerlich nur wenn die Laendereinstellungen nicht auf Deutsch eingestellt sind, ansonsten funktioniert alles auch mit dem 'normalen' Format dd.mm.yyyy problemlos.

                Die Info mit dem parsen scheint wohl zu passen

                Comment

                Working...
                X