query

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

Projekt języka : Instrukcje : 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