Announcement

Collapse
No announcement yet.

ADOQuery <-> Excel Rundungsfehler bei Datumsfeldern

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

  • ADOQuery <-> Excel Rundungsfehler bei Datumsfeldern

    Hallo alle zusammen,

    Ich hab da ein Problem mit einer ADOQuery, wie ihr ja bestimmt schon an dem Titel erkannt habt. Folgendes :

    Ich hab eine "Excel 2000 Tabelle" und will mit einer ADOQuery die Daten auslesen...
    So weit so gut. Das funktioniert ja auch. Jetzt sind in dem Excel-Sheet sehr sehr viele Datumsfelder die mit folgender Formatmaske formatiert sind:

    "T h:mm", wobei ich schon festgestellt habe, das es nicht daran liegt.

    In diesen Feldern stehen meistens volle Stunden (8:00 Uhr, 16:00 Uhr, ...)
    Die Daten aus der ADOQuery zeige ich dann in einem StringGrid an
    wobei bei den Datumsfeldern nur die Zeit angezeigt werden soll.

    <PRE>
    y:= 0;
    while not aquExcel.Eof do
    begin
    Inc(y);
    stgAbgleich.RowCount := y + 1;

    for x := 0 to stgAbgleich.ColCount - 1 do
    begin
    Cell := TCell.Create;
    if x <> 0 then
    begin
    if aquExcel.Fields[x - 1].DataType = ftDateTime then
    begin
    if not aquExcel.Fields[x - 1].IsNull then
    begin
    Cell.Inhalt := aquExcel.Fields[x - 1].AsDateTime;
    end
    else
    begin
    Cell.Inhalt := aquExcel.Fields[x - 1].AsString;
    end;
    end
    else
    Cell.Inhalt := aquExcel.Fields[x - 1].AsString;

    stgAbgleich.Objects[x, y] := Cell;

    if x <> 0 then
    begin
    if aquExcel.Fields[x - 1].DataType = ftDateTime then
    begin
    if VarToStr(Cell.Inhalt) = '' then
    stgAbgleich.Cells[x, y] := ''
    else
    stgAbgleich.Cells[x, y] := TimeToStr(VarToDateTime(Cell.Inhalt))
    end
    else
    stgAbgleich.Cells[x, y] := VarToStr(Cell.Inhalt);
    end;
    end;
    end;
    aquExcel.Next;
    end;
    </PRE>

    Hier ist mir dann aufgefallen, daß einige, nicht alle Felder eine Abweichung von einer Sekunde haben. Ein Beispiel:
    (xls : 1 8:00; ADO : 7:59:59)
    in DateTime - Werten sind das
    (xls : 0.333333; ADO : 0.333322)

    Jetzt dient das Programm zum Datenabgleich zwischen Excel und einer ORACLE Datenbank was Fatal ist, weil die Werte ja immer unterschiedlich sind.
    Liegt das prinzipiell an der ADODataSet,
    oder mache ich irgent etwas falsch ?
    Es wäre echt nett, wenn mir einer von euch helfen könnte

    Gruß Stefan Laut

  • #2
    Hey Leute, ich beiße nicht, ihr könnt mir ruhig helfen :-)
    Es muß doch irgent einen geben, der das Problem kennt, oder
    bin ich etwa der erste, dem das aufgefallen ist

    Comment


    • #3
      Hi Stefan,

      das ist, soweit ich weiß, ein allgemeiner Rundungsfehler, der Dir immer wieder passieren kann. Da hilft nur, selbst eine Rundungsfunktion zu basteln.

      Viele Grüße von
      Thoma

      Comment


      • #4
        Irgentwie kann und will ich das nicht glauben. Da muß doch irgent ein Fehler in der Schnittstelle sein, weil ja die richtigen Werte in der Excel - Tabelle stehen... Wieso kommen dann andere Werte in der ADOQuery an ??

        Comment


        • #5
          Hallo Stefan,

          ich weiß nicht ob es daran liegt aber beim Datenexport aus Excel hatte ich das Problem zumindest.
          Zum analysieren der Datentypen (also auch Genauigkeit) verwendet die Schnittstelle im Extremfall nur die erste Zeile. Wenn nun dort zufällig ein Wert mit nur 3 oder 4 Nachkommastellen steht, dann werden alle anderen Werte entsprechend eigenartig gerundet. Wie gesagt das ist eine Vermutung, aber du kannst ja mal mit den Werten in der ersten Datenzeile spielen.

          Gruß Fal
          Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

          Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

          Comment


          • #6
            Ist echt ne super Idee gewesen Falk, daran hab ich nicht gedacht, aber.... :-( wie soll ichs sagen.... Fehlanzeige.

            Trotzdem Danke.

            Gruß Stefa

            Comment


            • #7
              Hallo Stefan,

              versuch wars wert ;-(
              Hast du dir mal Step bei Step angeschaut ab wann die Werte "verstümmelt" sind. Kommen sie schon als Ergebnis der ADO-Abfrage so an oder ist vielleicht eine der Konvertierungsroutinen (TimeToStr, VarToDateTime, etc.) schuld?

              Gruß Fal
              Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

              Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

              Comment


              • #8
                Hallo Falk,

                Die Werte kommen schon so in der ADOQuery an, aber das ist jetzt nicht mehr so wichtig, ich hab eine Rundungsfunktion bekommen, die zu funktionieren scheint, zumindest für meine Zwecke.

                Trotzdem danke für deine Bemühungen

                Gruß Stefa

                Comment

                Working...
                X