Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi [Firebird] TimeStamp Problem (https://www.delphipraxis.net/139437-%5Bfirebird%5D-timestamp-problem.html)

Chemiker 28. Aug 2009 22:38

Datenbank: Firebird • Version: 2.1 • Zugriff über: Fiblus

[Firebird] TimeStamp Problem
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo,

im Anhang habe ich 2 Screenhots angehängt, in dem aus einer Datenbank eine Pivot-Tabelle erzeugt wird. In dem einen Fall wird sie aus der Test-Datenbank zusammengestellt und verhält sich richtig in dem andern Screenshot ist die Zusammenstellung wie sie auf der Echtdatenbank zusammengestellt wird. Das Ergebnis ist auf der gleichen Applikation erzeugt, die Datenbank ist auch identisch, aber trotzdem kommt es zu diesem Unterschiedlichen Ergebnis. Die Datensätze sehen in der Datenbank auch gleich aus.

Hat jemand eine Idee voran das Liegen kann?

Bis bald Chemiker

mkinzler 29. Aug 2009 07:31

Re: [Firebird] TimeStamp Problem
 
Im 2. Fall scheint der Zeitanteil zu fehlen.

Chemiker 29. Aug 2009 07:51

Re: [Firebird] TimeStamp Problem
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo mkinzler,

habe mal 2 Ausschnitte von den jeweiligen Datenbanken angehängt. Ich kann keinen Unterschied erkennen.

Bis bald Chemiker

mkinzler 29. Aug 2009 07:53

Re: [Firebird] TimeStamp Problem
 
Ich schon, wie vermutet fehlt der Zeitanteil im Timestamp

Chemiker 29. Aug 2009 07:58

Re: [Firebird] TimeStamp Problem
 
Hallo mkinzler,

die Zeit wird doch bei beiden Tabellen hochgezählt.

Bis bald Chemiker

hoika 29. Aug 2009 09:08

Re: [Firebird] TimeStamp Problem
 
Hallo,

ich kenne Pivot-Tabellen nicht *zugeb, Wissenslücke ;) *,
aber "falsche Daten" stehen nach dem Import von Excel viele Nullen ?


Heiko

Chemiker 29. Aug 2009 09:28

Re: [Firebird] TimeStamp Problem
 
Hallo hoika,

die Daten werden nach Excel exportiert.

Bei der richtigen Darstellung wird jede Minute ein Messwert dargestellt, so sollte es sein. Bei den ganzen Tests hat es eigentlich immer funktioniert, nur in bei der Echt-Datenbank kommt so ein Mist raus und ich weis nicht warum.

Bis bald Chemiker

hoika 29. Aug 2009 09:46

Re: [Firebird] TimeStamp Problem
 
Hallo,

Zitat:

Bei der richtigen Darstellung wird jede Minute ein Messwert dargestellt
Und wenn in einer Minute mehrere Meßwerte existieren ?
Was wird dann dargestellt ?


Heiko

Chemiker 29. Aug 2009 09:51

Re: [Firebird] TimeStamp Problem
 
Hallo hoika,

pro Minute wird pro Messstelle ein Messwert übertragen.

Bis bald Chemiker

Chemiker 29. Aug 2009 09:52

Re: [Firebird] TimeStamp Problem
 
Hallo,

das ist der Aufruf um die Pivot-Tabelle darzustellen:

Delphi-Quellcode:
{
********************************************************************************
 SQL-String für die Pivot-Tabelle in einer Stringlist zusammenstellen
********************************************************************************
}
procedure TAbtfrageClass.SQLPrivoString;
var
  I: Integer;
begin
  FSQLPivot.Clear;
  with FSQLPivot do
  begin
    Add('SELECT MW_DATUMUHRZEIT, ');
    for I := 0 to FMSListe.Count-1 do
    begin
      Add('  SUM (IIF (MW_MSID = ');
      Add(''''+FMSListe[i]+'''');        
      Add(', MW_MW,0)) AS ');
      Add(FMSListe[i]);
      if i < FMSListe.Count-1 then
      begin
        Add(',');
      end;                    
    end;
    Add('FROM mw_tabelle ');
    Add('WHERE (MW_MSID LIKE '); // :aMSId
    Add('''%''');
    Add(')');
    Add(' AND (MW_DATUMUHRZEIT between ');
    Add(' :aStartDatum');
    Add(' AND ');
    Add(' :aEndeDatum');
    Add(') group by MW_DATUMUHRZEIT');
  end;
end;
das einzige was ich mir vorstellen kann, ist das zwischen den einzelnen Datensätzen bei der Echt-Datenbank beim Einfügen in die Datenbank mehr Zeit vergangen ist.

Bis bald Chemiker

mkinzler 29. Aug 2009 10:39

Re: [Firebird] TimeStamp Problem
 
Gruppiere mal nicht auf den kompletten Timestamp, sondern auf Minuten

Chemiker 29. Aug 2009 15:43

Re: [Firebird] TimeStamp Problem
 
Hallo mkinzler,

und wie?

Bis bald Chemiker

mkinzler 29. Aug 2009 15:45

Re: [Firebird] TimeStamp Problem
 
SQL-Code:
...
group by
    Extract( Date from MW_DATUMUHRZEIT),
    Extract( Hour from MW_DATUMUHRZEIT),
    Extract( Minute from MW_DATUMUHRZEIT) ...

Chemiker 4. Nov 2009 00:30

Re: [Firebird] TimeStamp Problem
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo mkinzler,

habe Deinen Vorschlag mal versucht umzusetzen allerdings bekomme ich immer eine Fehlermeldung. siehe Anhang

Bis bald Chemiker

Hansa 4. Nov 2009 01:21

Re: [Firebird] TimeStamp Problem
 
Versuchs mal so in der Richtung :

SQL-Code:
group by Extract (HOUR FROM cast(Uhrzeit AS TIMESTAMP))
Leider zu spät gesehen, um jetzt noch das JPG abzutippen, zu ändern und zu testen. *gääähhnnnhn* Für den Thread komplett neu zu lesen auch zu spät. :mrgreen: Poste doch mal zusammenhängend die Table-Struktur, oder zumindest das betreffende Feld und das Select-Statement als Nicht-JPG, sondern Text. :duck:

stahli 4. Nov 2009 11:49

Re: [Firebird] TimeStamp Problem
 
... zwar etwas unscharf, aber kann es an unterschiedlichen Spacheinstellungen auf beiden Systemen (FB-Servern) liegen?

Chemiker 4. Nov 2009 19:16

Re: [Firebird] TimeStamp Problem
 
Hallo,

ich habe jetzt eine Lösung gefunden. Ist wahrscheinlich nicht die eleganteste Methode, aber bringt das gewünschte Ergebnis.

Eigentlich ziemlich Aufwendig nur um den TimeStamp auseinander zu nehmen und anschließend ohne Sekunden-Anteil wieder zusammenzusetzen.



Mit:
SQL-Code:
select cast(EXTRACT (DAY FROM MW_DATUMUHRZEIT) ||'.'||
            EXTRACT (Month FROM MW_DATUMUHRZEIT)||'.'||
            EXTRACT (year from MW_DATUMUHRZEIT) ||' '||
            EXTRACT (hour from MW_DATUMUHRZEIT) ||':'||
            EXTRACT (minute from MW_DATUMUHRZEIT)as timeStamp) as DatumUhrzeit,
       SUM (IIF (MW_MSID = 'K01T1', MW_MW,0)) as K01T1,
       SUM (IIF (MW_MSID = 'K01D1', MW_MW,0)) as K01D1
From mw_tabelle
where (MW_DatumUhrZeit between '14.08.2009' and '15.08.2009')
group by DatumUhrzeit
In Delphi wird die Abfrage dann so zusammengesetzt:

Delphi-Quellcode:
{
********************************************************************************
 SQL-String für die Pivot-Tabelle in einer Stringlist zusammenstellen
********************************************************************************
}
procedure TAbtfrageClass.SQLPrivoString;
var
  I: Integer;
begin
  FSQLPivot.Clear;
  with FSQLPivot do
  begin
   { Select Anweisung alt ersetzt am 05.11.2009
    Add('SELECT MW_DATUMUHRZEIT, ');
    for I := 0 to FMSListe.Count-1 do
    begin
      Add('  SUM (IIF (MW_MSID = ');
      Add(''''+FMSListe[i]+'''');
      Add(', MW_MW,0)) AS ');
      Add(FMSListe[i]);
      if i < FMSListe.Count-1 then
      begin
        Add(',');
      end;
    end;
    Add('FROM mw_tabelle ');
    Add('WHERE (MW_MSID LIKE '); // :aMSId
    Add('''%''');
    Add(')');
    Add(' AND (MW_DATUMUHRZEIT between ');
    Add(' :aStartDatum');
    Add(' AND ');
    Add(' :aEndeDatum)');
    Add(' group by MW_DATUMUHRZEIT');
   }
   // Am 04.11.2009 überarbeitete Abfrage nun jede Minute in eine Zeile
    Add('SELECT cast (EXTRACT (DAY FROM MW_DATUMUHRZEIT) ');
    Add('||');
    Add('''.''');
    Add('||');
    Add(' EXTRACT (Month FROM MW_DATUMUHRZEIT) ');
    Add('||');
    Add('''.''');
    Add('||');
    Add(' EXTRACT (year FROM MW_DATUMUHRZEIT) ');
    Add('||');
    Add(''' ''');
    Add('||');
    Add(' EXTRACT (hour FROM MW_DATUMUHRZEIT) ');
    Add('||');
    Add(''':''');
    Add('|| ');
    Add(' EXTRACT (minute FROM MW_DATUMUHRZEIT)');
    Add('as TimeStamp) as DatumUhrzeit, ');
    for I := 0 to FMSListe.Count-1 do
    begin
      Add('  SUM (IIF (MW_MSID = ');
      Add(''''+FMSListe[i]+'''');
      Add(', MW_MW,0)) AS ');
      Add(FMSListe[i]);
      if i < FMSListe.Count-1 then
      begin
        Add(',');
      end;
    end;
    Add('FROM mw_tabelle ');
    Add('WHERE (MW_DATUMUHRZEIT between ');
    Add(' :aStartDatum');
    Add(' AND ');
    Add(' :aEndeDatum)');
    Add(' group by DatumUhrzeit');
  end;
end;
Ich habe jetzt zwar eine Lösung, aber es ist immer noch unklar wodurch das Problem entstanden ist.

Trotzdem danke an alle für die Tipps.

Bis bald Chemiker


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:50 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz