|
<< Kliknij, aby wyświetlić Spis treści >> Nawigacja: Dodatki > TCL > Rozszerzenia Tcl > Obiekt bazodanowy |
Obiekt bazodanowy po utworzeniu poleceniem database udostępnia swoje metody (funkcje), które mogą być wywoływane podobnie jak polecenia Tcl, z tą jednak różnicą, że nazwa wywoływanej metody musi zostać poprzedzona identyfikatorem obiektu.
Poniższa lista pokazuje wybrane metody obiektu bazodanowego:
disconect- odłącza obiekt od bazy danych i usuwa go z pamięci, np.:
database dbf "DRIVER=Microsoft Access Driver (*.mdb);DBQ=c:\\temp\\baza.mdb"
dbf
dbf disconect
set option value- ustawia atrybuty połączenia. Dopuszczalne wartości:
Option |
values |
Autocommit |
0/1 |
Concurency |
readonly lock values rowver |
Maxrows |
wartość liczbowa |
Timeout |
wartość liczbowa |
Maxlenght |
wartość liczbowa |
Rowsetsize |
wartość liczbowa |
Cursortype |
static dynamic forwardonly eysetdriven |
Encoding |
nazwa |
get option- pobiera atrybuty połączenia.
commit- jeśli połączenie nie działa w trybie autocommit, to metoda commit zatwierdza transakcję.
rollback- jeśli połączenie nie działa w trybie autocommit, to metoda rollback wycofuje transakcję.
eval proc polecenie_SQL [{typ_arg args}]
❖metoda najpierw wykonuje polecenie SQL, a następnie uruchamia procedurę Tcl proc dla każdego wiersza zwróconego przez polecenie SQL. Liczba parametrów akceptowana przez procedurę musi być równa liczbie kolumn w poleceniu SQL. Tylko jeden wiersz wyniku polecenia SQL jest wczytywany na raz do pamięci.
Metoda eval jest użyteczna szczególnie wtedy, gdy należy przetworzyć bardzo liczną tabelę. Nie jest konieczne wczytywanie jej w całości do pamięci. Np.:
proc output {name value} {puts $name $value}
db eval output "select name, value from table1"
{{ab 123} {cd 456}}
read arrayspec polecenie_SQL [{typ_arg args}]
❖wczytuje dane z bazy do tablicy lub tablic Tcl. Pierwsza kolumna danych jest używana jako indeks tablicy, pozostałe kolumny są zapisywane do tablicy. W najprostszym przypadku polecenie SQL może zwracać dwie kolumny, pierwsza z nich jest kluczem w tablicy, druga natomiast polem opisowym.
Tablica może zostać wyspecyfikowana na dwa sposoby. Pierwszy sposób to podanie listy nazw, które zostaną użyte jako nazwy kolumn w tablicy. Liczba elementów listy musi być równa liczbie kolumn zwracanych przez polecenie SQL minus jeden (kolumna zawierająca klucz). Np.:.
db read {name description} "select id, name, description from table2"
OK
puts $name(123)
Name123
puts $description(123)
Description123
Drugi sposób polega na podaniu tylko nazwy tablicy, która zostanie użyta jako tablica dwuwymiarowa. W tym przypadku indeks tablicy zostanie zbudowany z wartości klucza i etykiety danej kolumny, oddzielonych przecinkiem. Np.:
db read table2 "select id, name, description from table2"
OK
puts $table2(123, name)
Name123
puts $table2(123, description)
Description123
Korzystając z obiektu bazodanowego można również wydawać polecenia języka SQL przesyłane bezpośrednio do źródła danych:
id polecenie_SQL [{typ_arg args}]
Praktycznie całość komunikacji ze źródłem danych może zostać obsłużona w powyższy sposób. Polecenie SQL polecenie_SQL jest wysyłane do bazy danych, tam jest wykonywane, a wynik, jeśli występuje, jest zwracany do Tcl w formie listy.
Jeśli polecenie SQL zwraca pojedynczy wiersz, to taki wynik jest formatowany do postaci listy. Jeśli natomiast wynikiem polecenia SQL jest zbiór wierszy, to wtedy jest on zapisywany jako lista list, w której każda podlista zawiera pojedynczy wiersz.
Argumenty polecenia SQL args mogą być podane bezpośrednio po nim, i wtedy w samym poleceniu w miejsce argumentów musi zostać umieszczony znak ?. Bardziej naturalne jest jednak wykorzystanie mechanizmu podstawień, i zawarcie argumentów w poleceniu SQL:
database dbf "DRIVER=Microsoft Access Driver (*.mdb);DBQ=c:\\temp\\baza.mdb"
dbf
set ids [dbf "select id from employees where salary > 10000"]
{222 333 444}
set id [lindex $ids 0]
222
dbf "select imie, nazwisko form employees where id = $id"
{{Alicja Koziorowska}}
dbf "update employees set salary = 11000 where id = $id"
OK.