ACE je programový prostředek INFORMIX-SQL, který umožňuje uspořádání uložených dat do výstupních tiskových sestav v požadovaném formátu. Můžeme jej použít například k vytvoření faktur, dopisních štítků, jmenovek, pozvánek atd.
Specifikace sestavy je uložena v souboru sestava.ACE
Přeložená sestava v souboru sestava.ARC
REPORT: Run Modify Generate New Compile Drop Exit
Při zadávání nové sestavy se zadává:
Může se skládat z šesti částí
Pořadí všech částí je dané a nelze jej měnit.
DATABASE jméno_databáze END
Sekce je povinná, musí být uvedena jako první a určuje databázi, ze které budeme data načítat.
DEFINE [VARIALE jméno_proměnné datový_typ] [PARAM [celé_číslo] jméno_proměnné datový_typ] END
Jména proměnných musí začínat písmenem, smí obsahovat písmena, číslice a podtržítko a smí být maximálně 18 znaků dlouhá.
Parametry jsou naplněny pouze při spouštění sestavy z příkazové řádky. Odkazy na hodnoty proměnných musí předcházet znak $
INPUT [PROMPT FOR jméno_proměnné USING "řetězec"] END
Pomocí této sekce můžeme od uživatele interaktvině přebírat parametry.
OUTPUT [REPORT TO {"jméno_souboru" | PIPE "program" | PRINTER}] [LEFT MARGIN celé_číslo] [RIGHT MARGIN celé_číslo] [TOP MARGIN celé_číslo] [BOTTOM MARGIN celé_číslo] [PAGE LENGTH celé_číslo] END
Určuje nastavení okrajů a délek výstupních stran a umístění výstupu.
Standartně: výstup na obrazovku, levý okraj 6, pravý 132, horní 3, dolní 3, délka stránky 66 řádek.
příkaz_select; ... END
Specifikuje výběr dat z databáze jedním nebo více selekty. V příkazu lze použít odkazy na proměnné nebo parametry, ale je nutné je uvodit znakem $. Až za posledním příkazem Select následuje END.
FORMAT [PAGE HEADER řídící_blok] [PAGE TRAILER řídící_blok] [FIRST PAGE HEADER řídící_blok] [ON EVERY ROW řídící_blok] [ON LAST ROW řídící_blok] [BEFORE GROUP OF řídící_blok] [AFTER GROUP OF řídící_blok] END
Formátování výstupních dat buď pomocí kompletního nastavení nebo zjednodušeného:
FORMAT EVERY ROW END
Za návěštím řídícího bloku (PAGE HEADER, PAGE TRAILER, ...) se uvádí posloupnost tiskových příkazů, které zajišťují jednotlivé výstupy.
Lze zde použít:
PRINT [seznam_výrazů] [;] PRINT FILE "jméno_souboru"
Tiskne znakové řetězce, hodnoty sloupců, obsahy proměnných a hodnoty funkcí uvedených v seznamu_výrazů. Středník potlačí odřádkování.
COLUMN číselný_výraz
V seznamu_výrazů příkazu Print převede aktuální pozici tisku v aktuální řádce do uvedeného sloupce.
číselný_výraz SPACE[S]
V seznamu_výrazů příkazu Print přesune aktuální pozici tisku v aktuální řádce o uvedený počet mezer.
výraz1 USING výraz2
Formátuje číselné a datové hodnoty výrazu1 podle formátovacího řetězce výraz2.
Ve výrazu2 můžete použít speciální znaky:
znakový_výraz CLIPPED
Vynechává ze znakových dat koncové mezery.
LINENO PAGENO
Vrací aktuální číslo řádky nebo stránky.
SKIP číselný_výraz LINES SKIP TO TOP OF PAGE
Přeskočí uvedený počet řádek, případně celou stránku.
NEED číselný_výraz LINES
Zajistí, aby se uvedený počet řádek následující za Lines nerozdělil. Pokud by k tomu mělo dojít, převede se celý výstup na další stranu.
PAUSE ["Výzva"]
Vytiskne výzvu a čeká na potvrzení. Vhodné pro ukončení strany.
TODAY
Vrací hodnotu typu Date s aktuálním kalendářním datem. Standartně se tiskne ve formátu mm/dd/yy, ale lze naformátovat pomocí příkazu Using s následujícími parametry:
Určuje zpracování jednotlivých řádek vracených Selectem. Za klíčovými slovy uveďte příkaz pro tisk jedné řádky.
Tisk titulní strany a horních záhlaví ostatních stránek. First page header na první straně potlačí Page header.
Tisk patiček, závěru, souhrnu On last row potlačí vykonání Page trailer na poslední stránce. Na konci řídícího bloku Page trailer se hodí příkaz Pause.
Umožňují seskupovat data podle stejné hodnoty v uvedených sloupích. Blok Before... se provádí před zpracováním řádek z dané skupiny naopak blok After ... se provádí až po jejím zpracování. Mohou obsahovat stejné příkazy jako blok On every row a navíc agregační funkce vyhodnocované nad danou skupinou.
Očekávájí jako argument hodnotu typu Date
[GROUP] {COUNT | PERCENT} [WHERE podmínka] [GROUP] {TOTAL | AVG | MIN | MAX} OF výraz [WHERE podmínka]
Provádí výpočty nad všemi řádkami a nad řádkami skupin, používají se často v řídících blocích skupin. Předchází-li je klíčové slovo Group, pak vracejí hodnotu získanou výpočtem nad řádkami skupin.
ASCII číselný_výraz DATE DATE (datový_výraz) MDY (číselný_výraz, číselný_výraz, číselný_výraz) TIME
IF výraz THEN příkaz [ELSE příkaz] WHILE výraz DO FOR čítač = výraz1 TO výraz2 [STEP výraz3] LET proměnná [číselný_výraz [, číselný_výraz]] = seznam_výrazů BEGIN příkaz ... END
V řídících blocích sestav můžete použít podmíněný příkaz IF-THEN-ELSE, cykly WHILE a FOR a přiřazovací příkaz LET. Do příkazů IF-THEN-ELSE, WHILE a FOR se začleňují buď jednotlivé příkazy nebo skupiny příkazů uzavřené do bloku BEGIN-END. Příkaz IF-THEN-ELSE musí mít v řídícich blocích FIRST PAGE HEADER a PAGE HEADER stejný počet vytištěných řádek v části IF i ELSE.
Při návrhu není nutné používat prostředí INFORMIX-SQL. Vzhled sestavy můžeme vytvořit v libovolném editoru a uložit do souboru s příponou .ace
Překlad sestavy se následně provede příkazem saceprep jméno_sestavy.ace. Pokud byl překlad sestavy úspěšný, specifikace je uložena do souboru s příponou arc. Nebyl-li překlad úspěšný v souboru jméno_sestavy.err nalezneme lokalizaci a popis chyby.
Úspěšně přeloženou sestavu potom spustíme příkazem sacego jméno_sestavy. Tento způsob je jediný možný, pokud chceme do sestavy přidávat externí parametry na příkazové řádce.
CREATE TABLE students ( id INTEGER not NULL, name char(20), surname char(25), math integer, biology integer, chemistry integer, history integer, primary key (id) );Vlož nějaké hodnoty
INSERT INTO students (id, name, surname, math, biology, chemistry, history) VALUES (1, 'Karel', 'Novak', 1, 2, 1, 2); INSERT INTO students (id, name, surname, math, biology, chemistry, history) VALUES (2, 'Pavel', 'Zahrada', 2, 3, 1, 2); INSERT INTO students (id, name, surname, math, biology, chemistry, history) VALUES (3, 'Tomas', 'Blaha', 3, 2, 1, 1); INSERT INTO students (id, name, surname, math, biology, chemistry, history) VALUES (4, 'Ondrej', 'Semrad', 1, 1, 2, 1);
database krylm9am end output left margin 2 right margin 100 page length 15 end select name, surname, math, biology, chemistry, history from students order by surname, name end format page header print "-----------------------------------------------------------------" print " jmeno | prijmeni | Math | Biol | Chem | Hist |" print "-----------|-------------|---------|----------|---------|--------" on every row print column 3, name CLIPPED ; print " "; print column 15, surname CLIPPED ; print column 31, math using "<<<" ; print column 41, biology using "<<<" ; print column 51, chemistry using "<<<" ; print column 61, history using "<<<" page trailer print "-----------------------------------------------------------------" pause " --- enter dalsi strana --- " end
database krylm9am end output page length 30 end select name, surname, math, biology, chemistry, history from students order by surname, name end format page header print "-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-" print column 3, "Prospechove karty vsech zaku" print "-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-" print column 2, "Strana ", PAGENO using "<<<"; print column 35, "Dne: ", TODAY using "ddd dd. mmm yyyy" skip 2 lines on every row need 8 lines print column 3, "+----------------------------------------+" print column 3, "| Prijmeni: ", surname CLIPPED, 1 space; print column 44, "|" print column 3, "| Jmeno: ", name CLIPPED, 1 space; print column 44, "|" print column 3, "| Matematika: ", math; print column 44, "|" print column 3, "| Biologie: ", biology; print column 44, "|" print column 3, "| Chemie: ", chemistry; print column 44, "|" print column 3, "| Dejepis: ", history; print column 44, "|" print column 3, "+----------------------------------------+" skip to top of page page trailer skip 2 lines print "---------------------------------------------------" pause "---- dalsi karta ENTER ----" on last row skip 2 lines print "---------------------------------------------------" print column 3, "Prohledli jste si kompletni zaznamy nasi skoly" skip 2 lines print "Pocet karet: ", COUNT using "<<<" print "Prumer znamek " print "--------------------------" print "Matematika: ", avg of math using "<<<" print "Biologie: ", avg of biology using "<<<" print "Chemie: ", avg of chemistry using "<<<" print "Dejepis: ", avg of history using "<<<" end