O společnostiProduktyObchodPodpora
Moravské přístroje
Hlavní stránka
O společnosti
Stažení software
Stažení dokumentů
Produkty
Control Web
Strojové vidění VisionLab
Kamery DataCam a osvětlovače DataLight
Průmyslový počítačový systém DataLab
Vědecké kamery
Speciální technika
Ceník
Aktivace produktů
Služby
Školení
Zakázková řešení
Podpora
Volba kamery a objektivu pro Strojové vidění
Control Web - Ukázkové aplikace

Hlavní stránkaPodporaFAQ

Databáze
Control Web a databáze.

Obsah sekce:

Jak zobrazit UTC z archivních souborů jako formátovaný datum a čas?
Export dat z databáze do textového souboru (csv)
SQL skript pro nastavení neukončených alarmů v tabulce alarmů do stavu ukončených alarmů

Jak zobrazit UTC z archivních souborů jako formátovaný datum a čas?

SQL příkaz pro převod Juliánského data z položky UTC v archivních tabulkách do podoby formátovaného data a času.

V databázových tabulkách vytvářených sekcemi archive a alarm je čas záznamu zapisován jako Juliánské datum doplněné o zlomek časového kroku (údaj za dvojtečkou). Pro zobrazování je ale určitě přehlednější používat formátovaný datum a čas podle národních zvyklostí. Následující SQL příkaz demonstruje, jak převést Juliánské datum do formátované podoby. Syntax T-SQL (MS SQL Server)

SELECT UTC, CAST((CAST(LEFT(UTC, 16) AS FLOAT) - 2415020.5) AS DATETIME) AS MyDate FROM Table

Syntax pro MDB databázi (MS Access)

SELECT UTC, CDate(CDbl(Left(UTC,7) & ',' & Mid(UTC,9,8)) - 2415018.5) AS MyDate FROM Table

Výsledkem tohoto dotazu bude tedy tabulka, která bude v prvním sloupci zobrazovat původní podobu Juliánského data a ve druhém sloupci formátovaný datum a čas.

Poznámka: Nezapomeňte, že časový údaj je zapsán jako UTC. Pokud tedy chcete získat pásmový čas, musíte ještě od položky UTC odečíst součet hodnot ze sloupců UTC_BIAS (posunutí pásmového času vzhledem k UTC v minutách) a DST_BIAS (posunutí letního času v minutách).

Pokud tedy bude chtít získat pásmový čas záznamu, budou dotazy vypadat takto: Syntax T-SQL (MS SQL Server)

SELECT UTC, CAST((CAST(LEFT(UTC, 16) AS FLOAT) - (UTC_BIAS + DST_BIAS)/1440.0 - 2415020.5) AS DATETIME) AS MyDate FROM Table

Syntax pro MDB databázi (MS Access)

SELECT UTC, CDate(CDbl(Left(UTC,7) & ',' & Mid(UTC,9,8)) - (UTC_BIAS + DST_BIAS)/1440.0 - 2415018.5) AS MyDate FROM Table

Export dat z databáze do textového souboru (csv)

Příklad ukazuje export dat z databáze získaných SQL dotazem do textového souboru. Soubor s příponou CSV lze načíst přímo do tabulkového kalkulátoru Excel.

Předpokládejme existenci přístroje sql s názvem sql a přístroje file s názvem f.

procedure Export( Query, Path, Separator : string; FHeader : boolean );
const
  r = 'rs';
var
  c        : cardinal;
  s        : string;
  line     : string;
  header   : string;
  ok, null : boolean;
begin
  if sql.OpenRecordset( r, Query ) then
    ok = f.Create( Path );
    if FHeader then
      sql.ShowRecordset( r );
    end;
    ok = sql.MoveToFirstRecord( r );
    while ok do
      (* Read current record's data *)
      c = 1;
      line = '';
      while sql.GetData( r, c, s, null ) do
        line = line + iif( c > 1, Separator, '' ) + s;
        if FHeader then
          ok = sql.GetColumnProperty( c, 'name', s ); 
          header = header + iif( c > 1, Separator, '' ) + s;
        end; (* if *)
        c = c + 1;
      end; (* while *)

      (* Write columns header to target file *)
      if FHeader then
        f.WrStr( header ); f.WrLn();
        FHeader = false;
      end; (* if *)

      (* Write current record to target file *)
      f.WrStr( line ); f.WrLn();
      
      ok = sql.MoveToNextRecord( r );
    end; (* while *)

    f.Close();
    sql.CloseRecordset( r );
  end; (* if *)
end_procedure;

Download: ExportDatabaseDataToCSVFile.zip

SQL skript pro nastavení neukončených alarmů v tabulce alarmů do stavu ukončených alarmů

Pokud potřebujete nastavit v tabulce alarmů neukončené alarmy do stavu ukončených alarmů, můžete použít následující skript.

Před spuštěním skriptu nastavte jméno tabulky alarmů, zapisované hodnoty datových elementů a jméno operátora do parametrů @Alarms, @F_VALUE_N, @F_VALUE_B, @F_VALUE_S a SET @F_OPERATOR.

Poznámka: Skript je psán pro MS SQL 2005 a vyšší.

/*===============================================
 Zjištění období, kdy platí letní čas
 ==============================================*/
DECLARE @DSTStart DATETIME
DECLARE @DSTEnd DATETIME

-- Začátek DST
DECLARE @DSTStartWeek SMALLDATETIME
SET @DSTStartWeek = '03/01/' + Convert(VARCHAR,Year(Getutcdate()))
SELECT @DSTStart =
  CASE Datepart(dw,@DSTStartWeek)
    WHEN 1 THEN Dateadd(HOUR, 170, @DSTStartWeek)
    WHEN 2 THEN Dateadd(HOUR, 314, @DSTStartWeek)
    WHEN 3 THEN Dateadd(HOUR, 290, @DSTStartWeek)
    WHEN 4 THEN Dateadd(HOUR, 266, @DSTStartWeek)
    WHEN 5 THEN Dateadd(HOUR, 242, @DSTStartWeek)
    WHEN 6 THEN Dateadd(HOUR, 218, @DSTStartWeek)
    WHEN 7 THEN Dateadd(HOUR, 194, @DSTStartWeek)
  END

-- Konec DST
DECLARE @DSTEndWeek SMALLDATETIME
SET @DSTEndWeek = '11/01/' + Convert(VARCHAR,Year(Getutcdate()))
SELECT @DSTEnd =
  CASE Datepart(dw, Dateadd(WEEK, 1, @DSTEndWeek))
    WHEN 1 THEN Dateadd(HOUR,   2, @DSTEndWeek)
    WHEN 2 THEN Dateadd(HOUR, 146, @DSTEndWeek)
    WHEN 3 THEN Dateadd(HOUR, 122, @DSTEndWeek)
    WHEN 4 THEN Dateadd(HOUR,  98, @DSTEndWeek)
    WHEN 5 THEN Dateadd(HOUR,  74, @DSTEndWeek)
    WHEN 6 THEN Dateadd(HOUR,  50, @DSTEndWeek)
    WHEN 7 THEN Dateadd(HOUR,  26, @DSTEndWeek)
  END


/*===============================================
  Ukončení alarmů
===============================================*/

DECLARE @Alarms AS VARCHAR(128)
DECLARE @F_VALUE_N AS FLOAT
DECLARE @F_VALUE_B AS BIT
DECLARE @F_VALUE_S AS VARCHAR(255)
DECLARE @F_OPERATOR AS VARCHAR(255)
DECLARE @sql AS NVARCHAR(MAX)
DECLARE @Params NVARCHAR(MAX);

/*********************************************** 
  Nastavení parametrů:
  - jméno tabulky alarmů 
  - zapisované hodnoty
  - jméno operátora
***********************************************/

SET @Alarms = 'alAlarms'  -- Tabulka alarmů
SET @F_VALUE_N = 0        -- Numerické hodnoty
SET @F_VALUE_B = 0        -- Logické hodnoty  
SET @F_VALUE_S = ''       -- Textové hodnoty
SET @F_OPERATOR = NULL    -- Jméno operátora

SET @Params = '@DSTStart DATETIME, @DSTEnd DATETIME, @F_VALUE_N FLOAT, @F_VALUE_B BIT, @F_VALUE_S VARCHAR(255), @F_OPERATOR VARCHAR(255)'
SET @sql =
  N'UPDATE a SET 
    a.FINISHED = 2,
    a.F_UTC = Str(CAST(Getutcdate() AS float) + 2415020.5, 16, 8) + '':'' + RIGHT( ''0000000'' + LTRIM((STR(r.RN,8,0))), 8),
    a.F_UTC_BIAS = a.S_UTC_BIAS,
    a.F_DST_BIAS = CASE WHEN Getutcdate() BETWEEN @DSTStart AND @DSTEnd THEN -60 ELSE 0 END,
    a.F_VALUE_N = CASE WHEN a.VALUE_TYPE = 1 THEN @F_VALUE_N ELSE a.F_VALUE_N END,
    a.F_VALUE_B = CASE WHEN a.VALUE_TYPE = 2 THEN @F_VALUE_B ELSE a.F_VALUE_B END,
    a.F_VALUE_S = CASE WHEN a.VALUE_TYPE = 3 THEN @F_VALUE_S ELSE a.F_VALUE_S END,
    a.F_OPERATOR = @F_OPERATOR 
  FROM ' + @Alarms + ' a INNER JOIN (SELECT ROW_NUMBER() OVER (ORDER BY S_UTC ASC) AS RN, S_UTC FROM ' + @Alarms + ' WHERE FINISHED = 0) r ON a.S_UTC = r.S_UTC 
  WHERE FINISHED = 0'

EXEC sp_executesql @sql, @Params, @DSTStart = @DSTStart, @DSTEnd = @DSTEnd, @F_VALUE_N = @F_VALUE_N, @F_VALUE_B = @F_VALUE_B, @F_VALUE_S = @F_VALUE_S, @F_OPERATOR = @F_OPERATOR

 
 | O společnosti | Produkty | Podpora | Stažení software | Stažení dokumentů | 
Moravské přístroje, a.s., Masarykova 1148, Zlín-Malenovice, 76302