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
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
Comment