query

Obiektowy język definiowania dokumentów hipertekstowych i jego implementacja.

ObjectHTML

Wstęp - geneza, zastosowania
Opis podstawowych pojęć
    Internet
    IP
    TCP
    HTTP
    WWW
    HTML
    URL
    Pozostałe usługi
Definicje
Inne rozwiazania
    Wprowadzenie
    ASP
    JSP
    PHP
    Homesite
    Microsoft FrontPage
Projekt języka
    Struktura leksykalna
    Komentarze
    Typy atrybutów i zmiennych
    Podstawowe składowe programu
    Deklaracje
    Klasy
    Metody
    Atrybuty
    Grupy
        Wprowadzenie
        Definicja
    Instrukcje
        $
        [ ]
        call
        set
        append
        incr
        if
        while
        for
        currenttime
        encode
        import
        export
        grmembers
        grname
        grparent
        lastwordin
        firstwordin
        beforeword
        afterword
        query ->
    Wyrażenia i operatory
    file
    image
    include
    Gramatyka
Wywołanie kompilatora
Program narzędziowy makedefs
    Geneza i ogólny opis
    Uruchamianie
    Przykłady użycia
Opis implementacji
    Drzewo programu / kompilator
    Opis najważniejszych klas
Przykładowa aplikacja
Podsumowanie
Literatura

query

Poprzednia strona: afterword
Nastepna strona: Wyrażenia i operatory

Instrukcja ta służy do wyciągania danych z bazy danych i wklejania ich na stronę HTML. Wyciąganie danych polega na wykonaniu zapytania SQL i załadowaniu wyniku. Wynik wklejany jest na stronę rekord po rekordzie. Dla każdego rekordu wykonywane są instrukcje wewnątrz bloku do-endq, przed wykonaniem instrukcji tworzone są zmienne lokalne które umożliwiają dostęp do poszczególnych pól rekordu. Umożliwia to wklejanie wyniku zapytania na stronę. Składnia instrukcji jest następująca:

query type,name,user,password,querytext do

[instrukcje]

endq

Nazwa parametru

Opis

type

Typ bazy danych, OHTML obsługuje dwie najpopularniejsze bazy danych dostępne po systemem Linux, są to MySQL (mysql) i Postgres (postgres).

name

Nazwa bazy danych

user

Nazwa użytkownika bazy danych

password

Hasło użytkownika

querytext

Zapytanie SQL obsługiwane przez wybraną bazę

 

Definiowane zmienne do użycia wewnątrz instrukcji query.

Nazwa zmiennej

Opis

column_names

Zawiera nazwy wszystkich kolumn.

column_i

i = 1 .. n, zawiera nazwę i-tej kolumny.

num_rows

Liczba wszystkich rekordów w wyniku zapytania.

record_index

Numer aktualnego rekordu, numeracja zaczyna się od jedynki.

num_fields

Liczba kolumn w rekordzie.

i

i = 1 .. n, wartość i-tej kolumny.

iden

Dodatkowo do zmiennych lokalnych dodawane są zmienne o nazwach kolumn z wyniku zapytania. Ich wartość jest taka sama jak zmiennych o nazwach 1 .. n ale są one wygodniejsze w użyciu.

Przykłady:

/* Deklaracja zmiennych pomocniczych */
decl i, q, c 

/* Zdefiniowanie tekstu zapytania SQL */
set q "select * from DEPT"

/* Wykonanie zapytania na bazie danych "tempdb". Blok instrukcji do-endq jest 
skonstruowany na tyle ogólne, że potrafi wyświetlić wyniki dowolnego zapytania. 
Wynik nie jest formatowany znacznikami HTML w celu zwiększenia czytelności przykładu. */

query mysql,tempdb,root,"",$q do
	/* Wydrukowanie nazw kolumn. Oczywiście nazwy należy wydrukować tylko przed 
	pierwszym rekordem. */
	if $record_index n== 1 then
		for i in $column_names do
			$i; "	"
		endf
		nl
	endif

	/* Wydrukowanie wartości kolumn z pojedynczego rekordu wyniku zapytania. */
	for i in $column_names do
	/* Instrukcja $i zwróci nazwę kolumny, ponowne zastosowanie znaku dolara 
	spowoduje pobranie wartości ze zmiennej o nazwie kolumny. */
		$$i; "	"
	endf
	nl
endq

/* Nowe zapytanie SQL */
set q "select * from USERS"

/* Poniższy przykład ilustruje wykorzystanie pozostałych zmiennych instrukcji query */

query postgres,db1,root,"",$q do
	/* wydrukowanie nazw kolumn */
	if $record_index n== 1 then
		set i 1
		while $i n<= $num_fields do
			set c column_,$i
			$$c ; "	" 
			incr i 1
		endw 
		nl
	endif

	/* Wydrukowanie wartości kolumn z aktualnego rekordu */
	set i 1
	while $i n<= $num_fields do
		$$i ; "	"
		incr i 1
	endw
	nl

	/* Po ostatnim rekordzie też można coś wydrukować. */
	if $record_index n== $num_rows then
		"To był ostatni rekord" ; nl
	endif
endq

Listopad 2000