Zadanie z dBase

DBase

I. Wprowadzenie

System dBASE III umożliwia tworzenie tzw. relacyjnej bazy danych, gdzie podstawowymi składnikami bazy są relacje.
Podejście relacyjne do danych wynika z faktu, że zawartość plików spełniających pewne warunki można traktować jako relacje matematyczne, do których stosuje się elemantarną teorię relacji
Każdą relację w systemie bazy danych możemy przedstawić w postaci tablicy zawierającej szereg wierszy podzielonych na określoną liczbę kolumn.
Zamiast określenia relacja używa się często określenia plik bazy danych, wiersze tablicy nazywa się rekordami, a jej kolumny polami.
Pliki bazy danych, zwwierające relacje mają rozszerzenie DBF.

W przypadku dBASE III baze danych może tworzyć wiele plików, przy czym jednocześnie otwartych może byc najwyżej 9.
Każdy plik składa się z nagłówka, w którym określona jest liczba rekordów i nazwy oraz charakterystyki pól tworzących rekord, oraz z rekordów zawierających dane.
Każdy rekord w pliku ma te samą strukturę, określoną podczas zakładania pliku bazy danych -długość rekordów i pól jest stała, bez względu nadługość zapisywanej informacji.
Typ pola w rekordzie opisuje charakter danej, jaka będzie przechowywana w polu.

System dBASE III akceptuje dane 5 podstawowych typów:

Typy pól w DBase
Oznaczenie pola Typ pola Długość Opis
C znakowe (tekstowe), Charakter 254 znaki
j. Clipper do 32 KB
dowolny ciąg znaków - napisy złożone z liter, cyfr i innych znaków dostepnych na klawiaturze
N numeryczne (liczbowe), Numeric 19 znaków,
j. Clipper do 30 zn, DBase IV do 20 zn
cyfry, znak + lub -, kropka dziesiętna
L logiczne, logical 1 znak 1 znak: t, T, y, Y - jeśli prawda lub n, N, f, F jeśli fałsz
D data, date 8 znaków data w postaci mm/dd/rr lub w wersji polskiej w postaci rr/mm/dd
M notatnikowe (opisowe)
memo
10 znaków wskaźnik do zbioru .DBT
F numeryczne, float
tylko w DBase IV
20 znaków liczby zmiennoprzecinkowe, inna reprezentacja wewnętrzna niż w typie N

Liczba rekordów w zbiorze max 1 miliard. Długość rekordu max. 4000 bajtów, max. 128 pól.
W DBase IV max liczba pól w rekordzie 255, dług. rekordu też 4000 bajtów, w j. Clipper 5.0 mogą wystąpić max. 1024 pola.

W dBase III+ w zbiorze .dbt (memo) treść pola memo wynosi max. 5000 znaków, w dBase IV jest dowolna (ograniczona dostępną pamięcią),
w j. Clipper 5.0 rozmiar pola memo ograniczony jest do 64 KB.

Poza plikami bazy danych, zawierającymi relacje (pliki o rozszerzeniu DBF) i plikami notatek (DBT), w systemie istnieją inne typy plików, zawierajace informacje wspomagające działanie programu. Największe znaczenie mają pliki indeksowe o nazwach określonych przez użytkownika i rozszerzeniach NDX.
Pliki o rozszerzeniu MEM zawierają dane i zmienne, trzymane podczas działania programu w pamięci operacyjnej.
Pliki FMT zawierają szablony, wg których wyświetlana jest informacja z bazy na ekranie monitora.
Pliki FRM zawierają schematy tworzenia raportów przez drukarki.

Pliki indeksowe mają za zadanie skrócenie czasu przeszukiwania pliku bazy danych.
Plik indeksowy umożliwia uszeregowanie rekordów wg informacji zawartych w określonym polu.
Założenie pliku indeksowego nie powoduje uporządkowania rekordów w pliku bazy danych (DBF), lecz jej uporządkowanie w ramach pliku indeksowego (NDX).
W pliku indeksowym umieszcza się zawartość wybranego pola i nr rekordu, w którym znajduje się pole wg kolejności alfabetycznej
Z plikiem bazy danych może być skojarzonych wiele plików indeksowych, ale równocześnie może być otwartych nie więcej niż 7.

Proces użytkowania bazy danych można podzielić na 2 zasadnicze fazy.
Faza zakładania bazy danych, podczas której należy opisać strukturę rekordów w plikach baz danych, a następnie wpisać do plików określoną liczbę danych początkowych
(założyć rekordy - wypełnić ich pola).
Od momentu założenia zaczyna się faza druga, związana z przetwarzaniem i konserwacją informacji zawartych w bazie.

Praca w dBase może odbywac się na 2 sposoby:

W trybie konwersacyjnym dBase wyświetla kropkę będącą zaproszeniem do konwersacji.
Użytkownik wpisuje instrukjcę, która jest natychmiast wykonywana. Po wykonaniu ponownie znak zaproszenia.
Kilkia ostatnich isnstrukcji jest zapamiętanych, można do nich wrócić, poprawić i nakazać wykonanie ponowne.

W trybie z asystentem na ekranie jest wyświetlane menu dostępnych operacji. Użytkownik wybiera pozycję i jest dopytywany o szczegóły poprzez kolejne zagnieżdzone menu.
Na podstawie odpowiedzi jest budowana i uruchamiana instrukcja.
Uruchamiamy tryb z asystentem przez wpisanie ASSIST w dBase III+  lub uruchomienie  Centrum Sterowania w dBase IV.
W tym trybie użytkownik wybiera odpowiednie pozycje z menu i potwwierdza klawiszem <Enter>.
Program pomocniczy standardowo włączony jest po uruchomieniu dBase, można go także wywołać pisząc polecenie assist lub naciskająć <F2>.


Zadanie

Utworzyć w dBase bazę danych  Znajomi (NR, IMIE, NAZWISKO, DATA_UR, TELEFON, ADRES)
i wykonać kolejne zadania z tą bazą związane.

Uwaga: Zadania do wykonania kolorem czerwonym, polecenia kolorem żółtym

Opis pól:
Nazwa_pola Typ Długość
NR N 3
IMIE C 20
NAZWISKO C 20
DATA_UR DATE 8
TELEFON C 8
ADRES C 30


Uruchomić dBase
DBASE  <Enter?
Zgłasza się nazwa dBase i wersja
oraz F1 - help, napisz komendę lub ASSIST lub naciśnij Enter.

Menu górne po naciśnieciu ASSIST:

W wersji angielskiej:


W wersji polskiej


Tworzenie bazy danych

W systemie znakiem zachęty jest kropka. Można wykorzystac opcje menu lub wpisać polecenie po znaku zachęty.

1) Utworzenie bazy z wiersza poleceń:

W linii poleceń (po kropce) wpisz komendę:

CREATE  Znajomi

Wprowadzamy nazwy i typy pól, domyślnie tekstowe, by zmienić naciskamy spacje.
Po wprowadzeniu CTRL END kończy definiowanie struktury tabeli i zapisuje plik.
Pytanie czy wprowadzamy rekordy:
Input data record now?  (Y/N)

Po naciśnieciu Y można wprowadzić dane.

2) Wprowadznie danych
a) bezpośrednio po założeniu struktury j.w.
b) APPEND lub BROWSE

3) Przeglądanie danych:

Wykonać polecenia zaznaczone na żółto:

LIST
lub
LIST OFF

Np.
LIST nr, imie, nazwisko, telefon OFF
LIST FOR ime='Aneta' nr, imie, nazwisko OFF
LIST FOR imie='Krzysztof' OR imie='ANETA' nr, nazwisko OFF

Można również określic zakres:

LIST 
LIST ALL
LIST NEXT 2
LIST REST

Podobne w działaniu jest polecenie display.

Przykłady:

 DISPLAY - bieżący rekord

 goto top
 display rest (jak display all)

display telefon for nazwisko='Kowalski'

Polecenie browse umożliwia przeglądanie i poprawianie rekordów. Pisze się komendę browse lub wybiera z menu Update Browse (albo Koryguj Buszuj w Polonus)

Przechodzenie między polami przy użyciu <Home> i <End> a miedzy rekordami klawiszami kursor w górę i w dół.
W ramach pola kursor przesuwamy klawiszami strzałki kursora lewo, prawo.
Jeśli pole nie mieści się na ekranie to ekran można przesuwać <Ctrl>-> lub <Ctrl><-

Modyfikowanie bazy

4) Zastosować polecenia:
APPEND, EDIT, BROWSE, INSERT, CHANGE

Często trzeba zmienić rekord bieżący.
Stosuje się polecenie locate z parametrem for
locate [<zakres.] [for <warunek>] [while <warunek>]
np. 

locate for nazwisko='DZIALACH'
lub 
locate for nazwisko='DZIALACH'

edit

Zmiana rekordu bieżącego jest możliwa poleceniem goto
goto/go [record] <wyrażenie> [bottom/top]
Np. goto 10

go top   - na początek bazy
goto bottom     - na koniec bazy

Delete - zaznacza bieżący rekord do skasowania

Pack usuwa fizycznie z bazy danych rekordy zaznaczone do skasowania


Porządkowanie bazy


W celu łatwiejszego odnajdywania rekordów należy je uporządkować. 
Np. ułożyć w kolejności alfabetycznej wg nazwiska i imienia. 
Najlepszą metodą jest indeksowanie bazy wg określonych pól. 
Indeksowanie nie zmienia fizycznego ułożenia rekordów, ale tworzy specjalny zbiór indeksowy zawierający informacje o logicznej kolejności rekordów. 
Zbiór indeksowy jest automatycznie modyfikowany (porządkowany) przy wpisywaniu nowego rekordu (jeśli bazę otworzy się łącznie z odpowiednim plikiem indeksowym).
Plik indeksowy tworzy się poleceniem

index on <wyrażenie> to <plik_indeksowy> [unique]
- tworzy plik indeksowy skojarzony z aktywną bazą danych. Pola kluczowe są układane alfabetycznie, chronologicznie lub numerycznie (rosnąco). 

Opcja Unique powoduje pomijanie powtarzających się kluczy
index on nazwa_pola_i[+nazwa_pola_j+..] to nazwa
np.

index on nazwisko+imie to nazw

Aby możliwa była automatyczna zmiana indeksów, bazę należy otwierać poleceniem

use znajomi index nazw

Wykonanie polecenia:
list nr, imie, nazwisko, telefon off
po indeksowaniu bazy wg pola nazwisko i imie spowoduje wyświetlenie listy posortowanej wg nazwisk i imion w ramach wspólnych nazwisk.

Inną metodą porządkowania jest sortowanie bazy. Jest to czynność pracochłonna polegająca na fizycznej zmianie kolejności rekordów w pliku bazy danych.

Każde wprowadzenie nowego rekordu powoduje konieczność ponownego posortowania bazy, z tego względu metoda ta jest mniej popularna i moze być stosowana
w odniesieniu do baz o małej liczbie rekordów. 

Do sortowania bazy danych stosuje się polecenie:
sort to nowy_plik on nazwa_pola

Można sortować w porządku rosnącym dodając parametr /A (domyślnie) lub malejącym (/D).

Pełna forma polecenia:
sort to <nowy plik> on <pole1> [/a] [/c] [/d] [, <pole2> [/a] [/c] [/d] ... [<zakres]] [for <warunek.] [while <warunek>]


4) Zaindeksować bazę na pola nazwisko i imie - utworzyc plik nazw.ind
index on nazwisko+imie to nazwa
use znajomi index nazwa
list nr, imie, nazwisko, telefon off

5) Posortować bazę wg nazwiska i wyprowadzić wyniki do pliku znajomi1.dbf

SORT TO znajomi1 on nazwisko


Programowanie baz danych w dBase

System dBase umożliwia pisanie programów na obsługę bazy. 

Przykład programu, który na podstawie wprowadzonego imienia i nazwiska sprawdza czy osoba w bazie istnieje i jeżeli nie to dopisuje nowy rekord automatycznie wypełniając pola imie i nazwisko
W przeciwnym wypadku umożliwia dokonanie zmian w danych istniejącej osoby.
W przykładzie tworzone są 2 zmienne mimie i mnazwisko, w których przy użyciu poleceń get i read zapamiętane są dane wprowadzone przez użytkownika.

Do przeszukiwania wykorzystano funkcję found().

Program można napisać pod dowolnym edytorem ASCII a można wykorzystać edytor tekstowy bazy poleceniem:
modify command plik_programu
np. modify command dopisz.
Po wpisaniu naciśniecie Ctrl End zapisuje program na dysku, dodając rozszerzenie prg, tutaj dopisz.prg.

set talk off
set bell off
use znajomi
index on nazwisko+imie to nazw
use
use znajomi index nazw
clear
mnazwisko=space(20)
mimie=space(20)
@2,4 say 'Podaj nazwisko'
@2,30 get mnazwisko
@4,4 say 'Podaj imie'
@4,30 get mimie
read
seek mnazwisko+mimie
if .not. found()
append blank
replace nazwisko with mnazwisko
replace imie with mimie
else
edit
endif
set talk on
set bell on



6) Napisać i uruchomić program dopisz. prg

MODIFY COMMAND plik_programu  - uruchomienie edytora tekstu.

Uruchomić polecenie:
MODIFY COMMAND dopisz

Wpisać treść:
set talk off
set bell off
use znajomi
index on nazwisko+imie to nazw
use
use znajomi index nazw
clear
mnazwisko=space(20)
mimie=space(20)
@2,4 say 'Podaj nazwisko'
@2,30 get mnazwisko
@4,4 say 'Podaj imie'
@4,30 get mimie
read
seek mnazwisko+mimie
if .not. found()
append blank
replace nazwisko with mnazwisko
replace imie with mimie
else
edit
endif
set talk on
set bell on
Po wpisaniu nacisnąć CTR END - zapisanie programu na dysku.

Uruchomić powyższy program (dopisz.prg):
DO dopisz

Dopisać kilka rekordów
Uzupełnić dane: BROWSE

7) Zamknąć bazę danych i otworzyć ponownie oraz przetestować dopisywanie i usuwanie danych
USE - zamyka
USE Znajomi - otwiera
Uruchomić: LIST, BROWSE
Dopisać przez APPEND rekord z nazwiskiem na X, np. Xawery1 i Xawery2
oraz z nazwiskiem NOWY i datą urodzenia  12/31/10  (mc/dz/rok)
Sprawdzić przez LIST ALL
Skasować nazwiska na 'X' poleceniem
DELETE ALL FOR Nazwisko='X' .OR. Nazwisko='x'
DELETE ALL FOR data_ur >= CTOD('12/31/10')

8) Przetestować działanie funkcji dBase

Wykonać polecenia:
x=5
z=3*x
?x
?z

? abs(-5)
? int(2.34)
? 2^3
? 2**3
? date()
? time()
? mod (7,5)
? sqrt(16)

Wyniki skopiować do painta i zapisać w pliku Nazwisko.GIF
Bazę danych Znajomi.dbf skopiować na nazwę nazwisko.dbf