MS Access - Trigonometrické funkce

25. 2. 2013, Vladimír Klaus, přečteno 4019x

Kalkulačky
MS Access
SQL

Pro zvládnutí tohoto budeme potřebovat vědět, jak se zakládá tabulka (Příkaz CREATE TABLE) a plní nějakými daty (Příkaz INSERT).

CREATE TABLE TrigonometrickeUdaje
( ID AUTOINCREMENT PRIMARY KEY,
Uhel INT,
Sinus DOUBLE,
Cosinus DOUBLE,
Tangens DOUBLE,
Cotangens DOUBLE
)

SQL obrázek

Nyní si tabulku naplníme nějakými smysluplnými údaji. V případě úhlů to bude několik základních hodnot.

Ještě před tím ale musíme vytvořit a naplnit pomocnou tabulku, která poslouží pro další dotaz, kde budeme hromadně plnit údaje.

CREATE TABLE Pomocna
( ID AUTOINCREMENT PRIMARY KEY,
Pole INT
)

Tabulku máme, teď ji ještě naplníme jednou (libovolnou) hodnotou.

INSERT INTO Pomocna (Pole) VALUES (1)

SQL obrázek

A teď se už konečně dostáváme k tomu, jak hromadně naplnit tabulku jednotlivými úhly. Jak už asi víte z části „Příkaz INSERT“, nelze v MS Accessu najednou vkládat více řádek. Výjimkou je situace, kdy zdrojem pro vkládání je jiná tabulka, resp. dotaz. A my si tady takovou tabulku „vytvoříme“ za pomocí spojení UNION ALL. Ono by tady sice stačilo pouze UNION, ale v případě, že byste vkládali duplicitní údaje, byly by odstraněny.

A co vlastně dělají tyto podivné dotazy? Vracejí jednotlivé úhly (konstanty) ve sloupci Uhel. A protože SELECT musí vybírat data z nějaké tabulky, je tu pouze z formálních důvodů uvedena ona pomocná tabulka. Ovšem musí mít právě jeden řádek!

SELECT 30 AS Uhel FROM Pomocna

Výsledný dotaz bude vypadat takto

INSERT INTO TrigonometrickeUdaje
SELECT * FROM (
SELECT 0 AS Uhel FROM Pomocna UNION ALL
SELECT 30 AS Uhel FROM Pomocna UNION ALL
SELECT 45 AS Uhel FROM Pomocna UNION ALL
SELECT 60 AS Uhel FROM Pomocna UNION ALL
SELECT 90 AS Uhel FROM Pomocna UNION ALL
SELECT 180 AS Uhel FROM Pomocna UNION ALL
SELECT 270 AS Uhel FROM Pomocna UNION ALL
SELECT 360 AS Uhel FROM Pomocna
)

SQL obrázek

Nyní můžeme konečně přistoupit k vytvoření dotazu, který nám spočítá jednotlivé trigonometrické funkce a vloží do tabulky.

UPDATE TrigonometrickeUdaje SET
Sinus = Sin(Uhel),
Cosinus = Cos(Uhel),
Tangens = Tan(Uhel),
Cotangens = 1/Tan(Uhel)

MS Access nás nejprve upozorní, že bude provádět aktualizaci 8 záznamů, ale hned poté zobrazí další varování. Došlo totiž k jedné chybě a ptá se nás, zda přesto pokračovat. V tomto případě potvrdíme.

SQL obrázek

Tou chybou totiž byl pouze výpočet funkce cotg(0), což je 1/tg(0) = 1/0 = chyba. Zbytek údajů ale byl v pořádku vyplněn, takže hlavní účel byl splněn.

SQL obrázek

Ovšem pokud to chcete mít opravdu zcela korektní, resp. naučit se funkci IIf(), pak tu máme řešení. Funkce umožňuje zadat podmínku (Uhel=0) a v případě, že bude pravdivá, vrátí první výraz (Null), v případě nepravdivé vrátí druhý výraz  - tedy vlastní výpočet - 1/Tan(Uhel).

UPDATE TrigonometrickeUdaje SET
Sinus = Sin(Uhel),
Cosinus = Cos(Uhel),
Tangens = Tan(Uhel),
Cotangens = IIf(Uhel=0, Null, 1/Tan(Uhel))