ASP - kik - Koszalin

advertisement
Systemy zarządzania relacyjnymi bazami danych
(Dostęp do baz danych w Internecie)
Wykł. prof. W. Khadzhynov p. 310
_____________________________________________________________
_________
Literatura:
1. Scott Mitchell. Active Server Pages 3.0 , SAMS Publishing, Helion,
Warszawa, 2001.
2. Greg Buczek. ASP Kompedium programisty HELION, 2002.
3. C.J.Date. Wprowadzenie do systemów baz danych, Klasyka
Informatyki,Wydawnictwa Naukowo-Techniczne, Warszawa, 2000.
4. Maria Chałon. Systemy baz danych. Wprowadzenie, Oficyna
Wydawnicza Politechniki Wrocławskiej,Wrocław 2001.
1
Technologii dostępu do baz danych w Internecie .......................................... 4
Serwery WWW ............................................................................................... 5
Model programowania klient-serwer aplikacji w Internecie. ......................................... 5
Serwery WWW firmy Microsoft .................................................................................. 11
Personal WEB Server ................................................................................................... 13
Internet Information Server (IIS) .................................................................................. 16
Przykład strony ASP ..................................................................................................... 18
Podstawy HTML ........................................................................................... 19
Podstawowe znaczniki: <html>, <head>, <body> ....................................................... 20
Znaczniki informacyjne i formatowania tekstu ............................................................ 21
Adresacja....................................................................................................................... 24
Grafika .......................................................................................................................... 24
Język VBScript ............................................................................................. 25
Typy danych.................................................................................................................. 25
Funkcję określenia typu danych.................................................................................... 27
Rekomendacji dotyczące stylu tworzenia nazw zmiennych ....................................... 29
Operatory dostępne w VBScript ................................................................................... 30
Operator przypisania ................................................................................................. 30
Operatory matematyczne .......................................................................................... 30
Struktury sterujące języka VBScript ............................................................................. 31
Logika warunkowa.................................................................................................... 31
Logika pętli ............................................................................................................... 33
Procedury i funkcji ........................................................................................................ 37
Funkcje wbudowane ..................................................................................................... 38
Wbudowane obiekty ASP ............................................................................. 39
Wykorzystanie formularzy ........................................................................... 43
Kolekcja ServerVariables obiektu Request .................................................. 49
Wykoryzstanie cookies ................................................................................. 51
Przechowywanie informacji w obiektach Session oraz Application ............ 53
Dostęp do plików i folderów ........................................................................ 58
Wykorzystanie obiektu FileSystemObject ................................................................... 59
Wykorzystanie obiektów File i Folder .......................................................................... 62
Otwieranie plików ......................................................................................................... 66
Stworzenie plików ........................................................................................................ 69
Odczytywanie zawartości plików ................................................................................. 70
Zapisywanie plików na serwerze .................................................................................. 71
Dostęp do baz danych ................................................................................... 73
Standard ODBC (Open Database Connectivity)........................................................... 73
Uniwersalna strategia dostępu OLE DB ....................................................................... 75
Dostęp do baz danych przy użyciu ADO ...................................................................... 77
Otwieranie oraz zamykanie połączenia z bazą danych(Obiekt CONNECTION) .... 77
Obiekt RECORDSET ............................................................................................... 81
2
Użycie pliku adovbs.inc ............................................................................................ 87
Wykorzystanie metody EXECUTE obiektu CONNECTION .................................. 87
Sterowanie transakcjami ........................................................................................... 90
Filtrowanie rekordów w obiekcie Recordset ............................................................ 92
Obiekt COMMAND ................................................................................................. 94
Grupowa modyfikacja rekordów bazy danych ......................................................... 97
Wstawianie rekordów do bazy danych ..................................................................... 99
Dodawanie rekordów do bazy danych przez formularza ........................................ 103
Realizacja skryptów na stronie klienta ....................................................... 106
Zastosowania obiektów ASP oraz ADO dla połączenia z bazą danych ..... 110
Przesyłanie plików pomiędzy klientem a serwerem................................... 113
Przykład projektu aplikacji bazodanowej w środowisku INTERNET ....... 124
Opis procesów biznesowych. ...................................................................................... 124
Opis struktury bazy danych ........................................................................................ 124
Opis kodu źródłowego stron aplikacji ........................................................................ 125
Przykład realizacji. Baza danych dokumentów w środowisku Internet .... 130
Przykład realizacji. Czasopismo elektroniczne. ....................................... 139
Wymogi do projektu aplikacji bazodanowej .............................................. 148
Pytania kontrolne po kursu „Systemy zarządzania relacyjnymi bazami
danych”. ...................................................................................................... 149
3
Technologii dostępu do baz danych w Internecie
Ostatnio można zaobserwować wzrost prezentacji różnego typu informacji
w Internecie. Możliwość prezentacji różnego typu materiałów na
graficznych stronach WWW przyczyniła się do integracją baz danych z
serwerami WWW. Ma to podstawowe znaczenie przy budowie szerokiej
gamy usług internetowych i intranetowych ( intranetowa sieć to jest sieć
Internet, która działa tylko w zasięgu przedsiębiorstwa) . Integracja baz
danych z serwerami WWW dozwoli otrzymać następne możliwości:
 Wyszukiwanie tekstowej informacji w archiwach danych;
 Prezentację tabel z danymi tekstowymi i liczbowymi poprzez systemy
ogłoszeń;
 Stworzenia i prezentację systemów śledzenia zamówień;
 Stworzenia i prezentację elektronicznych multimedialnych katalogów;
 Realizacja sklepów internetowych.
Internet ma największy i praktyczne nieograniczony zasięg. Użytkownik
może w nim korzystać z wielu usług. Bardzo prężnie rozwijają się usługi,
dające możliwość zaprezentowania swojej informacji na stronach WWW.
Ogromną zaletą jest niezależność od stosowanej platformy sprzętowej i
systemowej.
WWW stwarza możliwość prezentacji swoich danych oraz odczytywania
informacji udostępnianych przez ogromną liczbę jej użytkowników. Aby
przedstawić dane w WWW, trzeba stworzyć dokument i umieścić go na
serwerze WWW. Odczytywanie odbywa się przy pomocy specjalnych
programów nawigacyjnych zwanych przeglądarkami. Ich zadaniem jest
nawiązanie komunikacji z serwerem i odpowiednia interpretacja
znajdujących się tam dokumentów.
Na potrzeby prezentacji dokumentów w sieci Internet powstał język
programowania HTML(ang. HyperText Markup Language). Dokument
HTML jest zwykłym plikiem tekstowym, w którym znajdują się polecenia
HTML. Oznacza to, że w dokumencie jest opisywana struktura a nie
wygląd, który zależy od używanego przez klienta programu
przetwarzającego, tzw. przeglądarki. Wynika z tego, że dokument taki
można utworzyć za pomocą najprostszego edytora tekstów. Jednak na rynku
pojawiło się już wiele specjalizowanych edytorów, które wydatnie ułatwiają
konstruowanie dokumentu, wspomagając wprowadzenie poleceń.
Internet miał początkowo służyć udostępnianiu wielu danych w formie ściśle
sprecyzowanej przez standardy HTML. Kolejnym krokiem w rozwoju
4
Internet była możliwość przedstawienia zawartości baz danych bezpośrednio
na stronach WWW. Dzięki temu, od odwzorowywania czysto statycznych
stron HTML, Internet teraz dynamiczne aktualizuje wiadomości, które są
zawarte w bazach danych. Standard HTML przy tym nie uległ wielkim
przeobrażeniom.
Serwery WWW
Dla udostępnienia użytkownikom danych, niezależnie od tego czy będą to
dokumenty w formacie HTML, czy informacje zawarte w bazach danych,
inne pliki, teksty, obrazki czy animacje, jest niezbędne korzystanie
usługami serwera WWW.
Serwer WWW to komputer z oprogramowaniem, na którym są
przechowywane wszystkie strony wchodzące w skład witryny
internetowej i wyposażony w specjalne oprogramowanie umożliwiające
przesyłanie tych stron do przeglądarek, które ich żądają.
Oprogramowanie serwera WWW sprawia, że osoba korzystająca go
usługami może skorzystać z udostępnionych zasobów, nie wnikając w
szczegóły dotyczące ich lokalizacji i metod dostępu do nich. Jedyną istotną
kwestią jest uwzględnienie ich w zasobach przez administratora. Serwer
WEB, to znaczy, że bez względu na to skąd łączy się użytkownik do serwera
WWW to jest narzędzie, które zapewni przezroczystość dostępu do
resursów, nie musi on dokładnie wiedzieć gdzie znajdują się potrzebne emu
dane. Użytkownik pragnąc skorzystać z zasobów znajdujących się na
serwerze generuje żądanie przesłania danych. Serwer odbiera zgłoszenie
przeglądarki, przesyła żądany plik i kończy połączenie.
Model programowania klient-serwer aplikacji w Internecie.
W pierwszy
roki swego istnienia Internet służył jako medium
komunikacyjne wykorzystywane przez członków organizacji rządowych i
edukacyjnych. Początkowo Internet służył jedynie entuzjastom jako miejsce
tworzenia „stron domowych”, jednak wraz ze wzrostem ilości osób
korzystających z niego, stał on źródłem wszelkiego typu informacji.
Internetem teraz zaczęły interesować liczne firmy sprzedające towary i
usługi. Firmy te nie istnieją fizyczno, a jedynie wirtualnie. Na przykład,
można kupić oprogramowanie, komputer czy inne towary przez witryny
internetowe firmy sprzedawca .
W początkowym okresie istnienia WWW dla tworzenia stron WWW był
wykorzystany język HTML. Strony WWW byli statycznymi. Jednak dziś,
informacja na stronach bardzo szybko staje przestarzałą oraz ilość danych
osiąga dużych rozmiarów.
Rozpatrzymy technologię obrabiania informacji w Internet.
5
W modelu klient-serwer dwa komputery współpracują ze sobą w celu
wykonania określonego zadania. Komputer pełniący rolę klienta żąda
potrzebnych informacji od komputera pełniącego rolę serwera. Serwer
zwraca informacje, na których klient może operować.
W Internecie klientami są przeglądarki WWW. Podczas wyświetlania w
przeglądarce statycznej strony WWW realizowane są następujące czynności
(Rys.1):
1. Klient (czyli przeglądarka) szuka na wyznaczonym serwerze DNS
(Domain Name Server) adres IP komputera po nazwisku domen,
określonych w pierwszej części wirtualnego adresu URL (Uniform
Resource Locator) (np.: www.ie.tu.koszalin.pl)
2. Klient lokalizuje serwer WWW określony za pomocą fizycznego IP adresu (np.199.170.179.237) oraz posyła adres potrzebnej WEB – strony,
która musi być rozmieszona na serwerze WWW.
3. Web – serwer czyta adres strony, szuka ją i posyła do klienta.
4. Klient odbiera kod HTML-a przesłany z serwera, a następnie analizuje go
i wyświetla.
Serwer WWW działa w tym trybie pasywnie, nie wykonuje żadnych
czynności, oczekując na nadsyłanie przez klientów żądania przesłania
statycznych stron WWW. Po otrzymaniu takiego żądania serwer przesyła
stronę klientowi i znów przechodzi w stan oczekiwania na następne żądania.
Przedstawiona powyżej sekwencja czynności umożliwia przesyłanie
klientom wyłącznie statycznych stron WWW.
Dla przechowywania danych na stronach internetowych wykorzystają bazy
danych. Dostęp do baz danych potrzebuje bardziej aktywną roli serwera. Dla
dynamicznego tworzenia stron internetowych oraz dostępu do danych
istnieją różne technologii od różnych producentów. Główne pomiędzy nimi
to są:
1. Active Server Pages – (ASP) (aktywne strony serwera)
2. PHP
3. Java Server Pages.
ASP są rozwiązaniem firmy Microsoft.
Dokumenty ASP składają się z dwóch elementów: kodu programu oraz kodu
HTML. Kod programu może być napisany w kilku różnych językach
skryptowych.
Język skryptowy to ściśle określona składnia poleceń przeznaczonych
do uruchamiania na komputerze.
Program składający się z poleceń zapisanych w określonym języku
skryptowym jest określany mianem skryptu.
6
DNS-Server
1
WEB-Server
2
HTML
Pages
4
WEB
Browser
(klient)
3
FIG 1.
7
Bazowym językiem skryptowym ASP może być VBScript lub JScript.
Najwięcej rozpowszechnianym językiem skryptowym w ASP jest VBScript.
Będziemy rozpatrzyć
przykłady realizacji kodów skryptowych za
dopomogą VBScript.
Strony ASP to są kombinacja kodu HTML oraz skryptu VBScript. WWW
musi przetworzyć tą kombinację do kodu HTML, potem przesłać kod
HTML do klienta. Poniżej przedstawiona została sekwencja czynności
wykonywanych podczas zgłoszenia żądania dostępu do strony ASP (Rys.2):
1. Klient (czyli przeglądarka) szuka na wyznaczonym serwerze DNS
(Domain Name Server) adres IP .
2. Klient lokalizuje serwer WWW określony za pomocą IP - adresu oraz
posyła adres potrzebnej WEB – strony(HTML lub ASP), która musi być
rozmieszona na serwerze WWW.
3. Web – serwer odczytuje stronę ASP i przetwarza umieszczone w niej
kody skryptów.
4. Po całkowitym przetworzeniu strony ASP przez Serwer wynikowy kod
HTML jest przesyłany do klienta.
5. Klient odbiera kod HTML-a przesłany z serwera, a następnie analizuje go
i wyświetla.
Klient nie w stanie zauważyć żadnej różnicy pomiędzy stroną ASP a
statyczną stroną WWW, gdyż w obu przypadkach otrzymuje z serwera
wyłącznie
kod
HTML.
8
DNS-Server
1
WEB-Server
2
WEB
Browser
(klient)
3
HTML
Pages
5
ASP
Pages
4
ASP Processing
FIG 2.
9
Przetwarzając stronę ASP serwer interpretuje i wykonuje umieszczony w
niej program. Kod tego programu nie jest przesyłany do klienta. Żeby serwer
mógłby określić czy klient żąda przesłania statycznego dokumentu HTML,
czy strony ASP, trzeba nadać odpowiednie rozszerzenie pliku tego
dokumentu: *.htm lub *.asp.
Przykład 1.
Rozpatrzymy prosty kod ASP wyświetlający aktualną godzinę (listing1).
Listing 1.
1. <%@ Language=VBScript %>
2. <HTML>
3. <BODY>
4. Aktualna godzina to:
5. <% Response.Write Time()%>
6. </BODY>
7. </HTML>
Przy przetwarzaniu tego kodu na serwerze ten kod będzie mieć następny
wygląd:
Listing 1a.
1. <HTML>
2. <BODY>
3. Aktualna godzina to:
4. 18:16:12
5. </BODY>
6. </HTML>
W listingu 1 kod skryptu ASP (czyli prosto kod ASP) jest zapisany
pomiędzy znaczkami <% oraz %>. Kiedy zostaje zgłoszone żądanie
przesłania strony ASP, serwer WWW przed przesłaniem jakichkolwiek
wyników do klienta, wykonuje wszystkie fragmenty kodu zapisane
pomiędzy tymi znacznikami. Kod przedstawiony na listingu 1
prawdopodobnie bardzo przypomina normalny dokument HTML. Kody
obiektów oraz instrukcji HTML są umieszczone na stronie ASP w liniach :
2.,3.,4.,6. oraz 7. Kod ASP jest umieszczony w liniach 1 oraz 5. Linia numer
1 informuje serwer WWW o tym, jaki język skryptowy będzie wykorzystany
na konkretnej stronie. Do określenia języka skryptowego używanego na
danej stronie ASP służy dyrektywa
@ Language=VBScript.
Linia 5 kodu ASP wyświetla aktualny czas. Funkcja Time() jest funkcją
języka VBScript. Metoda Response.Write przesyła wyniki wywołania
10
funkcji Time() do klienta. Obiekt Response jest wewnętrznym obiektem
ASP.
Dla uruchomienia pliku listing 1 trzeba wykonać następne kroki:
1. Zainstalować na komputerze serwer WWW firmy Microsoft(Personal
WEB Server lub Internet Information Server).
2. Utworzyć zasobami serwera WWW katalog aspwyklady.
3. Utworzyć plik o nazwie aktualnyczas.asp i umieść go w katalogu
aspwyklady serwera.
4. Uruchomić przez przeglądarkę ten plik. W tym celu mogą być
wykorzystywane następne adresy URL:
http://had/aspwyklady/aktualnyczas.asp
http://localhost/aspwyklady/aktualnyczas.asp
http://127.0.0.1/aspwyklady/aktualnyczas.asp
Listing 2 zawiera źródłowy kod HTML otrzymany przez przeglądarkę.
Przetworzenie poleceń ASP powoduje wygenerowanie kodu HTML. Do
przeglądarki przesyłany jest wyłączne kod HTML.
Serwery WWW firmy Microsoft
Serwer WWW umożliwiający obsługę stron ASP przetwarza żądaną stronę
zanim prześle ją do klienta. Podczas tego przetwarzania wykonywane są
następujące czynności:
1. Kod programu umieszczony na stronie ASP jest interpretowany przez
serwer.
2. Serwer WWW informuje przeglądarkę o fakcie przesyłania informacji w
postaci kodu HTML, a następnie przesyła wyniki wykonania strony ASP.
Przeglądarka odczytuje nadesłany kod HTML i wyświetla go.
Jeśli nie jest zainstalowany serwer WWW , to te czynności nie będą
realizowane. Technologia ASP jest realizowana w następnych serwerach
WWW firmy Microsoft:
1. Personal Web Server ( w skrócie PWS)
2. Internet Information Server (w skrócie IIS).
Personal Web Server jest „okrojona” wersję profesjonalnego serwera WWW
firmy Microsoft. Ten produkt jest przeznaczony do współpracy z systemami
operacyjnymi: Windows 95, Windows 98, oraz Windows NT Workstation.
Personal Web Server można bezpłatnie pobrać z witryny WWW firmy
Microsoft.
Internet Information Server (IIS) jest profesjonalnym serwerem WWW.
Ostatnia wersja tego serwera nosi numer 5.0 i jest rozprowadzana wraz z
systemem WINDOWS 2000. Technologia ASP 3.0 jest właśnie fragmentem
tego serwera i wraz z nim jest automatyczne instalowana.
11
W WINDOWS NT SERWER (lub WORKSTATION) można korzystać z
serwera IIS 4.0. Ten serwer jest pakiecie „WINDOWS NT OPTION
PACK”, który można bezpłatnie pobrać z witryny WWW firmy Microsoft.
Serwer IIS 4.0 nie pozwala na korzystanie z technologii ASP 3.0.,
automatyczne jest instalowana obsługa ASP 2.0.
Przy instalacji systemu operacyjnego komputera musi być instalowany
protokół TCP/IP. Każdy komputer ma IP – adres oraz swoje nazwisko, które
odpowiada temu IP –adresu. Na rys.3 jest pokazana zakładka
„Identifikation” okna „Network” paneli sterowania komputera. Pole
„COMPUTER NAME” zawiera nazwisko komputera.
Rys.3
Zakładka „protokół” zawiera IP adres komputera (rys.4.)
12
Adresem wirtualnym nazywa się katalog oraz nazwę pliku żądanego za
pośrednictwem adresu URL.
Serwer WWW musi odwzorować adres wirtualny na adres fizyczny.
Adresem fizycznym nazywa się jednoznaczną ścieżkę dostępu do
konkretnego pliku.
Katalog wirtualny to jest wskaźnik na katalog fizyczny.
Rys.4
Personal WEB Server
Po wybraniu standardową instalację Personal WEB Servera na ekranie
wyświetlane jest okno dialogowe umożliwiające określenie katalogu, który
będzie używany jako domyślny katalog macierzysty serwera (home
directory). Można podać dowolną ścieżkę adresu fizycznego, jednak
13
zwyczajowo przyjęło się że adresem fizycznym korzenia jest katalog
c:\InetPub\wwwroot. Ten adres fizyczny jednoznaczne odpowiada
nazwisku komputera serwera oraz go IP adresu. Wszystkie zapytania stron
WWW do serwera protokół HTTP będzie szukać w katalogu fizycznym
InetPub\wwwroot. To znaczy, że wszystkie strony WWW musi być tam
rozmieszone.
Po wybraniu adresu fizycznego korzenia program instalacyjny zaczyna
kopiować na komputer wszystkie konieczne pliki. Kiedy instalacja zostanie
zakończona, trzeba będzie ponownie uruchomić komputer. Po uruchomieniu
komputera trzeba kliknięć na ikonką PWM(Personal WEB Manager). Okno
PWM składa się z pięciu (albo trzech w innych wersjach) paneli.
Na rys.5. jest pokazane panel „MAIN” już zainstalowanego Personal WEB
Servera, gdzie jest wyświetlone nazwisko komputera oraz fizyczny adres
katalogu macierzystego.
Rys.5
14
Następne adresy wirtualne :
http:// had/aspwyklady/aktualnyczas.asp
http:// had/default.asp
htpp:// had/magazyn/default.htm
zostaną zamienione przez serwer WWW na następujące adresy fizyczne:
d:\Inetpub\wwwroot\ aspwyklady/aktualnyczas.asp
d:\Inetpub\wwwroot\default.asp
d:\Inetpub\wwwroot\magazyn\ default.htm
Oprócz nazwiska, które jest wyznaczone w oknie MAIN (rys.5), każdy
komputer WINDOWS rozpoznaje nazwisko „LOCALHOST”, mające IP
adres 127.0.0.1. To jest adres specjalny po któremu komputer odwoła do
sobie. Można wykorzystywać następny adres URL dla odwołania do stron
na własnym komputerze:
http:// localhost/aspwyklady/aktualnyczas.asp
http:// 127.0.0.1/aspwyklady/aktualnyczas.asp
Serwer można zatrzymać, klikając przycisk STOP. Jeśli przeglądarka będzie
próbować wyświetlić stronę w momencie, gdy serwer WWW jest nieczynny,
to zostanie wyświetlony komunikat o niemożliwości zestawienia połączenia
z serwerem. Panel MAIN zawiera także informację statystyczne o
aktywności serwera. Można wyświetlić następujące informacje: ilość żądań
na godzinę, ilość żądań na dzień, ilość gości na dzień oraz ilość gości na
godzinę.
Bardzo przydatnym panelem w oknie dialogowym PWM jest panel o nazwie
Zaawansowanie (Adwanced), przedstawiony na rys. 6.
W panele tym można modyfikować właściwości dotyczące całej witryny.
Pierwsza z nich o nazwie DEFAULT DOCUMENTS określa, czy serwer
ma wyświetlać dokument domyślny w sytuacji, gdy użytkownik nie określi
adresu dokumentu w zadaniu. Jeśli dokumentami domyślnymi będą pliki o
nazwiskach Default.htm oraz Default.asp , to gdy użytkownik poda adres
URL o postaci:
http: // had/
serwer sprawdzi, czy w katalogu głównym serwera jest umieszczony plik o
nazwie Default.htm lub Default.asp . Jeśli plik nie zostanie znaleziony, to
serwer zwróci do przeglądarki błąd o numerze 404 oznaczający, że
poszukiwanego pliku nie można było odnależć.
Kolejną opcją dostępną na panelu Zaawansowanie (Adwanced) jest opcja
Zezwalaj na przeglądanie katalogów (Allow Directory Browsing). Jeśli
opcja ta zostanie zaznaczona I użytkownik poda adres URL, w którym nie
będzie określona nazwa pliku oraz jeśli serwer nie odnajdzie plików, to w
15
przeglądarce zostanie wyświetlona zawartość podanego katalogu.
Standardowa ta opcja jest wyłączona.
Opcja Save Web Site Aktivity Log (Zapisuj dziennik aktywności Web
stron) tworzy raporty, dotyczące pracy serwera.
Rys.6
Internet Information Server (IIS)
Internet Information Server (IIS) jest profesjonalnym serwerem WWW.
IIS4.0 może być instalowany w Windows NT, IIS 5.0 – w Windows 2000.
IIS składa się nie tylko z samego serwera WWW lecz także z kilku innych
elementów, takich jak serwer FTP oraz SMTP. Aby wybrać jakie elementy
mają zostać zainstalowane, trzeba zaznaczyć te komponenty przyciskiem
Details. Jeśli do edycji stron WWW trzeba korzystać z programów
Microsoft InterDev lub FrontPage, to trzeba zainstalować także komponenty
o nazwie FrontPage 2000(98 dla NT) Server Extensions.
Głównym narzędziem IIS jest program Internet Services Manager . Ten
program można uruchomić z menu startowego. Na rys 7. Przedstawione
16
zostało okno programu Internet Services Manager (ISM). W Windows NT
ten program ma nazwisko Microsoft Management Console (MMC), w
Windows 2000 – IIS.
Internet Services Manager pozwala na konfiguracje serwera WWW, serwera
FTP, usług SMTP oraz Microsoft Transaction Servera. Program ten
wyświetla strukturę katalogów wirtualnych serwera WWW.
Rys. 7
Konfiguracja opcji korzeniowego węzła WWW jest możliwa po kliknięciu
Default Web Site prawym przyciskiem myszy i wybraniem opcji Properties
z menu kontekstowego (rys.8). Po wybraniu tej opcji na ekranie zostanie
wyświetlone okno dialogowe WEB Site Properties, które zawiera wiele
zakładek, na których dostępnych jest bardzo dużo różnego rodzaju opcji.
Zakładka Home Directory (katalog macirzysty) zawiera różne opcji. W
opcję Local Path (ścieżka lokalna) jest podana ścieżka dostępu adresu
fizycznego korzenia WWW. Poniżej opcji Local Path umieszczona jest
grupa pól wyboru. Opcje te są takie same jak opcje dostępne w PWS.
17
Rys.8
Przykład strony ASP
Po zainstalowaniu serwera WWW można tworzyć strony ASP i zapisywać
je w katalogu głównym lub w go podkatalogach.
Przykład 2.
Przepuśćmy, że na stronie WWW trzeba wyświetlić komunikaty o treści
zależnej od pory dnia. Do godziny 19.00 musi być wyświetlony komunikat
„Dzień dobry”, a po niej – „Dobry wieczór”.
Na listingu 2 został przedstawiony kod strony ASP wyświetlającej
komunikat o treści zależnej od pory dnia.
Listing 2(Komunikat1.asp).
1.
<%@ Language=VBScript %>
2.
<% Option Explicit %>
18
3.
<HTML>
4.
<BODY>
5.
Teraz jest <% =Time() %>
6.
<P>
7.
<%
8.
If DatePart ("h",Time()) >= 19 then
9.
' czy jest wieczor
10. Response.Write "Dobry wieczor!"
11. Else
12. ' Czy jest dzien
13. Response.Write "Dzien dobry!"
14. End If
15. %>
16. </BODY>
17. </HTML>
Aby zobaczyć wyniki wykonania powyższego skryptu, trzeba stworzyć
stronę ASP i nadać jej nazwę komunikat1.asp , po tym zapisać w katalogu
wirtualnym(lub głównym) serwera. Następne umieścić w niej kod podany na
listingu i wyświetlić stronę za pomocą przeglądarki.
Przyjrzyjmy się dokładniej kodowi przedstawionemu na listingu 2.
Linia1 zawiera dyrektywę @ Language, informującą serwer WWW, jaki
język skryptowy jest domyślnie używany na danej stronie.
Linia 2 zawiera instrukcję Option Explicit, dzięki której wszystkie zmienne
muszą być jawnie deklarowane.
Linię 3,4,6,16 oraz 17 zawierają kody HTML.
Linia 5 zawiera tekst „Teraz jest” który będzie wyświetlony oraz funkcję
języka VBScript Time(), która wyznacza aktualny czas. Znak „=” ma takie
same działanie, jak wywołanie metody Response.Write – czyli powoduje
przesłanie informacji do przeglądarki.
Linie od 7 do 15 stanowią blok kodu ASP umieszczony pomiędzy
znacznikami <% oraz %>.
Linia 8 zawiera instrukcję IF. Dzięki niej można sprawdzić aktualny czas
systemowy I określić, czy jest dzień, czy wieczór. Funkcja DatePart() jest
wykorzystywana dla pobrania aktualnej godziny.
Podstawy HTML
HTML – to jest skrót od Hypertext Markup Language . HTML dokument
zawiera kod dokumentu oraz kody formatowania. Przeglądarka interpretuje
te kody formatowania i odwzorowuje stronę WEB. Kody formatowania są
zanurzone w znaczniki lub deskryptory HTML.
19
Na etapie planowania witryn sieciowych należy poświęcić czas na
zastanowienie się nad tym, kto będzie czytał tworzone strony, w jaki sposób
odbiorcy widzą i rozumieją informacje, jakiego typu komputerów używają,
jakie mają oprogramowanie do przeglądania sieci i jak szybkie są ich
połączenia. Po określeniu typu odbiorcy trzeba zastanowić się nad
komunikatami, które mają być mu przesyłane za pośrednictwem witryny oraz nad najlepszymi sposobami ich przekazywania. Projektując witrynę,
projektant musi podjąć decyzję, jak spełnić bardzo różne oczekiwania
odbiorców.
Najwięcej rozpowszechnione znaczniki są przedstawione w następnej tabeli.
Deskryptor (znacznik)
<HR>
<BR>
<B> oraz </B>
<I> oraz </I>
<U> oraz </U>
<center> oraz </center>
<A HREF =url> tekst odwołania
</A>
<!-- komentarz -->
<IMG SRC = plik ALT = tekst>
<HTML> oraz </HTML
<HEAD> oraz </HEAD>
<BODY> oraz </BODY>
<TABLE> oraz </TABLE>
<TR> oraz </TR>
<TD> oraz </TD>
Opis
Rozdzielenie poziomowe
Koniec linii
Czcionka typu „BOLD”
Czcionka typu „ITALIC”
Czcionka typu „UNDERLINE”
Centrowania tekstu
Wstawi odwalania do hyper tekstu (Hyper reference)
Znaczniki komentarza
Wstawi zdjęcie
Początek oraz koniec dokumentu
Początek oraz koniec nagłówku
dokumentu
Początek oraz koniec ciała
dokumentu
Początek oraz koniec tabeli
Wewnątrz znacznika <TABLE>
wyznaczy linię
Wewnątrz znacznika <TR>
wyznaczy kolumnę
Podstawowe znaczniki: <html>, <head>, <body>
W HTML'u zdefiniowane są trzy główne znaczniki opisujące ogólną
strukturę strony:
1. Znacznik <html>,
</html> mówi o tym, że zawartość odczytywanego
w danej chwili pliku o rozszerzeniu html lub htm jest kodem, napisanym
20
właśnie w HTML'u. Pomiędzy początkowym <html> a końcowym
znacznikiem </html> powinna znaleźć się cała zawartość kodu.
2. Znacznik <head>,</head> wyznacza odpowiednio początek i koniec
nagłówka strony. W jego obrębie może znajdować się kilka innych
znaczników (np.<title>). Nie można umieszczać w nim treści strony.
3. W obrębie znaczników <body>, </body> znajduje się cała zawartość
witryny czyli tekst, łącza, grafika itp.
Znaczniki informacyjne i formatowania tekstu
Tytuł
Znacznik <title> znajduje się zawsze wewnątrz nagłówka strony. Ma
on za zadanie skrótowe opisanie jej treści:
Nagłówki
Służą do wyróżniania tytułów poszczególnych działów. W
opisywanym języku jest zdefiniowane sześć poziomów nagłówków (od H1
do H6). Różnią się one miedzy sobą wielkością i atrybutami czcionki. Użyć
nagłówka można umieszczając pomiędzy znacznikiem <Hn> i </Hn> tekst
przeznaczony do wyróżnienia (n jest wartością z przedziału od 1 do 6).
Akapity
Początek akapitu wyznacza znacznik <p> zaś jego koniec </p>.
Listy
Istnieje kilka rodzajów list, które mają niektóre elementy wspólne:
Cała lista zawsze jest objęta przez znaczniki: początkowy i końcowy odpowiednio dla jej rodzaju.
Każdy jej element posiada swój własny znacznik
Istnieją następujące rodzaje list:
Listy wypunktowane
W tym typie listy, poszczególne jej podpunkty rozpoczynają się od
<li>. Cała lista jest umieszczona pomiędzy znacznikami. <ul> i </ul>.
Można również określić wygląd wypunktowania, poprzez zdefiniowanie
parametru (type). Wartość (disc) tego atrybutu spowoduje wyświetlenie
kółka, zaś jego wartość (square) - kwadratu. Parametr (type) wyznacza się
przy określaniu znacznika początkowego np:
 <ul type="square">
Listy menu
Ograniczają je znaczniki <menu> oraz </menu>. Elementy
poprzedzane są znacznikiem <li>. Ten rodzaj list jest bardzo podobny do
21
serii akapitów z tą różnicą, że niektóre przeglądarki potrafią go inaczej
sformatować.
Listy numerowane
Objęte są znacznikami głównymi <ol> i </ol>, a każdy podpunkt
listy podobnie jak powyżej rozpoczyna się od znacznika <li>. Przeglądarka
internetowa wyświetlając jej elementy numeruje je kolejno. Można określić
własny schemat numeracji za pomocą atrybutu (type) np.
 <ol type="1"> - 1.2.3.4
 <ol type="a"> - a,b,c,d
 <ol type="A"> - A,B,C,D
 <ol type="I"> - I,II,III,IV
Listy definicji
Cała lista definicji objęta jest znacznikami <dl> i </dl>. Każdy jej
podpunkt składa się z dwóch części oznaczonych w następujący sposób:

<dt> - znacznik pojęcia
 <dd> - znacznik definicji
Listy katalogów
Stworzone zostały dla krótszych elementów niż listy menu i są
wyświetlane w postaci kolumn. Są one zlokalizowane w obrębie znaczników
<dir> i </dir>, a każdy element poprzedzony jest znacznikiem <li>
Kolor tła
Żeby zmienić kolor tła strony WWW, należy jego nazwę lub wartość przypisać
atrybutowi (bgcolor) wewnątrz znacznika <body> np.
 <body bgcolor=#ff0000">
 <body bgcolor=red>
Kolory na stronie
Kolor tekstu i łączy
Do zmiany kolorów tekstu i połączeń używane są atrybuty:
22
 (text) -określa kolor każdego fragmentu tekstu na stronie, który nie jest
połączeniem
 (link) -określa kolor połączeń, które nie zostały jeszcze uruchomione
 (vlink) -określa kolor tekstu połączenia, które zostało chociaż raz użyte
 (alink) -określa kolor aktywnego połączenia
Powyższe atrybuty należy umieszczać wewnątrz znacznika <body>:
 <body text=green vlink=#6666ff>
Łącza internetowe
Do tworzenia łączy internetowych na inne strony WWW służy
znacznik <a>i </a>. Może on być również używany do tworzenia
specjalnych miejsc wewnątrz stron, do których prowadzą inne połączenia.
Łączenie dwóch stron
Dla uzyskania połączenie na inną stronę należy w obrębie
początkowego znacznika łącza <a> zdefiniować parametr (href.) (przypisać
mu dany plik)
<a href="Index.html"> Łącze</a>.
W celu uzyskania połączenia z jednej strony internetowej na inną
umieszczoną w sieci WWW, atrybutowi (href) należy przypisać pełen adres
<a href="http://www.interia.pl>Portal</a>.
Tworzenie i użycie odnośników
Odnośniki to specjalnie oznaczone miejsca w dokumencie HTML, do
których można tworzyć połączenia. Odnośniki są wykorzystywane nie tylko
do tworzenia połączeń wewnątrz tej samej strony, ale także do innych stron.
Do tworzenia odnośników używany jest znacznik <a> z określonym
atrybutem (name)
<a name="Paragraf1">Paragraf nr 1</a>.
Jeśli pożądane jest połączenie w ramach tej samej strony, należy
parametrowi href przypisać etykietkę odnośnika, pod którą dany odnośnik
ma skoczyć np href=#Paragraf1. Poniżej przykład zdefiniowania łącza:
<a href=#Paragraf1>Paragraf nr 1</a>.
Łączenie dwóch stron do odnośnika
Aby utworzyć łącze do innej strony w określone odnośnikiem
miejsce, należy parametrowi href przypisać nazwę pliku, a po haszu także
etykietkę jego odnośnika. Tego typu połączenie mówi przeglądarce, aby po
wczytaniu strony rozpoczęte było jej wyświetlanie w części, na którą
wskazuje etykietka na łączu
<a href="jakasstrona.html#Paragraf1">Paragraf nr 1 na innej
stronie</a>.
23
Łącze pocztowe
Do wysyłania poczty elektronicznej służy (mailto). Przeglądarka po
wybraniu takiego rodzaju połączenia uruchamia procedurę edycji i
wysyłania poczty lub też, wywołuje program pocztowy
<a href=mailto:[email protected]>Adres</a>.
Adresacja
Adresacja bezwzględna
Ścieżki bezwzględne tworzone są w oparciu o pozycje pliku w
drzewie katalogów. Zawierają w sobie nazwy wszystkich katalogów
znajdujących się po drodze do żądanego pliku
<a href="/katalog/Index.htm."> Strona </a>.
Adresacja względna
Adres względny określa położenie pliku z punktu widzenia bieżącej
pozycji w hierarchii katalogów. Dwie kropki (..) wskazują na katalog
znajdujący się bezpośrednio powyżej bieżącego
<a href="../../../katalog/Index.html”> Strona </a>.
Grafika
Umieszczanie obrazka na stronie
Aby umieścić plik graficzny na witrynie WWW, należy użyć
znacznika <img> z atrybutem (src). Służy on do określenia ujętej w
cudzysłów nazwy i adresu pliku (obrazu), który w danym miejscu ma zostać
wstawiony
<img src="../../Grafika/Rysunek.jpg">.
Obramowanie grafiki
Za pomocą atrybutu <border> można zmienić szerokość ramki wokół
obrazka, a nawet usunąć ją
<img src="Rysunek.jpg" border=5>.
Wzajemne położenie grafiki i tekstu
Atrybut (aligin) umieszczony wewnątrz znacznika <img> umożliwia
ułożenie obrazu względem tekstu. Może on przyjmować wartości:
(top) - wyrównuje górną krawędź obrazu względem górnej krawędzi tekstu
(middle) – w tym wypadku środek obrazu znajdzie się dokładnie pośrodku
linii
(bottom) - wyrównuje dolną krawędź obrazu względem dolnej krawędzi
tekstu
(textop) - wyrównuje najwyższą część obrazu względem górnej krawędzi
najwyższej litery w linii.
24
(asmiddle) - wyrównuje grafiki w taki sposób, żeby jego środek leżał
pośrodku największego elementu linii
(asbottom) - wyrównuje dolną krawędź obrazu względem dolnej krawędzi
największego elementu w linii
(left) - pozwala na ułożenie obrazu przy lewym marginesie strony
(right) - umieszcza grafikę przy prawym marginesie strony.
Język VBScript
Typy danych
Istnieją następne typy danych, które można umieszczać w zmiennych
VBScript:
 Liczby całkowite (Integer);
 Liczby zmiennoprzecinkowe (Single lub Double)
 Łańcuchy znaków (String)
 Daty (Date)
 Dane logiczne (Boolean)
 Wartości monetarne (Currency)
 Obiekty.
W większości jeżyków programowania konieczne jest jawne określanie
typów zmiennych. Przy tym zmienna używana do przechowywania
łańcuchów znaków nie może posłużyć do przechowywania liczb.
Ograniczenie to nie występuje w języku VBScript. W tym języku są
wykorzystywane zmienne typu VARIANT, które pozwalają
na
przechowywania w zmiennej wartości dowolnego typu. Instrukcja DIM
służy do deklarowania zmiennych.
Dyrektywa OPTION EXPLICIT umieszczana jest zazwyczaj na samym
początku programu, aby wymusić jawne deklarowanie wszystkich
zmiennych.
W odróżnieniu od języka C++, język VBScript używany przy tworzeniu
stron ASP nie rozróżnia wielkości liter.
Przykład (listing vbscr_1.asp).
<%@ Language = VBScript %>
<% Option Explicit %>
<%
Dim iVar
ivar = 2
%>
<html>
<BODY>
Zmienna o iVar ma wartosc
25
<%
Response.Write(ivar)
%>
</BODY>
</html>
Istnieje specjalny typ danych – zmienna tablicowa. Zmienna tablicowa to
jest sekwencja zmiennych, które mają tę samą nazwę i są rozróżniane za
pomocą indeksu.
Przykład (listing vbscr_2.asp).
<%@ Language = VBScript %>
<% Option Explicit %>
<%
Dim arrDays (6), iIndeks
%>
<html>
<BODY>
<%
iIndeks = 3
arrDays (0) = "Poniedzialek"
arrDays (1) = "Wtorek"
arrDays (2) = "Sroda"
arrDays (3) = "Czwartek"
arrDays (4) = "Piatek"
arrDays (5) = "Sobota"
arrDays (6) = "Niedziela"
Response.Write("iIndeks ma wartosc ")
Response.Write(iIndeks)
%>
<BR>
arrDays(<% Response.Write iIndeks %>)
ma wartosc
<%
Response.Write(arrDays(iIndeks))
iIndeks = 0
%>
<BR>
<%
Response.Write("iIndeks ma wartosc ")
Response.Write(iIndeks)
%>
<BR>
arrDays(<% Response.Write iIndeks %>)
<%
Response.Write(arrDays(iIndeks))
ma wartosc
26
%>
</BODY>
</html>
Istnieje możliwość deklarowania stałych. W odróżnieniu od zmiennych
wartości stałych są określone podczas ich tworzenia, po czym nie można ich
już zmienić. Język VBScript dysponuje wbudowanymi stałymi, które mają
wyznaczone wartości. Wykorzystanie takich stałych poułatwiają czytelność
kodu programu. Stała jest deklarowana przy pomocy słowa kluczowego
CONST:
Const PODATEK =0.22
Funkcję określenia typu danych
W języku VBScript są dostępne dwie funkcje umożliwiające określenie typu
danych przechowywanych w zmiennej: VarType(nazwa_zmiennej) oraz
TypeName(nazwa_zmienej). Pierwsza funkcja zwraca liczbę całkowitą
stanowiącą kod określający typ zmiennej, druga zwraca nazwę tego typu.
Przykład (listing vbscr_3.asp).
<%@ Language = VBScript %>
<% Option Explicit %>
<%
Dim strName, iAge
%>
<html>
<BODY>
<%
Response.Write("Przed przypisaniem wartowartosci, zmienna
strName jest typu")
Response.Write(TypeName(strName))
Response.Write(", ktoremu odpowiada kod ")
Response.Write(VarType(strName))
%>
<BR>
<%
strName = "Janek"
iAge = 21
Response.Write("Teraz zmienna strName jest typu ")
Response.Write(TypeName(strName))
Response.Write(", ktoremu odpowiada kod ")
Response.Write(VarType(strName))
%>
<BR>
27
<%
Response.Write("Teraz zmienna iAge jest typu ")
Response.Write(TypeName(iAge))
Response.Write(", ktoremu odpowiada kod ")
Response.Write(VarType(iAge))
%>
</BODY>
</html>
Kody typów danych stosowane przez funkcję Vartype
Wartość Stała
Typ danych
0
vbEmpty
Empty
1
vbNull
Null
2
vbInteger
Integer
3
vbLong
Long
4
vbSinglle
Single
5
vbDouble
Double
6
vbCurrency
Currency
7
vbDate
Date
8
vbString
String
9
vbObject
Object
10
vbError
Error
11
vbBoolean
Boolean
12
vbVariant
Variant
13
vbDataObject Data Access Object
14
vbDecimal
Decimal
17
vbByte
Byte
8192
vbArray
Array
W listingu Okresltyp.asp pokazany jest przykład zastosowania funkcji
VarType oraz TypeName.
28
Listing http://localhost/aspwyklady/Okresltyp.asp
1. <%@ Language=VBScript %>
2. <% option explicit
3. Dim strName, iAge
4. %>
5. <HTML>
6. <BODY>
7. <%
8. Response.Write ("Przed przypisaniem wartosci,zmienna strName jest
typu ")
9. Response.Write (TypeName (strName))
10.Response.Write (", ktoremu odpowiada kod ")
11.Response.Write (VarType(strName))
12.%>
13.<BR>
14.<%
15.StrName = "Janek"
16.iAge = 21
17.Response.Write("Teraz zmienna strName jest typu ")
18.Response.Write (TypeName(strName))
19.Response.Write (" - ")
20.Response.Write(VarType(strName))
21.%>
22.<BR>
23.<%
24.Response.Write("Teraz zmienna iAge jest typu ")
25.Response.Write (TypeName(iAge))
26.Response.Write (" - ")
27.Response.Write(VarType(iAge))
28.%>
29.</BODY>
30.</HTML>
Rekomendacji dotyczące stylu tworzenia nazw zmiennych
W celu ułatwienia pisania programu oraz ułatwienia innym osobom jego
późniejszej analizy i wprowadzania ewentualnych poprawek, trzeba
realizować przy napisaniu programu następne wytyczenia:
1.Nazwa zmiennej musi zawierać zmysł opisowy.
2.Do nazw zmiennej trzeba dodawać prefiks, zawierający informację o jej
typie. Przykłady prefiksów są w następnej tabeli:
29
Typ zmiennej
Liczba całkowita (integer)
Liczba zmiennoprzecinkowa o pojedynczej precyzji (single)
Liczba zmiennoprzecinkowa o podwójnej precyzji (double)
Łańcuch znaków (string)
Data (Date)
Wartość logiczna (boolean)
Wartość walutowa (currency)
Obiekt (object)
Prefiks
i
sng
dbl
str
dt
bol
cur
obj
3. Nazwy stałych trzeba zapisywać dużymi literami, dzięki temu łatwiej
będzie odróżnić stałe od zmiennych.
4. Wszystkie zmienne trzeba deklarować na początku skryptu.
Operatory dostępne w VBScript
Operatory służą do manipulowania danymi – pozwalają na łączenia danych,
zmienianie ich oraz modyfikowanie.
Operator przypisania
Operator przypisania „=” kopiuje dowolną wartość podaną z jego prawej
strony, umieszczając ją w zmiennej podanej ze strony lewej.
Przykład.
<%
Dim iVar, strName, dtUrodziny
IVar = 3
strName = „Janek”
dtUrodziny = #03/06/1990#
%>
Umieszczenie daty pomiędzy znakami „#” zapewnia, że nie zostaną one
potraktowane jako wyrażenie, którego wartość trzeba obliczyć (obecność
znaków „/”).
Operatory matematyczne
Operatory matematyczne zgodnie z ich priorytetami są przedstawione w
następnej tablice:
Priorytet operacji
Najwyższy
Operator
()
^
Opis operatora
nawiasy
wykładniczy
30
Najniższy
*, /
\
%
+,&
=
<>
<
>
<=
>=
Not
And
Or
Xor
Eqv
Imp
negacja
mnożenie i dzielenie
dzielenie całkowite
reszta z dzielenia
dodawanie i odejmowanie
konkatenacja łańcuchów znaków
równy
różny
mniejszy
większy
mniejszy lub większy
większy lub równy
Struktury sterujące języka VBScript
Struktura sterująca to jest konstrukcja programową pozwalająca programowi
komputerowemu na podjecie decyzji w oparciu o podane informacje.
Logika warunkowa
Logika warunkowa sprawdza warunek lub grupę warunków i na podstawie
wyniku wybiera fragment kodu, który ma zostać wykonany.
Instrukcja If ... Then
Format:
If warunek Then
Blok kodu
End If
Warunek jest wyrażeniem logicznym (boolowskim) .Gdy warunek będzie
miał wartość True, zostaje wykonane polecenie wykonawcze
reprezentowane przez blok kodu, po czym program realizuje kolejne
polecenia podane po End If. Jeśli natomiast warunek będzie miał wartość
False, to blok kodu zostaje pominięty i program wykona polecenia
umieszczone za End If.
Instrukcja If ...Then ...Else
Format:
31
If warunek Then
Blok kodu 1
Else
Blok kodu 2
End If
W tym przypadku, jeśli warunek zostanie spełniony (będzie miał wartość
True), program wykona Blok kodu 1. W przeciwnym przypadku – jeśli
warunek nie zostanie spełniony – program wykona Blok kodu 2.
Instrukcja ElseIf
Ta instrukcja upraszcza zapisywanie zagnieżdżonych instrukcji
warunkowych. Instrukcję If o następującej postaci:
If warunek1 Then
Blok kodu 1
Else
If warunek2 Then
Blok kodu 2
Else
If warunek3 Then
Blok kodu 3
End If
End If
Blok kodu 4
End If
Można zapisać w poniższy sposób:
If warunek1 Then
Blok kodu 1
ElseIf warunek2 Then
Blok kodu 2
ElseIf warunek3 Then
Blok kodu 3
Else
Blok kodu 4
End If
Instrukcja ElseIf działa jak połączenie instrukcji Else oraz If. Przy używaniu
jej w programach trzeba pamiętać następne szczegóły:
 Instrukcji ElseIf nie można używać po instrukcji Else. Bez
problemów można zapisywać wiele instrukcji ElseIf jedna za drugą, a
na ich końcu umieścić instrukcję Else. Jednak po instrukcji Else nie
można już umieścić żadnej instrukcji ElseIf.
32
 Instrukcja ElseIf nie wymaga zapisywania dodatkowej instrukcji End
If. Trzeba jednak po niej umieścić instrukcję End If zamykającą If.
Instrukcje Select Case
Wiele zagnieżdżonych instrukcji If są trudne do analizy programu. Jeśli
trzeba porównywać wartość jednej zmiennej z wieloma różnymi
wartościami , trzeba używać instrukcję Select Case. Ta instrukcja pozwala
na określenie grupy bloków kodu, z których w zależności od wartości
wyrażenia numerycznego lub łańcuchowego jedna zostanie wykonana.
Format:
Select Case wyrażenie
Case wartość1
Kod1
Case wartość2
Kod2
…
Case wartośćN
KodN
Case Else
Kod0
End Select
Logika pętli
W logice pętli blok kodu wykonywany jest sekwencyjne, aż do momentu
spełnienia określonych warunków lub tak długo, aż określony warunek jest
spełniony.
Instrukcja Do While ...Loop
Format:
Do While warunek
Blok kodu
Loop
Przykład (listing vbscr_4.asp).
%@ Language = VBScript %>
<% Option Explicit %>
<%
Dim iVar
iVar = 1
%>
<html>
<BODY>
<%
Do While
iVar <=10
33
%>
Zmienna o iVar ma wartosc
<%
Response.Write(ivar)
%>
<BR>
<%
iVar = iVar + 1
Loop
%>
</BODY>
</html>
Instrukcja Do Until…Loop
Ta instrukcja jest bardzo podobna do poprzedniej instrukcji. Jedyna różnica
pomiędzy nimi polega na tym, iż kod umieszczony w instrukcji Do
Until…Loop jest wykonywany aż do chwili, gdy warunek uzyska wartość
True (a nie False).
Przykład (listing vbscr_5.asp).
<%@ Language = VBScript %>
<% Option Explicit %>
<%
Dim iVar
iVar = 1
%>
<html>
<BODY>
<%
Do Until iVar >10
%>
Zmienna o iVar ma wartosc
<%
Response.Write(ivar)
%>
<BR>
<%
iVar = iVar + 1
Loop
%>
</BODY>
</html>
Instrukcja While ...Wend
Ta instrukcja działa identyczne jak instrukcję Do While...Loop. W instrukcję
słowa kluczowe Do While zastępowane są słowem While, a słowo Loop –
zastępowane jest przez Wend.
34
Przykład (listing vbscr_6.asp).
<%@ Language = VBScript %>
<% Option Explicit %>
<%
Dim iVar
iVar = 1
%>
<html>
<BODY>
<%
While iVar =< 10
%>
Zmienna o iVar ma wartosc
<%
Response.Write(ivar)
%>
<BR>
<%
iVar = iVar + 1
Wend
%>
</BODY>
</html>
Instrukcja For ... Next
Ta instrukcja jest używana w tych sytuacjach, gdy przed rozpoczęciem pętli
wiadomo ile razy należy wykonać umieszczony w niej kod. Instrukcja
wykonuje umieszczony w niej kod określoną ilość razy, inkrementując
jednoczesne specjalną zmienną nazywaną licznikiem pętli.
Format:
For licznik_pętli =wartość_początkowa to wartość_końcowa Step krok
Blok kodu
Next
Licznik_pętli jest zmienną numeryczną określającą, ile razy zawartość pętli
została już wykonana. Na samym początku wykonywania pętli zmiennej
licznik_pętli przypisywana jest wartość_poszątkowa. Podczas kolejnego
wykonywania pętli zmienna ta będzie miała wartoś_początkowa + krok.
Zakładając, że wartość_poszątkowa jest większa od zera, pętla będzie
wykonywana aż do momentu, gdy wartość licznika_pętli stanie się większa
od wartości_końcowej. Po każdym wykonaniu pętli, zmienna licznik_pętli
jest powiększana o krok .
35
W przypadku prostych pętli, instrukcja For ... Next jest wygodniejsza od
instrukcji DoWhile...Loop, bowiem obsługuję inicjalizację i inkrementację
licznika pętli.
Wartość kroku może być liczbą ujemną. Także w takim przypadku liczba ta
jest dodawana do licznika_pętli, ale wykonanie pętli kończy się w
momencie,
gdy
wartość
licznika_pętli
będzie
mniejsza
od
wartości_końcowej.
Określanie wartości kroku jest opcjonalne. Jeśli zarówno słowo kluczowe
Step, jak i wartość kroku nie zostaną podane, to automatycznie przyjmuje
się, iż krok ma wartość 1.
Jeśli wartość_poszątkowa jest większa od wartości_końcowej, a krok jest
liczbą dodatnią, to blok kodu umieszczony wewnątrz pętli w ogóle nie
zostanie wykonany.
Dla nagłego przerwania pętli For...Next może posłużyć instrukcja Exit For.
Przykład (listing vbscr_7.asp).
<%@ Language = VBScript %>
<% Option Explicit %>
<%
Dim iSum, iCounter
iSum = 0
%>
<html>
<BODY>
<%
For iCounter =1 to 10
iSum = iSum + iCounter
%>
Zmienna o iSum ma wartosc
<%
Response.Write(iSum)
%>
<BR>
<%
Next
%>
</BODY>
</html>
Instrukcja For Each…Next
Instrukcja ta jest używana do wykonania podanego bloku kodu dla każdego
elementu wskazanego zbioru.
Jeśli w pętlach użyć instrukcję Exit (Exit Do lub Exit For), to spowoduje
ona zakończenie pętli.
36
Procedury i funkcji
Procedury i funkcje są strukturami, sterującymi logiką rozgałęziania:
procedury wykonują czynności , natomiast funkcje obliczają wartości.
Format procedury:
Sub nazwa(argument1,argument2,...argumentN)
blok kodu
End Sub
Żeby wywołać procedurę trzeba w potrzebnym miejscu programu, w
osobnej linii napisać:
Nazwa (wartość1,wartość2,...wartośćN)
Procedury nie zwracają żadnych wartości.
Funkcje zwracają wartości. Format funkcji:
Function nazwa(argument1,argument2,...argumentN)
blok kodu
End Function
Wywołania funkcji mogą być umieszczane w wyrażeniach. Jeśli trzeba
wywołać funkcję i unieważnić zwrócony przez nią wynik, to trzeba
poprzedzić nazwę funkcji słowem kluczowym Call:
Call nazwa_funkcji (argumenty)
Jeśli przy tworzeniu funkcję nie będziemy korzystać ze zwracanych przez
nią wartości, to zamiast funkcji trzeba lepiej stworzyć procedurę.
Przykład procedury (listing vbscr_8.asp).
<%@ Language = VBScript %>
<% Option Explicit %>
<html>
<BODY>
<%
Dim arrPrimeNos, arrNames
Sub subPrintArray (arrToPrint, istartValue, iStopValue)
Dim iCounter
For iCounter = istartValue to iStopValue
Response.Write (arrToPrint(iCounter))
Response.Write ("<BR>")
Next
End Sub
arrPrimeNos = Array (2,3,5,7,11,13,17,19)
arrNames = Array ("Janek","Maria","Franek","Zenek")
subPrintArray arrNames, 2,3
subPrintArray arrPrimeNos,0,4
subPrintArray arrNames, 1,3
%>
37
</BODY>
</html>
Przykład funkcji (listing vbscr_9.asp).
<%@ Language = VBScript %>
<% Option Explicit %>
<html>
<BODY>
<%
Function iFactorial (iNumber)
Dim iCounter
iFactorial=1
For iCounter=1 to iNumber
iFactorial=iFactorial * iCounter
Next
End Function
Response.Write ("4! = ")
Response.Write (iFactorial(4))
Response.Write ("<BR>")
Response.Write ("5! = ")
Response.Write (iFactorial(5))
Response.Write ("<BR>")
Response.Write ("6! = ")
Response.Write (iFactorial(6))
Response.Write ("<BR>")
Response.Write ("7! = ")
Response.Write (iFactorial(7))
Response.Write ("<BR>")
%>
</BODY>
</html>
Funkcje wbudowane
Funkcje wbudowane rozszerzają możliwości języka VBScript. Te funkcje
zawierają :
 rzutowania typów
 formatujące
 matematyczne
 obsługi dat
 obsługi łańcuchów znaków.
Funkcje rzutowania typów
Rzutowania typów zmienia typ danych. Przykłady:
38
 Cint (“33”) daje w wyniku wartość 33
 Cint (True) daje w wyniku wartość –1
 Cbyte (“45”) daje w wyniku wartość 45
 Csng (“0.000000556”) zwraca wartość 5.56E-07
 Cdate(“4-5-02”) zwraca datę 5.04.02
 Cdate(“April-6-02”) zwraca datę 6.04.02
Funkcje formatujące
Funkcje formatujące służą do nadania danym żądanej postaci. Wszystkie te
funkcje zwracają łańcuchy znaków.
FormatDateTime - używana jest do formatowania godzin i dat
FormatCurrency – Używana jest do formatowania danych walutowych
Funkcje matematyczne obliczają różne wyrazy matematyczne:
Abs(), Atn(), Cos(), Exp(), Fix(), Hex(),Int(), Log(), Rnd,
Round(),Sgn(),Sin(),Sqr(),Tan().
Funkcje obsługi dat służą dla określenia i manipulowania datami oraz
godzinami.
Przykłady:
 Date
 Time
 Now
 DateAdd (odstęp, liczba, data)
 DateDiff (...)
Funkcje obsługi łańcuchów znaków
Funkcje te pozwalają na pobieranie i zamianę części lub całej zawartości
jednego lub wielu grup łańcuchów.
Przykłady:
 Trim(łańcuch)
 Ucase(łańcuch)
 Len (łańcuch)
 Replace(...)
Wbudowane obiekty ASP
Obiekty ASP stosowane w programach, składają się z elementów, które je
opisują oraz z czynności, które można na nich wykonać. Elementy opisujące
obiekty są nazywane właściwościami, natomiast czynności, które można
wykonać na obiektach – metodami. ASP zawiera 6 wbudowanych obiektów:
 Response
 Request
 Application
39
 Session
 Server
 ObjectContext.
Obiekt Response jest stosowany do przesyłania danych ze skryptu ASP do
przeglądarki. Obiekt ten pozwala także na kontrolę sposobu przesyłania
danych oraz określanie momentu, kiedy to ma nastąpić, jak również na
przesyłanie cookies, służących do przechowywania informacji w
przeglądarce użytkownika.
Obiekt zawiera zawiera właściwości, metody i kolekcję.
Właściwości:
 Buffer
 Expires
Metody:
 Clear
 End
 Flush
 Redirect
 Write
Kolekcja:
 Cookies
Najczęstszym zastosowaniem obiektu Response jest przesyłanie danych do
przeglądarki użytkownika w celu wyświetlenia fragmentu strony WWW.
Można to zrobić na dwa sposoby. Pierwszym z nich jest wykorzystanie
metody Response.Write. Druga metoda polega na użyciu specjalnych
znaczników <%= … %>. Kod <%= wyrażenie %> ma dokładnie takie samo
działania, co wywołanie metody <% Response.Write (wyrażenie) %>.
Przykład
użycia
tego
sposobu
jest
pokazany
w
listingu
AKTCZAS_wr.ASP.
Listing AKTCZAS_wr.ASP
<%@ Language = VBSCRIPT %>
<html>
<body>
<p>Akyualna godzina to: <% = Time()%> </p>
</body>
</html>
Parametrem metody Write może być łańcuch znaków, zawierający
cudzysłów. Cudzysłów wewnątrz łańcucha znaków trzeba zamieniać na
symbol apostrofa lub dublować go dwukrotne. Na przykład, łańcuch znaków
zawiera tekst:
40
“Metoda “Response.Write” wyświetla tekst”.
Dla wyświetlania tego tekstu mogą być wykorzystane następne instrukcji:
1. Response.Write “Metoda ““Response.Write”” wyświetla tekst”
2. Response.Write “Metoda `Response.Write` wyświetla tekst”
Prócz samego przesyłania danych obiekt Response może kontrolować jak
oraz kiedy dane są przesyłane. Właściwość Buffer określa, czy dane
wyjściowe są gromadzone w buforze, czy też bezpośrednio przesyłane do
klienta. Jeśli są one gromadzone w buforze, to przesyłanie następuje po
wykonaniu całego skryptu. Przykład zadania trybu buforowania:
<% Response.Buffer =True %>
Istnieje także możliwość natychmiastowego przesłania danych – służy do
tego metoda Response.Flush. Ta metoda opróżnia bufor i przesyła jego
zawartość do przeglądarki. Przykład wykorzystania Flush:
…
<% Response.Buffer =True %>
…
<%
Response.Write (“Przed Flush”)
Response.Flush
%>
Metoda Response.Clear opróżnia się bufor bez przesyłania danych.
Metoda Response.End powoduje opróżnienie bufora i natychmiastowe
zakończenie działania skryptu.
Właściwość Response.Expires wyznacza, jak długo strona ma być
przechowywana w pamięci podręcznej.
Obiekt Request służy do pobierania danych przesyłanych na serwer przez
przeglądarkę użytkownika. Gdy przeglądarka zgłasza żądanie przesłania
wybranej strony, to wraz z żądaniem przesyła na serwer pewne informacje.
Informacje te zostają zapisane właśnie w obiekcie Request. Niektóre z tych
informacji mogą być przydatne dla żądanej strony, a niektóre nie. Obiekt
Request pozwala żądanej stronie na pobranie wszelkich informacji, których
strona ta potrzebuje – wartość cookies, danych przesłanych z formularza,
łańcucha zapytania, itd.
Łańcuch zapytania to dodatkowe informacje dołączane czasami do adresu
URL.
Łańcuch zapytania może być sformowany przez następne metody:
 Wykorzystania metody GET w formularze
 Wykorzystania znacznika <A>
41
 Podania pełnego adresu URL wraz z łańcuchem zapytania w
przeglądarce.
Pierwsza metoda polega na wykorzystaniu formularza, w którym atrybutowi
METHOD przypisana zostaje wartość GET.
Drugą metodą jest wykorzystanie atrybutu HREF znacznika <A>, służącego
do tworzenia połączeń pomiędzy stronami WWW. Wartości pól które są
przekazywane jako łańcuch zapytania muszą składać się z par nazwawartość oddzielonych od siebie znakiem „&”. Przykład tej metody :
<A HREF =
"Strona.asp?Name=Kowalski&Wiek=25&telefon=3333222">tekst
Trzecia metoda polega na podaniu pełnego adresu URL wraz z łańcuchem
zapytania w przeglądarce.
Wartości pól formularzy odczytywane są za pośrednictwem obiektu
Request. Obiekt ten posiada dwie kolekcje pozwalające na pobieranie
danych :
 QueryString – ta kolekcja służy do pobierania par nazwa-wartość
przekazanych w lańcuchu zapytania.
 Form – ta kolekcja służy do pobierania par nazwa-wartość przesłanych
na stronę ASP za pomocą metody POST.
Kolekcja to jest zbiór par nazwa-wartość (dwukolumnowa macierz).
Wszystkie dani, które są przekazywane do strony WWW, są rozmieszczone
w tych kolekcjach.
Format pobierania danych z kolekcji QueryString:
Request.QueryString("nazwa") lub prosto Request ("nazwa").
Format pobierania danych z kolekcji Form:
Request.Form("nazwa") .
Obiekt Application służy do współużytkowania danych przez większą ilość
użytkowników przeglądających tę samą grupę stron. W ASP terminem
„aplikacja” określana jest grupa stron .asp znajdujących się w jednym
katalogu oraz we wszystkich jego podkatalogach. Dla każdej aplikacji
tworzony jest tylko jeden egzemplarz obiektu Application. Obiekt ten jest
wspólnie używany przez wszystkich użytkowników korzystających z tej
samej aplikacji.
Obiekt Session dotyczy jednego użytkownika korzystającego z aplikacji w
czasie swojej aktywności. Sesja to jest termin aktywności jednego
użytkownika . Dla każdej sesji tworzony jest nowy egzemplarz obiektu
Session. Obiekt ten odgrywa bardzo ważną rolę przy śledzeniu
przemieszczania się użytkownika pomiędzy stronami, gdyż jego
właściwości zachowują swoją wartość przez cały czas trwania sesji. Pewne
42
strony mogą zapisywać wartości we właściwościach obiektu Session, a inne
strony mogą je pobierać.
Obiekt Server udostępnia kilka prostych metod i właściwości. Zapewne
najważniejszą z nich jest metoda CreateObject służąca do tworzenia nowych
egzemplarzy komponentów serwera. Komponenty są pakietami obiektów
powiązanych ze sobą tematyczne, które używają się na stronach aplikacji
internetowej. Komponenty ułatwiają wykonywanie najczęściej spotykanych
zadań i zwiększają możliwości tworzonych stron.
Obiekt ObjectContext służy do łączenia ASP z Microsoft Transaction
Serverem(MTS). MTS jest przeznaczony dla poprawienia efektywności
działania innych komponentów.
Wykorzystanie formularzy
Formularze służą dla zebrania
informacji od użytkownika oraz dla
przesyłania tej informacji do wyznaczonej strony ASP na serwerze w celu je
przetworzenia. Dzięki zastosowaniu formularzy, strona ASP może zażądać
otrzymania danych od użytkownika i wykorzystać te dane do podejmowania
decyzji.
Formularze są kodem HTML. Najprostsza postać formularza ma następny
wygląd:
<FORM METHOD = GET ACTION = „NazwaSkryptu.asp”>
</FORM>
Znacznik <FORM> posiada dwa atrybuty: METHOD oraz ACTION.
Atrybut METHOD wyznaczy sposób przesyłania danych do wyznaczonej
strony aplikacji. Atrybut ten może przybierać jedną z dwóch wartości: GET
lub POST. Pierwsza z nich (GET) powoduje przesłanie informacji w
postaci łańcucha zapytania , który jest dopisany do adresu URL strony
aplikacji.
Łańcuch zapytania może zawierać dowolną ilość par nazwa – wartość
zapisanych w następującej postaci:
NazwaZmiennej = wartośćZmiennej.
Od adresu URL łańcuch jest oddzielony znakiem „?”, na przykład:
http://www.serwer.com.pl./strona.asp?imie=Wojtek
Oddzielne zmienne w łańcuchu zapytania są oddzielone jeden od jednego
przez symbol „&”, na przykład:
http://www.serwer.com.pl./strona.asp?imie=Wojtek&dzial=techniczny
Druga wartość atrybutu METHOD – POST – nie wykorzystuje łańcucha
zapytania, przez co ukrywa przesyłane informacje.
Wadami wykorzystywania metody GET są następne:
43
 przesyłane informacje są widoczne na pasku adresu przeglądarki;
 niektóre starsze wersje przeglądarek nie są w stanie obsługiwać
adresów URL o długości przekraczającej 255 znaków.
Atrybut ACTION określa, jaka strona zostanie wywołana po wysłaniu
formularza. Ta strona zazwyczaj służy do przetwarzania danych
wprowadzonych przez użytkownika.
Przedstawiony wyżej formularz nie zawiera żadnych pól tekstowych, w
których użytkownik mógłby wpisać informacje oraz także ani list, ani
przycisków opcji, ani pól wyboru. Każde pole tekstowe, lista, przycisk opcji
oraz pole wyboru umieszczone w formularzu jest polem formularza.
Wszystkie te obiekty tworzone są przy wykorzystaniu znacznika <INPUT>.
Znacznik ten posiada kilka atrybutów , główne z nich są następne:
NAME – ten atrybut w unikatowy sposób identyfikuje każdy element
formularza.
TYPE – ten atrybut określa typ danego pola formularza. Dla pola
tekstowego trzeba przypisać temu atrybutu wartość TEXT, dla pola wyboru
trzeba użyć wartość CHECKBOX, dla uzyskania przycisku opcji - trzeba
przypisać temu atrybutu wartość RADIO.
VALUE – ten atrybut określa z kolei domyślną wartość danego pola
formularza.
Przykład listingu, który zawiera formularz jest w pliku REGISTER.ASP.
Listing REGISTER.ASP
1. <%@ LANGUAGE="VBSCRIPT" %>
2. <HTML>
3. <BODY>
4. Uzupelni ten formularz :
5. <P>
6. <FORM ACTION="/aspFormularzy/take_registration.asp"
method="get">
7. <TABLE >
8. <TR>
9. <TD>Identyfikator: </TD>
10.<TD><INPUT TYPE="TEXT" NAME="p_ident" SIZE=40
MAXLENGTH =25> </TD>
11. </TR>
12. <TR>
13. <TD>Haslo: </TD>
14. <TD><INPUT TYPE="password" NAME="p_pass"></TD>
15. </TR>
16. <TR>
44
17. <TD>Nazwisko: </TD>
18. <TD><INPUT NAME="p_nazw" ></TD>
19. </TR>
20. <TR>
21. <TD>Imie: </TD>
22. <TD><INPUT NAME="p_imie" ></TD>
23. </TR>
24. <TR>
25. <TD>Adresa: </TD>
26. <TD><INPUT NAME="p_adr"></TD>
27. </TR>
28. </TABLE>
29. <P> </P>
30. Masz Konto w banku?
31. <INPUT TYPE="radio" NAME="p_konto" VALUE="yes"
CHECKED>tak
32. <INPUT TYPE="radio" NAME="p_konto" VALUE="no">nie
33. <P> </P>
34. <TABLE >
35. <TR>
36. <TD ><INPUT TYPE="submit" VALUE="Submit Registration"
37. id=submit1 name=submit1></TD>
38. <TD ><INPUT TYPE="reset" VALUE="Start Over" id=reset1
39. name=reset1></TD>
40. </TR>
41. </TABLE>
42. <P></FORM></P>
43. </BODY>
44. </HTML>
W linii 6 jest określony znacznik <FORM> formularza oprócz tego w tej
linii są wyznaczone: w atrybutu METHOD - metod GET oraz w atrybutu
ACTION strona, która zostanie wywołana po wysłaniu formularza. W linii
7,28,34,41 w znacznikach <TABLE> oraz </TABLE> zostały definiowane
dwie tablicy, w których będą rozmieszczone pola formularza. W liniach
8,11,12,15,16,19,20,23,24,27,35,40 są definiowane wierszy tych tablic z
elementami formularza. W liniach 9,10,13,14,17,18,21,22,25,26,36,37,38,39
są definiowane kolumny odpowiadanych wierszy z elementami formularzy.
Za dopomogą znacznika INPUT w liniach 10,14,18,22,26,31,32,36,38 są
wyznaczone pola w których użytkownik może wpisać informację oraz
przyciski dla uruchomiania procesów wpisania na serwerze. W linii 10 jest
45
wyznaczone pole z typem TEXT, imię tego pola „p_ident”. Atrybut SIZE w
linii 10 określa szerokość pola - czyli ilość znaków, jaka będzie w nim w
danej chwili widoczna. Ten atrybut nie ogranicza ilości znaków, jakie
użytkownik może wpisać w polu. Ograniczyć tę ilość znaków można za
dopomogą atrybutu MAXLENGTH.
W linii 14 jest wyznaczone pole typu PASSWORD. W liniach 18,22,26 są
wyznaczone tekstowe pola. Nieobecność atrybutów TYPE w tych liniach
wyznacza typy tekstowe po domyśleniu. W liniach 31,32 jest wyznaczony
typ RADIO dla elementu danych formularza, który ma imię „p_konto”.
Element RADIO zawiera tu dwa komponenty: „yes” oraz „no”, które są
wyznaczone w liniach 31 oraz 32. Atrybut CHECKED w linii 31 wyznacza
wartość „yes” po domyśleniu. W liniach 36-39 są wyznaczone przyciski
SUBMIT oraz RESET. Przycisk SUBMIT przesyła dani pól formularza do
strony, która jest wyznaczona w atrybutu ACTION.
Przykład listingu strony, która otrzymuje dane z formularza jest w listingu
take_registration.asp.
Listing take_registration.asp
1. <%@ LANGUAGE="VBSCRIPT" %>
2. <% Option Explicit %>
3. <H1>Rezultaty otrzymane z formy:</H1>
4. <%
5. On Error Resume Next
6. Dim p_ident,p_pass,p_nazw,p_imie,p_adr,p_konto
7. p_ident = Request("p_ident")
8. p_pass = Request("p_pass")
9. p_nazw = Request("p_nazw")
10.
p_imie = Request("p_imie")
11. p_adr = Request("p_adr")
12. %>
13. <H2>Identyfikator:
14. <%
15. Response.Write (p_ident)
16. Response.Write ("<BR>")
17. %>
18. </H2>
19. <H2>HASLO:
20. <%
21. Response.Write (p_pass)
22. Response.Write ("<BR>")
46
23. %>
24. </H2>
25. <H2>Nazwisko:
26. <%
27. Response.Write (p_nazw)
28. Response.Write ("<BR>")
29. %>
30. </H2>
31. <H2>Imie:
32. <%
33. Response.Write (p_imie)
34. Response.Write ("<BR>")
35. %>
36. </H2>
37. <H2>Adresa:
38. <%
38. Response.Write (p_adr)
40. Response.Write ("<BR>")
41. %>
42. </H2>
43. <H2>
44. <%
45. IF Request("p_konto") = "yes"
then
46. Response.Write ("Klient ma konto w banku")
47. Else
48. Response.Write ("Klient ni ma konta")
49. End if
50. %>
51. </H2>
52. </BODY>
53. </HTML>
W linii 1 jest wyznaczony typ skryptu. Dyrektywa w linii 2 nie pozwoli
wykorzystać zmienni skryptu bez ich poprzedniego deklarowania. Instrukcja
w linii 3: „On Error Resume Next” – informuje interpreter języka VBScript,
że w przypadku natrafienia na błąd, należy pominąć linię i przejść do
następnej. W linii 6 są deklarowane zmienni skryptu. W liniach 7-11 za
dopomogą obiektu REQUEST czyta się informację pro wartości pól
formularza bezpośrednio w zmienni skryptu. W liniach 15 - 40 za dopomogą
obiektu RESPONSE pisze się otrzymana informacja z formularza do
47
przeglądarki użytkownika. W liniach 45-49 pisze się rezultat otrzymany od
elementu RADIO formularza.
W listingu select.asp jest pokazany przykład formularza , zawierającego
listę pól. Kod HTML definiujący listę został przedstawiony w liniach 11 –
16. Te linii są rozmieszczone wewnątrz znaczników <FORM> oraz
</FORM> w liniach 9 i 18. Rezultaty wyboru pola listy przesyła do strony z
adresem wyznaczonym w atrybutu ACTION w linii 9.
Listing select.asp
1. <%@ Language=VBScript %>
2. <HTML>
3. <HEAD>
4. <META NAME="GENERATOR" Content="Microsoft Visual Studio
6.0">
5. </HEAD>
6. <BODY>
7. Wyznacz kraj !
8. <P>
9. <FORM ACTION="/aspwyklady/select_registration.asp" method="get"
10. id=form1 name=form1>
11. <SELECT NAME = COUNTRY>
12. <OPTION VALUE = "POLSKA" > POLSKA
13. <OPTION VALUE = "UKRAINA" > UKRAINA
14. <OPTION VALUE = "DANIA" > DANIA
15. <OPTION VALUE = "Iran" > IRAN
16. </SELECT>
17. <INPUT TYPE="submit" VALUE="Submit Registration" >
18. </FORM>
19. </BODY
20. </HTML>
Kod skryptu odbierającego rezultaty formularza jest pokazany w listingu
Listing select_registration.asp:
<%@ Language=VBScript %>
<HTML>
<HEAD>
</HEAD>
<BODY>
<H1>Rezultaty otrzymane z formy:</H1>
<%
48
= Request("COUNTRY")
%>
</BODY>
</HTML>
Kolekcja ServerVariables obiektu Request
Kolekcja ta pozwala na odczytywanie zmiennych środowiskowych serwera
WWW.
Kiedy klient żąda od serwera przesłania strony WWW, to przesyła nie tylko
adres URL żądanego dokumentu, lecz także wiele dodatkowych informacji.
Informacje te mogą określać typ używanej przeglądarki, rodzaj systemu
operacyjnego na jakim działa oraz URL strony, która aktualnie jest
wyświetlona. Każdy dodatkowy element informacji nosi nazwę nagłówka
żądania. Kiedy serwer przesyła do przeglądarki kod strony, to wraz z nim
przysyłana jest także grupa nagłówków określanych jako nagłówki
odpowiedzi. Oba rodzaje tych nagłówków określane jako nagłówki HTTP.
Wszystkie nagłówki są przechowywane w kolekcji ServerVariables.
Przykład odczytania zawartości elementów tej kolekcji jest pokazany na
listingu Naglowki.asp.
Listing Naglowki.asp
1. <%@ Language = VBScript %>
2. <% Option Explicit %>
3. <html>
4. <body>
5. <p>Wyswietlanie wszystkich naglowkow od klienta (bez formatowania):
6. <br>
7. <%=Request.ServerVariables("ALL_RAW")%>
8. <br>
9. </p>
10.<pre>
11.Wyswietlanie rezultatow wszystkich naglowkow od klienta (z
formatowaniem) :
12.<%=Request.ServerVariables("ALL_RAW")%>
13.</pre>
14.<pre>
15.Wyswietlanie rezultatow wszystkich naglowkow do klienta :
16.<%=Request.ServerVariables("ALL_HTTP")%>
17.</pre>
18.</body>
49
19.</html>
Zmienna ALL_RAW w kolekcji ServerVariables zawiera wszystkie
nagłówki żądania. W liniach 7 oraz 12 jest wywołana wartość zmiennej
ALL_RAW. W pierwszemu wypadku (linia 7) rezultaty na stronie nie są
sformatowane, w drugim przypadku (linia 12) są wykorzystywane znaczki
<PRE>, </PRE> w liniach 10 i 13 dla formatowania rezultatów. Zmienna
ALL_HTTP w kolekcji ServerVariables zawiera wszystkie nagłówki
odpowiedzi. W linii 16 są wyświetlane te nagłówki. Dla wyświetlania
oddzielnego nagłówka trzeba sformować polecenie :
Request.ServerVariables("nazwa nagłówka").
Nazwy nagłówków są wyświetlane w listingu Naglowki.asp.
Nagłówki HTTP umożliwiają zdobycie informacji dotyczących klienta,
jednak nie mówią niczego, ani o serwerze WWW, ani o żądanej stronie
ASP. Na przykład, nie zawierają URL żądanej strony, je adres fizyczny. Ta
informacja może być odczytana w zmiennych środowiskowych serwera
WWW. Zmienne środowiskowe to informacje, które serwer WWW
udostępnia programom. Zmienne te zawierają takie informacje, jak: nazwa
serwera WWW, adres URL aktualnie przetwarzanej strony ASP, nazwę
używanego oprogramowania serwera WWW i in. Zmienne środowiskowe
pobiera się tak samo, jak nagłówki HTTP. Przykład wyświetlania
wszystkich elementów kolekcji ServerVariables jest pokazany w listingu
ServerVariables.asp.
Listing ServerVariables.asp.
1. <%@ Language = VBScript %>
2. <% Option Explicit %>
3. <html>
4. <body>
5. <%
6. Dim strName
7. For Each strName in Request.ServerVariables
8. Response.Write strName &": " &_
9. Request.ServerVariables(strName) &"<BR>"
10.Next
11.%>
12.</body>
13.</html>
50
Kod przedstawiony na tym listingu wyświetla wszystkie zmienne
środowiskowe oraz nagłówki HTTP zapisane w kolekcji ServerVariables.
Informacje te są zapisane w kolekcji, a zatem są wyświetlane przy użyciu
pętli For Each… Next (linii 7-10).
Wykoryzstanie cookies
Cookies są niewielkimi fragmentami informacji – łańcuchami znaków lub
wartościami numerycznymi – przechowywanymi na komputerze
użytkownika przez ściśle określony czas. Cookies są zapisywane oraz
odczytywane przy wykorzystaniu nagłówków HTTP. Cookies są
zapisywane na komputerze użytkownika przez kolekcje Response.Cookies,
natomiast kolekcja Request.Cookies odczytuje je. Cookies mogą zawierać
informacje dowolnego, prostego typu danych – czyli dowolne dane oprócz
tablic i obiektów. Wynika z tego, że w Cookies można zapisywać łańcuchy
znaków, liczby, daty, wartości walutowe oraz logiczne. Najbardziej często
Cookies stwarzają się w postaci „klucz – wartość”. Okres ważności Cookies
można określić podczas przez go właściwość Expires , np.:
Response.Cookies ("UserInformation").Expires = #December 1, 2002#
Jeśli ta wartość nie będę ustalona, to ważność Cookies uplyne, gdy
użytkownik zamknie przeglądarkę. Przykład zapisywania Cookies jest
pokazany w listingu WriteCookies.asp.
Listing WriteCookies.asp
1.
2.
3.
4.
5.
6.
7.
8.
<%@ Language = VBScript %>
<% Option Explicit %>
<%
Response.Cookies("UserInformation")("LastVisit") = Now
Response.Cookies("UserInformation")("Name") = "Volodymir"
Response.Cookies("UserInformation")("UserAgentString") =_
Request.ServerVariables("HTTP_USER_AGENT")
Response.Redirect "ListaCookies.asp"
9. %>
10.<html>
11.<body>
12.</body>
13.</html>
Kod przedstawiony na listingu tworzy Cookies o nazwie "UserInformation"
zawierające trzy klucze: LastVisit, Name, UserAgentString w liniach 4-7. W
51
linii 8 użytkownik jest kierowany na stronę ListaCookies.asp. Kod tej strony
zostal przedstawiony w listingu ListaCookies.asp. Cookies są częścią
nagłówka HTTP, dlatego instrukcje Response.Cookies muszą być zapisane
w przeglądarkę wcześniej do przesyłania pozostałego kodu tej strony. To
znaczy, kod zapisywania Cookies musi być rozmieszczony przed
znacznikami
<HTML>,</HTML>
oraz <BODY>,</BODY>. W
Przeciwnym przypadku PWS oraz IIS 4.0 sformują komunikaty pro błędy.
IIS 5.0 jednak już nie będzie formować tego komunikatu.
Listing ListaCookies.asp
1. <%@ Language = VBScript %>
2. <% Option Explicit %>
3. <html>
4.
5.
6.
7.
8.
<body>
<%
Dim strCookieName, strKeyName
For Each strCookieName in Request.Cookies
If Request.Cookies (strCookieName).HasKeys then
For Each strKeyName in Request.Cookies (strCookieName)
Response.Write strCookieName &"(" &_
strKeyName & ") = " &_
Request.Cookies(strCookieName) (strKeyName)
Response.Write "<BR>"
Next
9. Else
Response.Write strCookieName & " = " &_
Request.Cookies(strCookieName)
10.End If
11.Response.Write "<BR>"
12.Next
13.%>
14.</body>
15.</html>
W linii 8 określamy, czy aktualnie analizowane Cookies ma jakieś klucze,
czy nie. W tym celu używana jest właściwość HasKeys. Jeśli Cookies ma
klucze, to skrypt pobiera po kolei ich nazwy, posługuje przy tym pętla For
Each ...Next . Jeśli jednak Cookies nie ma żadnych kluczy, skrypt wyświetli
nazwę oraz wartość Cookies.
Główne zalety przechowywania informacji w Cookies:
52
 Informacja stosowne użytkownika jest przechowywana na
komputerze użytkownika.
 Informacja może być przechowywana na czas określony – dni,
tygodni, miesiące oraz lata.
 Zawartości stron użytkownika można formować w zależności od
treści Cookies.
Wady Cookies:
 Użytkownik może tak skonfigurować przeglądarkę, aby nie
akceptowała Cookies.
 W Cookies nie można zapisywać obiektów, tablic . W Cookies można
zapisywać jedynie łańcuchy znaków, daty oraz wartości liczbowe
różnych typów.
Przechowywanie informacji w obiektach Session oraz
Application
Cookies pozwalają przechowywać informację w bardzo prosty sposób, ale
jednak nie można ich wykorzystywać dla zachowania zmiennych i stałych
programu.
Podstawowym pojęciem technologii ASP jest sesja. Sesja poczyna się
zapytaniem oddzielnej strony aplikacji użytkownikiem przez przeglądarkę i
zakończy się kiedy użytkownik znów już nie ma związków z aplikacją. Czas
aktywności aplikacji z jakikolwiek użytkownikiem nazywa się sesją.
W czasie sesji wartości zmiennych każdej strony ASP są dostępne tylko
skryptu tej strony. Jednak istnieje potrzeba przechowywania wartości
zmiennych dla wspólnego wykorzystania skryptami różnych stron ASP.
ASP udostępnia dwa wbudowane obiekty: Session oraz Application.
Obiekt Session stworzy się w celu przechowywania stanu zmiennych i
obiektów dla każdego z użytkowników na czas ich aktywności w Internecie i
działa tylko podczas sesji. Obiekt Session może być wykorzystywany tylko
przez jednego użytkownika.
Przykład przechowywania tablicy w obiekcie Session jest pokazany w
listingu SessionWrite.asp
Listing SessionWrite.asp
1. <%@ Language = VBScript %>
2. <% Option Explicit %>
3. <html>
4. <body>
53
5. <%
6. Dim aSentence(4)
7. aSentence(0) = "Politechnika"
8. aSentence(1) = "Koszalinska"
9. aSentence(2) = "Widzial"
10.aSentence(3) = "Elektroniki"
11.aSentence(4) = "Ul Partyzantow 17"
12.Dim iLoop
13.For iLoop = LBound (aSentence) to UBound(aSentence)
14.
Response.Write aSentence(iLoop)
15.
Response.Write (" - ")
16.Next
17.Session ("Sentence") =aSentence
18.%>
19.</body>
20.</html>
W linii 6 jest stworzona tablica aSentence. Tablica ta zawiera pięć
elementów o indeksach od 0 do 4. W liniach 7-11 są określone wartości
poszczególnych elementów tablicy. W liniach 13 –16 są wyświetlane
zawartości elementów tablicy na stronie wynikowej. W linii 13 są określone
wartości licznika pętli, w tym celu są użyte funkcje Lbound oraz Ubound.
W linii 17 jest stworzona zmienna sesyjna o nazwie Sentence i zapisana w
niej tablicę aSentence.
Wartości zmiennych sesyjnych można odczytać z innej strony ASP.
Przykład tej strony jest pokazany w listingu SessionRead.asp.
Listing SessionRead.asp
1. <%@ Language = VBScript %>
2. <% Option Explicit %>
3. <html>
4. <body>
5. <%
6. Dim iLoop
7. If IsArray (Session("Sentence")) then
8.
For iLoop = LBound (Session("Sentence")) to _
9.
UBound(Session("Sentence"))
10.
Response.Write Session("Sentence")(iLoop)
11.
Response.Write ("<br>")
12.Next
54
13.Else
14.Response.Write "Brak danych!"
15.End if
16.%>
17.</body>
18.</html>
W linii 6 jest wyznaczona zmienna iLoop licznika pętli. Przed odczytaniem
wartości zmiennej sesyjnej Sentence sprawdzają się warunek iż zmienna o
tej nazwie istnieje (linia 7). Jeśli przed uruchomieniem tego skryptu
użytkownik nie odwiedził strony SessionWrite.asp, zmienna sesyjna
Sentence nie będzie istnieć. W tym przypadku będzie sformowany
komunikat w linii 14.
Obiekt Application może być stworzony przez pierwszego użytkownika,
który otworzył swoje sesję, i zostawać aktywnym w czasie pozostałych sesji
różnych użytkowników dopóki jest aktywną sama aplikacja.
Obiekt Application udostępnia mechanizm pozwalający na długotrwałe
przechowywanie informacji nie związanych z poszczególnymi
użytkownikami.
Obiekt Application to jest miejsce dla przechowywania globalnych
zmiennych. Ten obiekt zawiera zmienne oraz obiekty, które mogą być
wspólnie wykorzystywane różnymi użytkownikami. Obiekt Application
zawiera zasoby kolejnego dostępu dla różnych użytkowników.
W listingu ApplicationWrite.asp pokazany przykład zapisywania zmiennych
obiektu aplikacji.
Listing ApplicationWrite.asp
1. <%@ Language = VBScript %>
2. <% Option Explicit %>
3. <html>
4. <body>
5. <%
6. Dim aSentence(4)
7. aSentence(0) = "Politechnika"
8. aSentence(1) = "Koszalinska"
9. aSentence(2) = "Widzial"
10.aSentence(3) = "Elektroniki"
11.aSentence(4) = "Ul Partyzantow, 17"
12.Dim iLoop
13.Response.Write ("Zapisywanie zmiennych obiektu ""Application"": ")
14.Response.Write ("<BR>")
55
15.For iLoop = LBound (aSentence) to UBound(aSentence)
16.Response.Write aSentence(iLoop)
17.Response.Write (" - ")
18.Next
19.Application.lock
20.Application ("Sentence") =aSentence
21.Application.Unlock
22.%>
23.</body>
24.</html>
Technologia zapisywania danych potrzebuje poprzedniego blokowania
zmiennych od czytania lub zapisywania przez innych użytkowników.
Blokowanie i odblokowanie są realizowane w liniach 19 -21.
Przykład czytania zmiennych obiektu Application jest pokazany w listingu
ApplicationRead.asp.
Listing ApplicationRead.asp
1. <%@ Language = VBScript %>
2. <% Option Explicit %>
3. <html>
4. <body>
5. <%
6. Dim iLoop
7. Response.Write "Czytanie zmiennych obiektu ""Application"":"
8. Response.Write ("<BR>")
9. If IsArray (Application("Sentence")) then
10.For iLoop = LBound (Application("Sentence")) to _
11.
UBound(Application("Sentence"))
12.
Response.Write Application("Sentence")(iLoop)
13.
Response.Write ("<br>")
14.Next
15.Else
16.Response.Write "Brak danych!"
17.End if
18.%>
19.</body>
20.</html>
56
Obiekty Session oraz Application dysponują dwoma zdarzeniami :OnStart
oraz OnEnd. W przypadku obiektów Session zdarzenie OnStart generowane
jest, gdy użytkownik poczyna nową sesję, czyli wtedy, gdy tworzony jest,
przeznaczony dla niego, nowy egzemplarz obiektu Session. W procedurze
obsługi tego zdarzenia można stworzyć zmienne sesyjne oraz nadać im
początkowe wartości. Zdarzenie OnStart dla obiektu Application jest
generowane w momencie początku pierwszej sesji, czyli utworzenia
pierwszego egzemplarza obiektu Session.
Aby stworzyć i zainstalować zmienne sesyjne oraz aplikacyjne, trzeba
napisać procedury obsługi zdarzeń obiektów Session i Application. Te
procedury muszą być rozmieszczony w pliku specjalnym, mającym
nazwisko Global.asa. Ten plik musi być tylko jeden w aplikacji. Przykład
tego pliku jest pokazany w listingu global.asa.
Listing global.asa
1. <SCRIPT LANGUAGE=VBScript RUNAT=Server>
2. Sub Application_OnStart
3. '--Project Data Connection
4. Application("Connection1_ConnectionString") =
"Provider=MSDASQL.1;Persist Security Info=False;Data
Source=dokuments;Extended
Properties=""DSN=dokuments;DBQ=F:\asp\Databases\dokuments.mdb;
DriverId=281;FIL=MS
Access;MaxBufferSize=2048;PageTimeout=5;"";"
5. Application("Connection1_ConnectionTimeout") = 15
6. Application("Connection1_CommandTimeout") = 30
7. Application("Connection1_CursorLocation") = 3
8. Application("Connection1_RuntimeUserName") = ""
9. Application("Connection1_RuntimePassword") = ""
10.'-- Paths to directories and pages
11.Application("ftppub") = "ftp://had/doc/"
12.Application ("aspcall") ="/dok1/documentlist.asp?rid="
13.End Sub
14.</SCRIPT>
Plik global.asa nie zawiera znaczników <HTML>, <BODY> oraz innych
znaczników kodu HTML. Skrypt jest rozmieszczony w znacznikach
<script>, </script>. Atrybut LANGUAGE znacznika <script> określa język
programowania, atrybut RUNAT określa, że skrypt będzie wykonywany na
57
serwerze WWW. Procedura obsługi zdarzeń obiektu Application musi mieć
nazwisko Application_OnStart lub Application_OnEnd. Natomiast
procedura obsługi zdarzeń obiektu Session musi mieć nazwisko
Session_OnStart lub Session_OnEnd.
W liniach 2-13 jest wyznaczona procedura Application_OnStart. W linii 4
jest wyznaczona zmienna „Connection1_ConnectionString”, która wyznaczy
parametry podłączenia do bazy danych. W pozostałych zmiennych są
wyznaczone parametry czasowe, ścieżki dostępu do katalogów i plików.
Dostęp do plików i folderów
Tworzenie stron ASP potrzebuje możliwości zapisania informacji do plików
na serwerze i późniejszego ich odczytania. Ta możliwość jest realizowana
przez wykorzystanie specjalnego obiektu FileSystemObject udostępnionego
przez ASP. Obiekt FileSystemObject pozwala stworzyć inne obiekty dla
dostępu do katalogów i plików. Wszystkie te obiekty z ich metodami oraz
kolekcjami składają się „Obiektowy model FSO”. Do składu FSO mogą
wchodzić następnie obiekty:
 FileSystemObject – to jest bazowy obiekt FSO który jest niezbędny
dla dostępu do innych obiektów FSO. Metody obiektu
FileSystemObject często dublują metody innych obiektów. Takie
dublowanie pozwala projektować strony ASP bez wywalania wielu
obiektów FSO.
 Folder – ten obiekt realizuje dostęp do katalogów. Metody obiektu
Folder pozwalają stworzyć katalogi, usuwać katalogi, przemieszczać
ich w inne miejsca, otrzymać dani pro właściwości katalogów.
 File – ten obiekt realizuje dostęp do plików. Metody obiektu File
pozwalają stworzyć pliki, przemieszczać pliki, otrzymać dani pro
właściwości plików.
 TextStream – ten obiekt realizuje operacji czytania oraz zapisywania
do tekstowych plików.
 Drive – ten obiekt realizuje dostęp do informacji pro wszystkie dyski
serwera.
Do składu FSO mogą wchodzić następnie kolekcji:
Folders – ta kolekcja zawiera wszystkie katalogi w obiekcie Folder.
Files – ta kolekcja zawiera wszystkie pliki w wyznaczonym katalogu.
Drives – ta kolekcja zawiera listę wszystkich dysków serwera.
58
Wykorzystanie obiektu FileSystemObject
Obiekt FileSystemObject zawiera następne metody.
Metody obiektu FileSystemObject
Metoda
Opis
BuildPath (ścieżka,
nazwa)
CopyFile plikŻródłowy,
plikDocelowy, zastąpić
Dodaje nazwę pliku do ścieżki, gwarantując przy tym odpowiednie
wykorzystanie znaku separatora ścieżki
Kopiuje plikŻródłowy zapisująć go jako plikDocelowy. Jeśli
plikDocelowy już istnieje oraz jeśli argument zastąpić ma wartość
TRUE, to kopiowany plik zastąpi istniejący plik o tej samej nazwie.
Kopiuje katalogŻródłowy zapisująć go jako katalogDocelowy. Jeśli
CopyFolder
katalogŻródlowy,
katalogDocelowy już istnieje oraz jeśli argument zastąpić ma wartość
katalogDocelowy,
TRUE, to kopiowany katalog zastąpi istniejący katalog o tej samej
zastąpić
nazwie.
CreateFolder (nazwa)
Tworzy katalog o podanej nazwie
CreateTextFile (nazwa, Tworzy plik tekstowy i zwraca egzemplarz obiektu TextStream
zastąpić, unicode)
skojarzony z tym plikiem. Argument zastąpić jest opcjonalną wartością
logiczną określającą, czy należy zastąpić istniejącą już wersję pliku.
Domyślenie argument ten ma wartość FALSE. Argument unicode jest
opcjonalną wartością logiczną określającą, czy plik ma być zapisany w
kodzie Unicode (TRUE), czy w kodzie ASCII(FALSE)
DeleteFile (ścieżka,
Usuwa plik określony przy użyciu ścieżki. Na końcu ścieżki może być
wymuś)
znak wieloznaczny. Wymuś jest argumentem opcjonalnym, przypisując
mu wartość TRUE, wymuszamy usunięcie plików
DeleteFolder (ścieżka,
Usuwa katalog określony przy użyciu ścieżki. Na końcu ścieżki może
wymuś)
być znak wieloznaczny. Wymuś jest argumentem opcjonalnym,
przypisując mu wartość TRUE, wymuszamy usunięcie katalogu
DriveExists (ścieżka)
Zwraca wartość logiczną informującą, czy istnieje napęd określony
przez podaną ścieżkę
FileExists (ścieżka)
Zwraca wartość logiczną informującą, czy istnieje plik określony przez
podaną ścieżkę
FolderExists (ścieżka)
Zwraca wartość logiczną informującą, czy istnieje katalog określony
przez podaną ścieżkę
GetAbsolutePathName Zwraca pełną ścieżkę na podstawie podanej specyfikacji: Jeśli
(określenieŚcieżki)
argument będzie miał wartość „c:” , to zostanie zwrócona pełna ścieżka
dostępu do katalogu aktualnego na dysku C. Jeśli natomiast argument
będzie miał wartość „c:..”, to zostanie zwrócona ścieżka do katalogu
nadrzędnego względem aktualnego katalogu.
GetBaseName (ścieżka) Zwraca samą nazwę (bez rozszerzenia) pliku określonego za pomocą
podanej ścieżki.
GetDrive (ścieżka)
Zwraca egzemplarz obiektu Drive reprezentujący napęd, na którym
znajduje się plik określony za pomocą podanej ścieżki.
Zwraca łańcuch znaków zawierający nazwę napędu dla określonej
GetDriveName
(ścieżka)
ścieżki.
59
GetExtensionName
(ścieżka)
GetFile (ścieżka)
Zwraca rozszerzenie pliku określonego za pomocą podanej ścieżki.
Zwraca egzemplarz obiektu File reprezentujący plik określony przez
podaną ścieżkę.
GetFileName (ścieżka) Zwraca nazwę pliku lub katalogu. A zatem wywołanie GetFileName
(„c:\Inetpub\wwwroot\default.asp”) zwróci łańcuch znaków
„default.asp”.
GetFolder (ścieżka)
Zwraca egzemplarz obiektu Folder reprezentujący katalog określony
przez podaną ścieżkę.
Zwraca egzemplarz obiektu reprezentujący Folder nadrzędny w
ParentFolder
stosunku do podanego foldera.
Zwraca ścieżkę do określonego katalogu specjalnego. Argument
GetSpecjalFolder
(określenie)
określenie można określić za pomocą następujących stałych:
WindowsFolder, SystemFolder oraz TemporaryFolder. Stałym tym
odpowiadają wartości: 0,1 oraz 2.
MoveFile plikŻródlowy, Przenosi plikŻródlowy , zapisując go jako plikDocelowy.
plikDocelowy
Przenosi katalogŻródlowy, zapisując go jako katalogDocelowy
MoveFolder
katalogŻródlowy,
katalogDocelowy
OpenTextFile (nazwa, Zwraca egzemplarz obiektu TextStream skojarzony z plikiem o podanej
tryb, utworz, format)
nazwie. Argument tryb określa, czy plik powinien być otwarty w trybie
do odczytu(1), do zapisu (2), czy też w trybie do dopisywania (8).
Argument utworz określa, czy w razie gdyby plik nie istniał, to należy
go utworzyć. Jeśli argument format ma wartość -1, to zawartość pliku
będzie zapisywana w kodzie Unicode. Jeśli argument ten będzie miał
wartość 0, to zawartość pliku zostanie zapisywana w kodzie ASCII.
Wartość -2 tego argumentu oznacza, że zawartość pliku powinna być
zapisywana w kodzie określonym przez ustawienia systemowe.
Obiekt FileSystemObject zawiera kolekcję Drives, która zawiera
egzemplarze obiektów reprezentujących wszystkie napędy na serwerze.
Obiekt FileSystemObject posiada dwie metody pozwalające na
sprawdzenie, czy podany plik lub katalog istnieje na serwerze: FolderExists
oraz FileExists. Metoda FolderExists wymaga podania jednego argumentu
– nazwy katalogu oraz fizycznej ścieżki dostępu do niej. Jeśli podany
katalog istnieje, to metoda zwraca wartość True. W przeciwnym przypadku
zwracana jest wartość False. Przykład strony ASP, która sprawdzi się, czy
jest na dysku „C:\” katalog "C:\Inetpub\wwwroot\bookstore", jest pokazany
w listingu FolderExist1.asp:
1. <%@ Language=VBScript %>
2. <% option explicit %>
3. <HTML>
4. <BODY>
5. <%
60
6. Dim objFSO
7. Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
8. If objFSO.FolderExists ("C:\Inetpub\wwwroot\bookstore") Then
9.
Response.Write "Katalog 'bookstore' istnieje!"
10.Else
11.
Response.Write "Katalog 'bookstore' nie istnieje!"
12.End If
13.Set objFSO = Nothing
14.%>
15.</BODY>
16.</HTML>
W linii 6 jest deklarowana zmienna, w której będzie przechowywany
egzemplarz obiektu FileSystemObject. W linii 7 ten obiekt jest stworzony
za dopomogą metody CreateObiect wbudowanego obiektu Server. W linii 8
rozpoczyna się instrukcja IF...Then, w której warunku jest umieszczona
metoda FolderExists. Argument tej metody jest zadany przez zmienną typu
STRING: "C:\Inetpub\wwwroot\bookstore". Jeśli wywołanie metody
FolderExists zwróci wartość TRUE, to będzie w linii 9 informujący o tym,
iż katalog „bookstore” istnieje. W przeciwnym razie – jeśli wywołanie
metody zwróci wartość FALSE – to w linii 11 wyświetlany komunikat
informujący o tym, iż katalog „bookstore” nie istnieje. W linii 13 usuwa się
obiekt FileSystemObject.
Fizyczny dostęp do plików aplikacji można wyznaczyć za dopomogą
kolekcji Request.ServerVariables. Związki pomiędzy katalogiem
wirtualnym oraz katalogiem fizycznym można ustalić za dopomogą metody
Server.MapPath. Te dwa sposoby pozwalają nie wykorzystać ścieżki
fizyczne w kodzie programu i aplikacja zostanie niezależna od środowiska
komputerowego. Ścieżki fizyczne mogą być zapisane w zmienne aplikacji
do pliku global.asa.
Argumentem metody FolderExist może być rezultat zwracany przez metodę
MapPath. Metoda MapPath jest metodą obiektu Server oraz przekształca
ścieżkę wirtualną na fizyczną.
Przykład wykorzystania metody MapPath jest pokazany w listingu
Folderexist.asp:
1. <%@ Language=VBScript %>
2. <% option explicit %>
3. <HTML>
4. <BODY>
5. <%
6. Dim objFSO
61
7. Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
8. If objFSO.FolderExists (Server.MapPath ("folderdata")) Then
9.
Response.Write "Katalog folderdata istnieje!"
10.Else
11.
Response.Write "Katalog folderdata nie istnieje!"
12.End If
13.Set objFSO = Nothing
14.%>
15.</BODY>
16.</HTML>
W linii 8 jest wykorzystana metoda MapPath. Ta metoda szuka katalog
„folderdata” we wszystkich podkatalogach, dla których katalog z plikiem
„Folderexist.asp” jest macierzystym. Dla poszukiwania w katalogach
górnego poziomu trzeba wykorzystać skrót „..\nazwa_katalogu”. Przykład
takogo poszuku jest pokazany w listingu Folderexist2.asp:
1. <%@ Language=VBScript %>
2. <% option explicit %>
3. <HTML>
4. <BODY>
5. <%
6. Dim objFSO
7. Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
8. If objFSO.FolderExists (Server.MapPath ("..\bookstore")) Then
9.
Response.Write "Katalog bookstore istnieje!"
10.Else
11.
Response.Write "Katalog bookstore nie istnieje!"
12.End If
13.Set objFSO = Nothing
14.%>
15.</BODY>
16.</HTML>
W linii 8 jest zadane poszukiwanie katalogu "bookstore” we wszystkich
ścieżkach katalogu macierzystego.
Wykorzystanie obiektów File i Folder
Właściwości obiektu FILE
62
Właściwość
Opis
Attributes
Służy od pobierania oraz określania wartości poszczególnych
atrybutów pliku
Zwraca datę oraz godzinę utworzenia pliku
Zwraca datę oraz godzinę ostatniego dostępu do pliku
Zwraca datę oraz godzinę ostatniej modyfikacji pliku
Zwraca literę określającą napęd, na którym zapisany jest plik
Służy do pobrania lub określenia nazwy pliku
Zwraca egzemplarz obiektu reprezentujący folder nadrzędny w
stosunku do podanego pliku
Zwraca pełną ścieżkę dostępu do pliku, włącznie z jego nazwą
Zwraca nazwę, z której mogą korzystać programy nie obslugujące
długich nazw plików.
Zwraca ścieżkę dostępu do pliku, z której mogą korzystać programy
nie obslugujące długich nazw plików.
Zwraca wielkość pliku wyrażoną w bajtach
Zwraca dostępne informację na temat typu pliku („Text File)
DateCread
DateLastAccessed
DateLastModified
Drive
Name
ParentFolder
Path
ShortName
ShortPath
Size
Type
Metody obiektu FILE
Metody
Copy (docelowy,
zastąpić)
Opis
Kopiuje plik, zapisując go w miejscu określonym przez argument
docelowy. Jeśli plik o podanej nazwie istnieje oraz jeśli wartość
argumentu zastąpić wynosi TRUE, to istniejący plik jest
zastępowany plikiem kopiowanym
Usuwa plik. Jeśli argument wymuś ma wartość TRUE, to plik
zostanie usunięty nawet wtedy, gdy jest oznaczony tylko dla
odczytu.
Przenosi plik w miejsce określone przez argument docelowy.
Zwraca egzemplarz obiektu TextStream skojarzonego z danym
plikiem. Argument tryb określa, czy plik powinien być otwarty do
odczytu(1), do zapisu(2), czy też w trybie do dopisywania (8). Jeśli
argument format ma wartość -1, to zawartość pliku będzie
zapisywana w kodzie Unicode. Wartość -2 tego argumentu
oznacza, że zawartość pliku zostanie zapisana w kodzie
określonym przez ustawienia systemowe.
Delete (wymuś)
Move (docelowy)
OpenAsTextStream
(tryb, format)
Właściwości obiektu Folder
Właściwości
Opis
Służy od pobierania oraz określania wartości poszczególnych
atrybutów pliku
Zwraca datę oraz godzinę utworzenia katalogu
DateCread
DateLastAccessed Zwraca datę oraz godzinę ostatniego dostępu do katalogu
Attributes
63
DateLastModified Zwraca datę oraz godzinę ostatniej modyfikacji katalogu
Zwraca literę określającą napęd, na którym zapisany jest katalog
Drive
Zwraca kolekcje reprezentującą wszystkie pliki znajdujące się w
Files
danym katalogu. Dla każdego pliku katalogu kolekcja ta zawiera
odrębny egzemplarz obiektu File.
Zawiera TRUE jeśli aktualny katalog wchodzi do jakikolwiek
IsRootFolder
katalogu nadrzędnego
Zawiera egzemplarz obiektu Folder reprezentujący katalog
ParentFolder
nadrzędny względem aktualnego
Służy do pobrania lub określenia nazwy pliku
Name
Zwraca egzemplarz obiektu reprezentujący folder nadrzędny w
ParentFolder
stosunku do podanego pliku
Zwraca pełną ścieżkę dostępu do pliku, włącznie z jego nazwą
Path
Zwraca nazwę, z której mogą korzystać programy nie obsługujące
ShortName
długich nazw plików.
Zwraca ścieżkę dostępu do katalogu, z której mogą korzystać
ShortPath
programy nie obsługujące długich nazw plików.
Zwraca wielkość pliku wyrażoną w bajtach
Size
Zawiera kolekcję zawierającą obiekty Folder reprezentujące
Subfolders
wszystkie katalogi zapisane w aktualnym katalogu .
Zwraca dostępne informację na temat typu katalogu („ File Folder”,
Type
„Recycle Bin”)
Metody obiektu Folder
Metody
Copy (docelowy,
zastąpić)
CreateTextFile
(nazwa, zastąpić,
unicode)
Delete (wymuś)
Move (docelowy)
Opis
Kopiuje katalog, zapisując go w miejscu określonym przez argument
docelowy. Jeśli katalog o podanej nazwie istnieje oraz jeśli wartość
argumentu zastąpić wynosi TRUE, to istniejący katalog jest
zastępowany katalogiem kopiowanym
Tworzy plik tekstowy i zwraca egzemplarz obiektu TextStream
skojarzony z tym plikiem. Argument zastąpić jest opcjonalną wartością
logiczną określającą, czy należy zastąpić istniejącą już wersję pliku.
Domyślenie argument ten ma wartość FALSE. Argument unicode jest
opcjonalną wartością logiczną określającą, czy plik ma być zapisany w
kodzie Unicode (TRUE), czy w kodzie ASCII(FALSE)
Usuwa katalog. Jeśli argument wymuś ma wartość TRUE, to katalog
zostanie usunięty nawet wtedy, gdy jest oznaczony tylko dla odczytu.
Przenosi katalog w miejsce określone przez argument docelowy.
W listingu ReadKatalog.asp jest pokazany kod pozwalający wyświetlić na
stronie internetowej treść katalogów i plików dysku komputera, na którym
jest uruchomiony serwer WWW.
Listing ReadKatalog.ASP
64
1. <%@ Language=VBScript %>
2. <% option explicit %>
3. <HTML>
4. <BODY>
5. <%
6. Const DEFAULT_PATH = "c:\"
7. Dim objFSO,objSubfolder,objFolder,objFile
8. Dim strCurrentPath, strPath
9. strCurrentPath = Request.QueryString ("path")
10.If strCurrentPath ="" Then
11.
strCurrentPath = DEFAULT_PATH
12.End If
13.Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
14.Set objFolder = objFSO.GetFolder (strCurrentPath)
15.Response.Write "Zawartosc katalogu"
16.Response.Write objfolder.Path & "<p>"
17.If Not objFolder.IsRootFolder Then
18.
strPath = objFolder.ParentFolder.Path
19.
strPath = Server.URLEncode (strPath)
20.%>
21.<A HREF = "ReadKatalog.asp?path=<%=strPath%>">..</A><BR>
22.<%
23.End If
24.For Each objSubfolder in objFolder.Subfolders
25.
strPath = Server.URLEncode(objSubfolder.Path)
26.%>
27.<A HREF="ReadKatalog.asp?path=<% =strPath %>">
28.
<%= objSubfolder.Name %></A><BR>
29.<%
30.Next
31.Response.Write "<p>"
32.For Each objFile in objFolder.Files
33.
Response.Write objFile.Name
34.
Response.Write "<BR>"
35.Next
36.Set objFolder = Nothing
37.Set objFSO = Nothing
38.%>
39.</BODY>
40. </HTML>
65
W linii 6 jest stworzona stała, określającą katalog początkowy, od którego
trzeba zaczynać przeglądanie dysku. W liniach 7 i 8 są deklarowane
zmienne dla obiektów oraz łańcuchów znaków. W linii 9 jest pobierana
ścieżka, która mogła zostać przekazana do skryptu ReadKatalog.asp w
łańcuchu zapytania. Wartość ta będę używana do określenia nazwy
przeglądanego katalogu. Jeśli wartość zmiennej path nie została określona,
to będę używana wartość domyślna zapisana w stałej DEFAULT_PATH
(linie 10 -12). W następnej kolejności są stworzone egzemplarzy obiektów
FileSystemObject (linie 13) , Folder (linie 14). Przy pobieraniu katalogu
wykorzysta się wartość zmiennej strCurrentPath. W liniach 15-16 jest
wyświetlony nagłówek zawierający ścieżkę dostępu do aktualnego katalogu.
Dla oznaczenia katalogu nadrzędnego używany jest symbol dwóch
kropek:”..”. ten sam symbol wyświetlany jest przez kod umieszczony w
liniach 17 do 23. Jeśli użytkownik znajduje się aktualnie w głównym
katalogu, to symbol „..” nie powinien być wyświetlany. Stosowny warunek
umieszczony jest w instrukcji If...Then zapisanej w linii 17 skryptu. Jeśli
jednak użytkownik nie będzie wyświetlał zawartości katalogów głównego,
to symbol „..” powinien się pojawić – pozwoli on użytkownikowi na
wyświetlenie zawartości katalogu wyższego poziomu. Tworzone połączenie
wywołuje tę samą stronę, przekazując do niej nową ścieżkę. W przypadku
tego konkretnego połączenia będzie to ścieżka dostępu do katalogu
nadrzędnego względem katalogu aktualnego. Ścieżka ta jest najpierw
zapisywana w zmiennej strPath (linia 18), następne kodowana przy użyciu
metody URLEncoded (linia 19), i wreszcie umieszczana jako część
połączenia (linia 21). Metoda URLEncoded koduje podany łańcuch znaków
w taki sposób, aby można go było bez problemu przesłać za pośrednictwem
łańcucha zapytania (dla przykładu znaki „\” są znakami „/” w adresie URL).
W następnej kolejności są utworzone połączenia do każdego z podkatalogów
aktualnego katalogu. Do tego celu jest używana pętla For Each ...Next
pobierająca poszczególne elementy kolekcji Subfolders objektu katalogu
(linia 24). Obiekty odpowiadające poszczególnym podkatalogom są
kolejnozapisywane w zmiennej objSubfolder. W liniach 25, 27,28 jest
wyświetlane połączenie z aktualnie analizowanym podkatalogiem.
W ostatnie części skryptu jest wyświetlana listę plików przechowywanych w
aktualnym katalogu. W tym celu jest pobierana zawartość kolekcji Files.
Otwieranie plików
W plikach tekstowych można rejestrować oraz odczytywać pewne
informacje. Aby wykonać każdą z tych operacji, w pierwszej kolejności
trzeba otworzyć plik. Można to zrobić dwoma sposobami:
66
1. Za pomocą obiektu FileSystemObiect oraz go metod.
2. Przy stworzeniu obiektu TextStream (strumienia tekstowego).
Pierwszy sposób jest wywołanie metody OpenTextFile obiektu
FileSystemObiect . Te wywołanie ma następującą składnię:
obiektFSO.OpenTextFile (nazwaPliku, tryb, twórz, format)
Ostatnie trzy argumenty są opcjonalne. Dla użycia któregoś z nich, trzeba
podać także wszystkie te, które znajdują się przed nim.
NazwaPliku - to jest nazwa pliku, który trzeba otworzyć. Wartość tego
argumentu powinna być fizyczną ścieżką dostępu do pliku. Przy określaniu
tej ścieżki może być używana metoda Server.MapPath.
Argument tryb może przyjąć jedną z trzech wartości:
 ForReading – lub prosto wartość – (1)
 ForWriting – lub prosto wartość – (2)
 ForAppending – lub prosto wartość – (8)
Wartości te określają, czy trzeba odczytywać z pliku dane, pisać dane,
dodawać
dane.
Po
domyśleniu
jest
ustalona
wartość
ForReading(1).Wszystkie te konstanty muszą być definiowane w skryptu.
Jeśli pliku określonego przy użyciu argumentu nazwaPliku nie ma, to
istnieją dwie możliwości: stworzyć nowy pusty plik lub wygenerować
komunikat o błędzie. Argument twórz pozwoli wybrać tę możliwości. Jeśli
argument ma wartość TRUE, to tworzony jest nowy plik. W przeciwnym
przypadku (FALSE) – generowany jest komunikat o błędzie. Po domyśleniu
jest ustalona wartość TRUE.
Argument Format określa, czy zawartość pliku powinna być zapisywana w
kodzie ASCI, czy też w Unicode. Wartość 0 oznaczy, iż zawartość pliku ma
być zapisywana w kodzie ASCII. Wartość 1 oznaczy, iż zawartość pliku ma
być zapisywana w Unicode. Wartość 2 oznacza, iż należy użyć domyślnej
wartości systemowej.
Obiekt TextStream realizuje konsekwentny dostęp do plików. Metody tego
obiektu mogą pracować tylko z tekstowymi plikami. Dla dostępu do plików
binarnych trzeba stworzyć swój nowy obiekt COM z odpowiednimi
metodami. Właściwości oraz metody tego obiektu są pokazane w tablicach
niżej.
Właściwości obiektu TextStream
Właściwość
Opis
Jest równa „True”, kiedy wskaźnik
AtEndOfLine
67
AtEndOfStream
Column
Lines
Metody obiektu TextStream
Metoda
Close
Read (n)
ReadAll(strZmienna)
ReadLine
Skip(n)
SkipLine
Write(strZmienna)
WriteLine(strZmienna)
umieszczony jest w koncie linii pliku
Jest równa „True”, kiedy wskaźnik
umieszczony jest w koncie pliku
Jest równa pozycji wskaźnika w linii
Jest równa pozycji wskaźnika w pliku
Opis
Zamykanie pliku
Czytanie znaków z pliku
Czytanie całej zawartości pliku
Czytanie jednej linii pliku
Przeniesienie wskaźnika na „n”
znaków w pliku
Przeniesienie wskaźnika na jedną
linię w pliku
Zapisywanie łańcucha znaków do
pliku z pozycji wskaźnika
Zapisywanie linii
Obiekt TextStream może być stworzony za dopomogą następnych metod
obiektu FileSystemObject: OpenTextFile oraz OpenAsTextStream.
Fragment kodu otwierania pliku za dopomogą metody OpenTextFile
obiektu FSO pokazany niżej:
...
Dim objOpenFile,objFSO,strPath
strPath = Server.MapPath(„text.txt”)
Set objFSO = Server.CreateObject(“Scripting.FileSystemObject”)
SetobjOpenFile = objFSO.OpenTextFile(strPath,1)
…
Istnieje jeście inny sposób otwierania stworzenia obiektu TextStream. Ten
obiekt może być stworzony za dopomogą metody OpenAsTextStream
obiektu File. Metoda OpenAsTextStream wymaga podania dwóch
argumentów. Pierwszym z nich jest określenie trybu:
ForReading (1), ForWriting(2) lub ForAppending(8). Drugi argument
określa format otwieranego pliku i jest analogiczny poprzedniemu
przypadku. Fragment kodu dla tego sposobu może mieć następny wygląd:
...
68
Dim objOpenFile,objFSO,strPath
Const ForReading = 1
Set objFSO = Server.CreateObject(“Scripting.FileSystemObject”)
Set objFile = objFSO.GetFile(“Server.MapPath(“text.txt”))
Set objOpenFile = objFile.OpenAsTextStream(ForReading)
…
Stworzenie plików
Przykład stworzenia pliku jest pokazany w listingu CreateFile.asp.
Listing CreateFile.asp
1. <%@ Language=VBScript %>
2. <% option explicit %>
3. <HTML>
4. <BODY>
5. <%
6. Dim objFSO,objNewFile
7. Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
8. If objFSO.FileExists (Server.MapPath("Folderdata\Nowy.txt") )Then
9.
Response.Write "plik 'Nowy.txt' juz istnieje!"
10.Else
11.
Set objNewFile = objFso.CreateTextFile _
12.
(Server.MapPath("Folderdata\Nowy.txt"))
13.
Response.Write "plik 'Nowy.txt' jest stworzony!"
14.
objNewFile.Close
15.
Set objNewFile = Nothing
16.End If
17.Set objFSO = Nothing
18.%>
19.<br>
20.<br>
21.<br>
22.<br>
23.<A href="ReadZrodlo.asp?URL=<%
=Request.ServerVariables("URL")%>">
24.Wyswietli kod zrodlowy ASP tej strony</A>
25.</BODY>
26.</HTML>
69
Odczytywanie zawartości plików
Jeżeli plik jest otworzony, można odczytać go zawartość na stronę asp.
Dostęp do znaków i rekordów plików jest realizowany przez metody obiektu
strumienia tekstowego. Istnieje trzy metody tego obiektu:
 Read (ilość znaków)
 ReadLine
 ReadAll
Pierwsza metoda pozwala na odczytywanie określonej ilości znaków. Druga
metoda pozwala na odczytywania całą linię znaków. Trzecia metoda zwraca
łańcuch znaków, na który składa się cała zawartość pliku. Odczytywanie
całego pliku zabiera sporo pamięci, dlatego metody tej należy używać
wyłącznie stosowne małych plików.
Przykład odczytywania zawartości plików ASP pokazany niżej. Dla
uruchomienia tego pliku trzeba uruchomić stronę createfile.asp
Na tej stronę trzeba kliknięć do tekstu „Wyświetli kod źródłowy ASP tej
strony”, który odwoła do strony ReadZrodlo.asp.
Listing ReadZrodlo.asp:
1. <%@ Language=VBScript %>
2. <% option explicit %>
3. <HTML>
4. <BODY>
5. <%
6. Const ForReading = 1
7. Dim objFSO,objOpenFile,strPath,strText
8. strPath = Request.QueryString("URL")
9. strPath = Server.MapPath(strPath)
10.Set objFSO = _
11.
Server.CreateObject("Scripting.FileSystemObject")
12.Set objOpenFile = _
13.
objFso.OpenTextFile(strPath, ForReading)
14.Response.Write "<PRE>"
15.Do While Not objOpenFile.AtEndOfStream
16.
strText = objOpenFile.ReadLine
17.
Response.Write Server.HTMLEncode(strText)
18.
Response.Write "<BR>"
19.Loop
20.objOpenFile.Close
70
21.Set objOpenFile = Nothing
22.Set objFSO = Nothing
23.Response.Write "</PRE>"
24.%>
25.</BODY>
26.</HTML>
W linii 6 jest stworzona stałą ForReading. W następnej linii są deklarowane
zmienne. W linii 8 z łańcucha zapytania jest pobierany adres URL, który w
linii 9 jest przekształcony do postaci fizycznej ścieżki dostępu, używana do
tego jest metoda Server.MapPath. W liniach 10 – 13 jest stworzony
egzemplarz obiektu FileSystemObject oraz obiektu TextStream.
W liniach 14 i 23 są wyświetlanie parę znaczników <PRE> i </PRE>, która
gwarantuje poprawne wyświetlanie odstępów. Poprawne wyświetlanie kodu
HTML bez jego interpretacji jest uzyskane dzięki wykorzystaniu metody
Server.HTMLEncode w linii 17. W liniach 15 – 19 jest pętla dla czytania
informacji z pliku. Koniec pliku wyznaczy się przez wartość TRUE
właściwości AtEndOfStream obiektu TextStream (linia 15). Gdy jest
osiągnięty koniec pliku, realizacja pętli zostaje zakończona. Wtedy zamyka
się plik i są usuwane z pamięci wszystkie obiekty (linii 20-22).
Strona ASP, którą trzeba wyświetlić musi mieć następny kod dla połączenia
ze stroną ReadZrodlo.asp:
<A href="ReadZrodlo.asp?URL=<%
=Request.ServerVariables("URL")%>">
Wyswietli kod zrodlowy ASP tej strony</A>
Zapisywanie plików na serwerze
Do zapisywania łańcucha znaków w pliku służy metoda Write obiektu
TextStream. Poniżej przedstawiony jest sposób jej użycia:
ObjTextStream.Write („łancuchznaków”).
Metoda WriteLine zapisuje w pliku łańcuch znaków, dodając na jego końcu
znak nowej linii i powrotu karetki. Jeśli żaden argument nie zostanie
przekazany, to metoda dopisze do pliku znak nowej linii I powrotu karetki.
Przykład wykorzystania sposobów zapisywania danych pokazany w listingu
Write1.asp.
Listing write1.asp
<%@ Language = VBScript %>
4. <% Option Explicit %>
71
5. <html>
6. <body>
7. <%
8. Const ForWriting = 2
9. Dim objOpenFile, objFSO,strPath
10.strPath = Server.MapPath ("folderdata\test.txt")
11.Set objFSO =_
12.Server.CreateObject ("Scripting.FileSystemObject")
13.If Not objFSO.FileExists (strPath) Then
14.Set objOpenFile = objFSO.CreateTextFile(strPath,false)
15.objOpenFile.Close
16.%>
17.<p><br>
18.<%Response.write ("Plik 'folderdata\test.txt' jest stworzony!") %><br>
19.<%
20.End if
21.Set objOpenFile =objFSO.OpenTextFile(strPath, ForWriting)
22.objOpenFile.Write("abcde")
23.objOpenFile.Write("fgh")
24.objOpenFile.Write("ijklm")
25.objOpenFile.WriteLine ("1234567890")
26.objOpenFile.Write("nopq")
27.objOpenFile.WriteLine
28.objOpenFile.Write("rstuv")
29.objOpenFile.Close
30.Set objOpenFile = Nothing
31.%><br>
32.<%Response.write ("Plik jest zapisany!")%><br>
33.</p>
34.</body>
35.</html>
72
Dostęp do baz danych
Standard ODBC (Open Database Connectivity)
Różne DBMS mogą realizować różne formaty zapisu danych. Interfejsy
bezpośredniego dostępu do tych DBMS, stworzone przez różnych
producentów, też mogą się różnić. Wykorzystanie każdego z tych
interfejsów jest związane z koniecznością znajomości specjalnych narzędzi
programistycznych określanych jako API (Application Programming
Interface) służących do obsługi konkretnej bazy. API każdej bazy może
zawierać różne funkcje oraz obiekty. Wskutek tego konsekwentności
zapytań do różnych baz danych, różnych serwerów baz danych mogą też się
różnić. To znaczy, np., że dla bazy danych w środowisku „ORACLE” trzeba
konstruować inne konsekwentności funkcji i obiektów połączenia i zapytań
SQL niż dla tej samej bazy w środowisku „INFORMIX”.
W celu usunięcia tej wady firma MICROSOFT w 1992r opracowała
standard ODBC (Open Database Connectivity). Technologia ODBC
wprowadza jedyny interfejs API dostępu do różnych typów baz danych.
Język SQL jest wykorzystywany jako główny uniwersalny dialekt
wszystkich baz danych. Standard ODBC pozwala realizować technologię
„Klient – Serwer”, która realizuje główne operacji przetwarzania danych na
serwerze, a klient tylko otrzymuje rezultaty.
Bazy danych potrafiące korzystać z ODBC nazywają się bazami zgodnymi z
ODBC.
Architektura ODBC jest pokazana na rys. 9.
Aplikacje nie są połączone z konkretnym interfejsem (API) jakikolwiek
DBMS, a realizują jedyny standard zapytań do menedżera ODBC –
sterowników (ODBC-drivers). Menedżer ODBC podłącza potrzebny ODBC
– sterownik, który jest stworzony przez producenta konkretnej DBMS. Dla
podłączenia ODBC – sterownika trzeba stworzyć profile ODBC w trybie
(Source ODBC…) panelu sterowania systemu operacyjnego.
Teraz istnieją ponad 50 typów ODBC – sterowników dla różnych DBMS.
Standard ODBS pozwala realizować zapytania SQL bezpośrednio z
programów użytkownika. W tym celu można wykorzystywać dynamiczny
SQL.
Główne wady technologii dostępu do baz danych przez ODBC:
 Aplikacje są przystosowane do platformy MS Windows
 Wzrasta czas obróbki zapytań dzięki dodatkowej warstwie programów.
73
 Jest potrzebna uprzednia instalacja ODBC – sterownika, profile ODBC
dla każdej stacji. Parametry tej instalacji jest statyczne i użytkownik nie
może ich zmienić.
 Konieczność stosowania wielu odwołań do procedur niskiego poziomu .
Application 1
Application 2
...
Application N
The manager of
drivers ODBC
Driver
ODBC
ACCESS
Source of data
ODBC
ACCESS
Driver
ODBC
SYBASE
Source of data
ODBC
SYBASE
...
Driver
ODBC
ORACLE
Source of data
ODBC
ORACLE
...
Fig. 9
74
Uniwersalna strategia dostępu OLE DB
Technologia ODBC firmy Microsoft zaopatrzy ogólny interfejs dostępu do
baz danych, które są kompatybilne przez SQL. Każda baza danych mająca
interfejs ODBC zawiera sterownik (driver) , który realizuje bezpośrednio ten
interfejs. Interfejs zawiera bibliotekę funkcji specjalnych napisanych w
języku C++ . Zastosowanie tej biblioteki może być wadą przy realizacji
dostępu aplikacji stworzonych w innym środowisku języków
oprogramowania. Żeby usuwać te wady różne producenci stwarzają
specjalne komponenty obiektowe dostępu do baz danych.
Obiektowy model DAO (Data Access Objects) jest pierwszy uniwersalny
interfejs API, zawierający instrukcji dostępu do danych na wysokiem
poziomu. DAO zawiera obiekty baz danych (component DataBase), obiekty
tabel(component TableDef), obiekty definicji kwerend (komponent
QueryDef), obiekty rezultatów zapytań do bazy danych (komponent
RecordSet) oraz inne obiekty. Model DAO jest przeznaczony przede
wszystkim dla dostępu do baz danych Access. Ten model nie odpowiada
wszystkim standardom oraz specyfikacjom SQL . Ten model teraz jest
zamieniony nowym modelem RDO (Remote Data Obiekt). Technologia
RDO jest przeznaczona przede wszystkim do tworzenia programów
korzystających z baz danych i działających w architekturze rozproszonej.
RDO wchodzi do Visual Basica, Visual FoxPro oraz do Microsoft SQL
Servera. Technologia RDO została z kolei zastąpiona przez technologię
ADO (ActiveX Data Objekts). Wszystkie te rozwiązania mają jednak swoje
wady.
Firma Microsoft zaproponowała zbiór obiektów OLE DB( Object Linking
and Embedding for DataBase), który pozwalają aplikacjom wykorzystać
oraz sterować danymi w bazach danych przez swoje obiekty. Technologia
OLE DB gwarantuje dostęp do jakikolwiek baz danych włącznie nie
relacyjne modeli danych. Oprócz tego przez OLE DB można udostępnić
do plikowych oraz pocztowych systemów, tablic EXEL, graficznych plików,
innych obiektów stworzonych w różnych aplikacjach. Technologia OLE
DB jest obiektowo - orientowana specyfikacja na podstawie C++ API. W
pewnym stopniu OLEDB zastępuje ODBC. OLEDB zawiera odpowiednie
sterowniki, dzięki czemu jest w pełni zgodny ze wszystkimi źródłami
danych ODBC.
Technologia ADO (Active Data Obiects) to jest rozwiązanie technologii
ASP dostępu do baz danych, które jest realizowane we WWW serwerze IIS
(Internet Information Server) firmy Microsoft. Technologia ADO zawiera
wszystkie lepsze cechy technologii RDO oraz DAO i musi zamienić te
ostanie technologii. Technologia ADO zawiera następne funkcje:
75
 Stworzenia niezależnych obiektów baz danych
 Wsparcie zapamiętanych procedur baz danych
 Stworzenia kursorów dostępu do danych
 Wsparcie mechanizmów transakcji.
Głównymi zaletami technologii ADO są nie komplikowane wykorzystanie,
ASP page
ActiveX Data Objects (ADO)
OLEDB
ODBC
Manager
Sybase
Access
Oracle 8i
MS SQL
Server
Other
source of
DataBase
INFORMIX
Fig.10
prędkość, małe obciągi RAM oraz dysku.
Na Rys.10 jest przedstawiony schemat współpracy
różnymi technologii dostępu do danych.
technologii ASP z
76
Dostęp do baz danych przy użyciu ADO
ADO (ActiveX Data Objects) dostarczane jest wraz z ASP i daje
projektantom możliwość podłączania się do baz danych. ADO współpracuje
ze wszystkimi źródłami danych OLEDB, czyli także ze źródłami zgodnymi
z ODBC. A zatem ADO jest w stanie współpracować niemal ze wszystkimi
wykorzystywanymi aktualnie bazami danych.
Na rys.11 jest przedstawiony diagram prezentujący wzajemne relacje
występujące pomiędzy poszczególnymi obiektami modelu obiektowego
ADO. ADO zawiera 6 głównych klasy obiektów:
 CONNECTION
 COMMAND
 PARAMETERS
 RECORDSET
 FIELDS
 ERRORS.
Model ADO może tworzyć kolekcje nowych obiektów: PARAMETRS,
FIELDS, ERRORS.
Otwieranie oraz zamykanie połączenia z bazą danych(Obiekt
CONNECTION)
Obiekt CONNECTION połączy związek pomiędzy skryptem strony ASP
oraz źródłem danych. Utworzenia takiego połączenia zawsze jest pierwszym
etapem obsługi bazy. Ten obiekt pozwala także uruchomić instrukcje SQL.
Dla zachowywania rezultatów instrukcji trzeba stworzyć obiekt klasy
RECORDSET. Klasa CONNECTION zawiera następne metody:
 Open( ) , Close( ) – połączenie lub wyłączenia ze źródłem danych
 Execute( ) – uruchomienie instrukcji dla wyznaczonego połączenia. Ta
metoda może być wykorzystana dla uruchomienia zapamiętanych
procedur, które nie mają parametrów. Procedury z parametrami mogą być
uruchomiane przez metody obiektu Command.
 BeginTrans( ), CommitTrans( ) oraz RollbackTrans( ) – sterowanie
transakcjami dla danego połączenia.
77
Connect
Open(), Close()
Execute( )
BeginTrans()
CommitTrans( )
RollbackTrans ( )
Errors
Error
Command
Execute ( )
CreateParametr
()
Parameters
Recordset
BOF
EOF
RecordCount
MoveFirst ( )
MoveLast ( )
MoveNext ()
MovePrevious ()
Move()
AddNew ()
UpDate ()
Delete ()
Open()
Close()
Append ( )
Delete ( )
Item ()
Refresh ()
Parameter
Fields
Fig 11
Field
78
Obiekt CONNECTION przechowuje informację o źródle danych, z którym
trzeba połączyć się. Obiekt ten trzeba stworzyć tak, jak wszelkie inne
komponenty – przy użyciu metody Server.CreateObject:
Dim objConn
Set objConn = Server.CreateObject(“ADODB.Connection”)
Skrót „ADODB” oznaczy bazę wszystkich obiektów ADO. ”Connection” –
to jest komponent tej bazy.
Mogą się zdarzyć takie sytuację , gdy jednocześnie trzeba otworzyć kilka
połączeń z różnymi źródłami danych. W takich wypadkach będą
potrzebować kilku egzemplarzy obiektu CONNECTION.
Do bazy danych można połączyć się dwoma sposobami: przez DSN oraz bez
pomocy DSN (Data Source Name).
DSN systemu to jest plik zawierający informację o bazach danych (rodzaj
bazy , jej położenie oraz inną informację). DSN jest niezbędny dla ODBC
sterownika. DSN stwarzają się przez tryb „Źródła danych ODBC” systemu
operacyjnego. Obiekt CONNECTION musi być poinformowany, którego
DSN ma użyć. To może być realizowane np. w taki sposób:
ObjConn.ConnectionString = ”DSN = NazwaZrodla.dsn”
Dla połączenia bez pomocy DSN trzeba stworzyć łańcuch znaków
nazywany łańcuchem połączenia. Łańcuch połączenia musi zawierać
właściwości bazy danych, sterownika ODBC oraz położenia bazy.
Stworzenie egzemplarzy obiektu CONNECTION i podanie informację
dotyczące bazy danych jeszcze nie może otworzyć samego połączenia. Aby
to zrobić , trzeba wykorzystać się metodą OPEN() obiektu CONNECTION:
<%
Dim objConn
Set objConn = Server.CreateObject(“ADODB.Connection”)
ObjConn.ConnectionString = ”DSN = NazwaZrodla.dsn”
ObjConn.Open
%>
lub w taki sposób:
<%
Dim objConn
Set objConn = Server.CreateObject(“ADODB.Connection”)
ObjConn.Open(”NazwaZrodla”)
%>
Jeśli baza danych wymaga podania nazwy użytkownika oraz hasła dostępu,
to informację te można podać w wywołaniu metody OPEN():
ObjConn.Open strLancuchPolaczenia, strUzytkownik, strHaslo
79
Egzemplarz obiektu CONNECTION, podobne jak każdy inny egzemplarz
jakiegokolwiek obiektu używanego w skryptach ASP, należy usunąć z
pamięci, gdy nie będzie już potrzebny. Najpierw należy zamknąć
połączenie, a dopiero potem usunąć egzemplarz obiektu CONNECTION z
pamięci:
ObjConn.Close
Set objConn = Nothing
Przed zamknięciem połączenia i usunięciem z pamięci egzemplarza obiektu
CONNECTION należy zamknąć i usunąć z pamięci wszystkie egzemplarze
obiektów RECORDSET skojarzone z tym połączeniem.
Przykład wykorzystania obiektu CONNECTION jest pokazany w listingu
DBConnectProperties.ASP
Listing DBConnectProperties.ASP
<%@ Language=VBScript %>
<% option explicit %>
<!--The references to ADO objects and constants-->
<!--#INCLUDE virtual = "adovbs.inc" -->
<html>
<body>
<%
Dim objConn, objProp
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.open("samochody")
for each objProp in objConn.Properties
Response.Write objProp.Name &": "& objProp.Value & "<BR>"
next
Response.Write "<BR>"&"ConnectionString: "&
objConn.connectionString & "<BR>"
objConn.Close
set objConn = nothing
%>
</body>
</html>
Kolekcja ERRORS jest stworzona dla zachowywania informacji pro
jakikolwiek błędy. Obiekt ERROR reprezentuje błąd wygenerowany przez
źródło danych. Kolekcja ERRORS jest używana w sytuacji, gdy jedno
wywołanie metody może wygenerować większą ilość błędów.
80
Obiekt RECORDSET
Obiekt RECORDSET („Set” po angielsku „zbior”) pozwala na operowania
danymi przechowywanymi w tabeli lub z różnych tabel bazy danych przez
polecenie SQL. Obiekt ten zawiera zbiór rekordów pobranych z jednej tabeli
lub z wielu tabel. Pozwala on na odczytywanie danych przechowanych w
tabelach, modyfikowanie ich oraz gromadzenie informacji, jakie mają być
dodane do bazy. Aktualne analizowany rekord oraz jego położenie
względem pozostałych rekordów zbioru określane przez kursor bazy
danych. Kursor to jest postać obiektu RECORDSET zawierający rezultat
polecenia do bazy danych. Rezultat polecenia SQL zawiera treść i wartości
rekordów tabel relacyjnej bazy danych. Kursor bazy danych przechowuje
informacje o aktualnym położeniu w zbiorze rekordów pobranych w tabeli
bazy. Przy stworzeniu obiektu RECORDSET wskaźnik rekordu bieżącego
kursora odwzorowuje pierwszy rekord zbioru, a atrybuty BOF oraz EOF
otrzymają wartości FALSE. Kiedy zbiór jest pusty atrybut RecordCount
otrzyma wartość 0 (zero), lecz BOF oraz EOF – wartości TRUE. Klasa
RECORDSET zawiera następne metody:
 MoveFirst(), MoveLast(), MoveNext(), MovePrevious() , Move() –
przesuwają wskaźnik rekordu bieżącego. Metoda MoveFirst() pozwala
na przeniesienie wskaźnika na pierwszy rekord zbioru. Obiektami
RECORDSET są kursory, które mogą być sterowanymi tylko w jednym
kierunku lub w dwóch kierunkach zbioru rekordów. W przypadku
jednokierunkowego kursora można przechodzić jedynie do następnego
rekordu zbioru, nie istnieje możliwości cofania się do poprzedniego
wiersza lub przeskakiwania o kilka rekordów do przodu lub do tylu
zbioru. Wykorzystanie metody
MoveFirst() w przypadku
jednokierunkowego kursora powoduje wywołanie metody Open(). W
przypadku jednokierunkowego kursora może być wykorzystywana tylko
metoda MoveNext(), która powoduje przesunięcie wskaźnika do
następnego rekordu zbioru. Dla wyznaczenia końca lub początku
rekordów trzeba wykorzystać właściwości BOF oraz EOF obiektu
RECORDSET. Właściwość BOF będzie miała wartość TRUE, jeśli
aktualnie wskaźnik położenia kursora znajduje się na pierwszym
rekordzie zbioru. Właściwość EOF będzie miała wartość TRUE, jeśli
aktualnie wskaźnik położenia kursora znajduje się na ostatnim rekordzie
zbioru. Metoda MoveLast() powoduje przesunięcie wskaźnika na ostatni
rekord zbioru. Metoda Move(liczba) powoduje przesunięcie wskaźnika o
81
podaną ilość rekordów względem jego aktualnego położenia. Metoda
MovePrevious() pozwala na przesunięcie wskaźnika na poprzedni
rekord. Ta metoda nie może być wykorzystywana razem z kursorem
jednokierunkowym.
 AddNew(), Update() oraz Delete() – dodawanie nowych rekordów,
aktualizacja oraz usuwanie istniejących rekordów, które jest związane z
obiektem REKORDSET.
 Open(), oraz Close() – uruchomienie (Zamknięcie ) kursora, który
reprezentuje rezultaty instrukcji, która jest poprzednio stworzona przez
obiekt COMMAND. Metoda Open() odsyła na już stworzony obiekt
CONNECT.
Każdy obiekt RECORDSET zawiera kolekcję FILDS, która są zbiorem
obiektów klasy FIELD. Kolekcja FILD reprezentuje jedną wierzę tabeli
danych. Każdy obiekt FIELD w tej kolekcję reprezentuje jedną kolumnę
tabeli danych. Na każdy obiekt FIELD w kolekcji FIELDS można odwalać
przez nazwę lub liczbę numeryczną. Kolekcja FIELDS jest domyślną
właściwością obiektu RECORDSET. Dla odwołań do elementów tej
kolekcji mogą wykorzystywać równoznaczne się następne kody:
1. ObjRecordset (nazwaKolumny)
2. ObjRecordset (nazwaKolumny).Value
3. ObjRecordset.Fields(nazwaKolumny)
4. ObjRecordset.Fields(nazwaKolumny).Value
W pierwszym wierszu jest odwołania do kolekcji FIELDS w sposób
niejawny, jak i do właściwości VALUE kolekcji FIELDS. W wierszu 2 w
niejawny sposób jest odwołania do kolekcji FIELDS, a w sposób jawny do
właściwości VALUE tej kolekcji. W wierszu 3 jest umieszczone jawne
odwołanie do kolekcji FIELDS oraz niejawne odwołanie do właściwości
VALUE. W wierszu 4 umieszczone zostało jawne odwołanie zarówno do
kolekcji FIELDS, jak i do właściwości VALUE.
Obiekt FIELDS może zawierać właściwości które są pokazane w następnej
tablice:
Właściwość
Opis
VALUE
To jest wartość pola tabeli
NAME
To jest nazwa kolumny tabeli
TYPE
To jest typ danej przechowywanej w
komórce
PRECISION
Ilość cyfr, jaką można zapisać w
danej numerycznej
NUMERICSCALE
Ilość cyfr przed przecinkiem
82
dziesiętnym, jaką można zapisać w
danej numerycznej
DEFINEDSIZE
Maksymalna wielkość danej, jaką
można zapisać w komórce, wyrażoną
w bajtach
ACTUALSIZE
Faktyczna wielkość danej zapisanej
w komórce wyrażoną w bajtach
Na rysunku 12 jest przedstawiona reprezentację graficzną obiektu
RECORDSET uwzględniającą właściwości każdego z elementów kolekcji
FIELDS.
Recordset Object
Collections Fields
Field object
Field object
...
Field object
Field object
Field object
NAME
VALUE
TYPE
PRECISION
NUMERICSCALE
DEFINEDSIZE
ACTUALSIZE
fig.12
83
Rekordy tabeli zapisywane są w obiekcie RECORDSET dopiero w wyniku
wykonania metody OPEN(). Wywołanie metody OPEN() obiektu
RECORDSET ma następującą postać:
Set ObjRecordSet = Server.CreateObject(“ADODB.RecordSet”)
ObjRecordset.Open
CommandText,
Connection/ConnectionString,
CursorType, LockType, Options
Argument CommandText ( źródło) - to jest łańcuch znaków (kod SQL),
zawierający polecenie, które baza danych może wykonać. Argumentem
może być także egzemplarz obiektu COMMAND.
Argument Connection (połączenie) jest egzemplarzem obiektu
CONNECTION lub łańcuchem znaków zawierającym informacje dotyczące
połączenia. W przypadku użycia łańcucha znaków, będzie on musiał
zawierać wszystkie informacje konieczne do zestawienia połączenia, które
normalnie są podane we właściwości ConnectionString obiektu
CONNECTION.
Argument CursorType (typKursora) określa, w jaki sposób można poruszać
się po zbiorze rekordów. Ten argument może mieć następne wartości:
 adOpenForwardOnly
 adOpenStatic
 adOpenKeyset
 adOpenDynamic
Ten argument można także bezpośrednio wyznaczyć konstantami. Wartości
tych konstant następne:
Const adOpenForwardOnly
=0
Const adOpenKeyset
=1
Const adOpenDynamic
=2
Const adOpenStatic
= 3.
Przy stworzeniu obiektu RECORDSET można wykorzystać dwa typy
kursorów: jednokierunkowy lub dwukierunkowy. Podczas wywołania
metody Open() obiektu RECORDSET domyślnie tworzony jest kursor
jednokierunkowy (nazwa stałej ADO jest adOpenForwardOnly). Kursor
tego typu jest najbardziej efektywny, jednak oferuje się ograniczone
możliwości poszukiwania po zbiorze rekordów. Pozwala on na zmianę
aktualnego rekordu tylko w jeden sposób – poprzez przejście do następnego
rekordu. Przejście do kolejnych rekordów realizują się metodą MoveNext().
Kursor tego typu nazywają się kursorem „typu węża strażackiego”, gdyż,
podobnie jak woda w wężu strażackim może poruszyć się tylko w jednym
kierunku.
Dwukierunkowe kursory zawierają następne typy:
84
 Statyczny - nazwa stałej ADO jest adOpenStatic. Wyniki wykonania
zapytania są przechowywane w tabeli tymczasowej, której wierszy nie są
modyfikowane w momencie, gdy kursor był otwarty. To znaczy, że
wszystkie zmiany przez innych użytkowników bazy danych w
momencie, gdy kursor był otwarty, będą widoczne tylko po dodatkowym
uruchomianiu obiektu RECORDSET.
 Zbiór kluczy - nazwa stałej ADO jest adOpenKeyset. Kursory tego typu
zapisują w tymczasowej bazie danych klucze wszystkich wierszy
zwróconych w wyniku wykonania polecenia. Dzięki przechowywaniu
jedynie kluczy, są wykonane wszystkie modyfikację rekordów przez
innych użytkowników bazy danych w momencie, gdy kursor jest
otwarty, będą widoczne. Kiedy inny użytkownik usunie jakikolwiek
rekord mający klucz w kursorze „Zbiór kluczy”, ten rekord nie będzie
widoczny. Ten typ kursora nie pozwoli odwzorowywać nowe wierszy,
które są zapisane przez innych użytkowników w momencie, gdy kursor
był otwarty.
 Dynamiczny - nazwa stałej ADO jest adOpenDinamic. W przypadku
użycia kursora dynamicznego za każdym razem, gdy zażądamy nowego
rekordu, polecenie określające zawartość zwracanych wyników jest
ponownie wykonywane. Oznacza to, że wszelkie modyfikacje
wprowadzane w tabeli bazy danych będą widoczne, a co więcej, dodanie
nowego rekordu może mieć wpływ na zawartość wynikowego zbioru
rekordów. Ten kursor potrzebuje dużo resursów RAM.
Argument LockType (blokowanie) określa, czy będzie zapisywanie danych
w tabeli, a jeśli tak, to w jaki sposób. Określenie właściwości LockType jest
konieczne, gdyż w tej samej chwili z bazy danych może korzystać większa
ilość osób. W tym wypadku może być sytuacja, gdy dwie lub więcej osoby
będą próbowały jednocześnie zmienić zawartość tego samego rekordu. Dla
usuwania konfliktów trzeba zablokować rekord, żeby nikt inny nie mógłby
go zmodyfikować, aż do momentu, gdy rekord zostanie odblokowany. Są
dopuszczalne następne wartości argumentu LockType:
 adLockReadOnly
 adLockPessimistic
 adLockOptimistic
 adLockBatchOptimistic
Argument LockType może być bezpośrednio zadany przez konstanty.
Wartości tych konstant następne:
85
Const adLockReadOnly = 1
Const adLockPessimistic = 2
Const adLockOptimistic = 3
Const adLockBatchOptimistic = 4
Domyślne argument LockType ma wartość odpowiadającą stałej ADO
adLockReadOnly, to znaczy, że można jedynie odczytywać informacje
pobrane z bazy danych – nie można ich modyfikować, ani dodawać. Przy
tym argumencie niema blokowania rekordów bazy danych.
Pesymistyczne blokowanie. Wartość adLockPessimistic oznaczy się, że
rekordy są blokowane w momencie rozpoczynania edycji do momentu
zamknięcia obiektu RECORDSET. Blokowane rekordy są niedostępne dla
innych użytkowników. Ma to na celu uniknięcie sytuacji, w której wartości
pól rekordu zmieniają się w czasie pomiędzy rozpoczęciem wpisywania
wartości, a wywołaniem metody UPDATE. Trzeba unikać tego blokowania
we WWW aplikacjach z dużej ilości użytkowników.
Optymistyczne blokowanie. Wartość adLockOptimistic oznaczy się, że
rekordy są blokowane wyłącznie w czasie wykonywania metody UPDATE.
Istnieje prawdopodobieństwo że kilka użytkowników będą modyfikować
ten samy rekord. W tym przypadku będzie plątanina.
Optymistyczne grupowe blokowanie. Wartość
adLockBatchOptimistic
jest potrzebna przy jednoczesnym modyfikowaniu wielu rekordów. Te
blokowanie jest analogiczne optymistycznemu, ale działa w trybie
grupowych modyfikacji UPDATE, kiedy jest niezbędna jednoczesna
modyfikacja w wielu różnych tabeli lub różnych bazach danych. Oddzielnie
modyfikacje przy tym blokowaniu są zatrzymane oraz realizują się razem ze
wszystkimi innymi.
Oprócz możliwości określenia typu kursora, można określić także miejsce,
gdzie ten kursor ma być umieszczony. Internet działa według modelu klient
– serwer, a zatem kursor musi się znajdować , bądź to na serwerze, bądź po
stronie klienta. Aby kursor był umieszczony po stronie klienta, właściwości
CursorLocation obiektu RECORDSET trzeba przypisać wartość
adUseClient. Jeśli właściwości CursorLocation przypisać wartość
adUseServer lub w ogóle nie określić ją, to kursor będzie przechowywany
na serwerze ( co jest jego domyślnym położeniem). Właściwość
CursorLocation może być zadana także bezpośrednio konstantami:
Const adUseServer = 2
Const adUseClient = 3
Kursor, który jest stworzony na serwerze chroni wszystkie swoi dane na
serwerze. Przy dużym obciągu informacji kursor przesyła informację do
klienta małymi porcjami . Zaletą tego sposobu rozmieszczenia kursora jest
86
możliwość początku przesyłania informacji do klienta do ostatecznego
otrzymania wszystkiej informacji kursorem od bazy danych. Wadą jest
niemożliwość stworzenia więcej jednego kursora w aplikacji WWW przez
ograniczenia ADO.
Kursor, który jest stworzony na kliencie będzie powolnie inicjalizować się .
Natomiast mogą być stworzone wiele kursorów.
Argument Option (typ Polecenia) określa sposób przetworzenia argumentu
CommandText ( źródło). W przypadku kiedy „źródło” jest łańcuchem
znaków dla polecenia SQL do bazy danych, argument Option musi mieć
wartość adCmdText. W przypadku kiedy „źródło” jest nazwą tabeli bazy
danych argument Option musi mieć wartość adCmdTable.
Użycie pliku adovbs.inc
Podczas omawiania obiektu Recordset mogą być użyte zamiast wartości
stałych ich deklarowane nazwiska. Tym stałym odpowiadają się konkretnie
wartości, np.:
Const adUseServer = 2
Const adUseClient = 3
Definicji nazw tych stałych nie są wbudowane w ASP. Aby z nich
skorzystać trzeba dołączyć do stworzonych stron pliku adovbs.inc, który
zawiera definicje wszystkich stałych ADO. Plik ten jest dostarczany wraz z
IIS oraz PWS i domyślnie znajduje się w katalogu:
C:\Program Files\Common Files\System\ado\.
Aby z niego korzystać, trzeba skopiować go do głównego katalogu serwera
WWW i dołączać do stron za pomocą dyrektywy include o postaci:
<!--#INCLUDE virtual = "adovbs.inc" -->
Ten plik może być podłączony także za pomocą następnej linii:
<! -- #INCLUDE FILE= „dysk:\ ścieżka \adovbs.inc” -- > .
Program Visual InterDev automatyczne stworzy się w pliku global.asa
odwołanie do definiowania stałych w znaczniku <!--METADATA…-- > .
Wykorzystanie metody EXECUTE obiektu CONNECTION
Istnieją następne sposoby dostępu do baz danych za pomocą ADO:
1. Nie jawne stworzenie obiektu RECORDSET przez metodę Execute
obiektu CONNECT .
2. Jawne stworzenie obiektów CONNECT i RECORDSET.
3. Dostęp za pomocą obiektu COMMAND.
87
Wszystkie te sposoby potrzebują odwołania do stworzonego już obiektu
CONNECT.
Przy nie jawnym sposobie stworzenia obiektu RECORDSET kursor bazy
danych stworzy się nie przez metodę Server.CreateObject, lecz przez
metodę Execute obiektu CONNECT. Metoda Execute może wrócić się
obiekt RECORDSET z kursorem tylko dla „czytania
naprzód”
(adOpenForwardOnly). To jest najszybszy kursor obiektu RECORDSET.
Przykład tego sposobu dostępu do bazy danych jest pokazany w listingu
ConnExecute.asp. W tym przykładzie stworzy się strona z rezultatami
dwóch poleceń do bazy danych „samochody”. Pierwsze polecenie to jest
średnia pensja pracowników firmy. Drugie polecenie to jest lista
pracowników firmy, pensja których jest większa od średniej pensji na firmie.
Listing ConnExecute.asp
1. <%@ Language=VBScript %>
2. <% option explicit %>
3. <!--The references to ADO objects and constants-->
4. <!--#INCLUDE virtual = "adovbs.inc" -->
5. <html>
6. <body>
7. <%
8. Dim objConn, objRS,strConnectionString,strSQL, str2SQL
9. strSQL = "SELECT P.IMIE, P.NAZWISKO, P.PENSJA,
P.STANOWISKO "
10.strSQL = strSQL + "FROM PRACOWNICY P "
11.strSQL = strSQL + "WHERE P.PENSJA > (SELECT
AVG(P.PENSJA) "
12.strSQL = strSQL + "FROM PRACOWNICY P);"
13.str2SQL = "SELECT AVG(PENSJA) FROM PRACOWNICY;"
14.strConnectionString = "Provider=MSDASQL.1 Data Source =
samochody; "
15.strConnectionString = strConnectionString +"Extended Properties
=""DSN=samochody"""
16.Set objConn = Server.CreateObject("ADODB.Connection")
17.objConn.ConnectionString = strConnectionString
18.objConn.Mode = adModeRead
19.objConn.CursorLocation = adUseClient
88
20.objConn.open
21.'Metoda execute wruci się obiekt RS tylko typu
adOpenForwardOnly!
22.Set objRS = objConn.execute(str2SQL,,adCmdText)
23.%>
24.<b>Śrenia pensja na firmie
=<%=objRS("AVG(PENSJA)")%></b>
25.<br>
26.<b>Pracownicy pensja których jest wiele od średniej
pensji:</b>
27.<table align='left' border='1'>
28. <tr>
29.
<td>IMIE</td>
30.
<td>NAZWISKO</td>
31.
<td>PENSJA</td>
32.
<td>STANOWISKO</td>
33. </tr>
34.<%
35.Set objRS = objConn.execute(strSQL,,adCmdText)
36.while not objRS.EOF
37.
Response.Write "<tr>"
38.
Response.Write "<td>" & objRS("IMIE")&"</td>"
39.
Response.Write "<td>" & objRS("NAZWISKO")&"</td>"
40.
Response.Write "<td>" & objRS("PENSJA")&"</td>"
41.
Response.Write "<td>" & objRS("STANOWISKO")&"</td>"
42.
Response.Write "</tr>"
43.
objRS.MoveNext
44.wend
45.Response.Write "</table>"
46.objRS.Close
47.set objRS = nothing
48.objConn.Close
49.set objConn = nothing
50.%>
51.</body>
52.</html>
W linii 8 są definiowane zmienne. W liniach 9-12 jest wyznaczona znakowa
zmienna z kodem SQL dla otrzymania listy pracowników firmy, których
pensja jest większa od średniej pensji na firmie. Ten kod SQL zawiera
zanurzone polecenie SELECT. W linii 13 jest wyznaczona znakowa
89
zmienna dla otrzymania średniej pensji na firmie. W liniach 14,15 jest
wyznaczony łańcuch znaków dla połączenia z bazą danych „ Samochody”.
W linii 16 jest stworzony obiekt CONNECTION. W linii 17 jest ustalona
właściwość ConnectionString obiektu CONNECTION. W linii 18 jest
ustalona właściwość Mode obiektu CONNECTION. Ta właściwość ma
wartość adModeRead ( tzn. tylko dla czytania). Ta linia nie jest potrzebna
(jest zbyteczna), ponieważ metoda EXECUTE może stworzyć obiekt
RECORDSET tylko w tym trybie. Linia 19 wyznaczy się miejsce kursora po
stronie klienta. W linii 20 jest uruchomiany obiekt CONNECTION. W linii
22 jest wywołana metoda Execute obiektu CONNECTION. Ta metoda
stworzy obiekt RECORDSET, zawierający wartość średniej pensji w firmie.
Drugi parametr tej metody Ececute jest opcjonalny, tzn. zawiera zmienną,
która będzie miała ilość rekordów obiektu RECORDSET. Kursor tego typu
(adOpenForwardOnly) nie wróci się ilość rekordów, dlatego drugi
parametr jest zbyteczny. Trzeci parametr ma wartość adCmdText, tzn.
polecenie SQL do bazy danych. Dla połączenia z tabelą trzeba było zapisać
trzeci parametr jako adCmdTable. W linii 24 jest wyświetlana wartość
średniej pensji w firmie na stronie WWW. W liniach 26 -33 jest definiowana
tabela oraz nagłówek dla pozostałych rezultatów. W linii 35 jest stworzony
nowy obiekt RECORDSET z tym samym obiektem objConn dla
wyświetlania rezultatów pro pracowników firmy. W liniach 36 – 44 jest
pętla dla wyświetlania rezultatów na stronę WWW. W liniach 46-49 są
usuwanie obiektów.
Sterowanie transakcjami
Obiekt CONNECTION może być wykorzystywany w następnych celach:
 Dla otworzenia oraz zamknięcia seansów połączenia z bazami
danych. Na ten obiekt połączenia będą odwołać się inne obiekty ADO
(RECORDSET lub COMMAND);
 Dla realizacji poleceń do bazy danych przez swoje metodę Execute.
Ta metoda stworzy obiekty RECORDSET z kursorem tylko dla
„czytania naprzód”(adOpenForwardOnly);
 Sterowania transakcjami.
Sterowanie transakcjami może być realizowane się za dopomogą metod
BeginTrans, CommitTrans, RollbackTrans obiektu CONNECTION.
Przykład wykorzystania metod obiektu CONNECTION dla sterowania
transakcjami jest pokazany w listingu Conntrans.asp. Ten skrypt zawiera
kod dla wstawiania danych pro nowego pracownika wypożyczalni
samochodów. Dla tego wstawiania musi być realizowana transakcja z
90
dwóch operacji: pierwsza powinna zapisać dani pro nowe miejsce do tabeli
„Miejsca”, druga – dani pro nowego pracownika do tabeli „Pracownicy”. W
przypadku błędów przy realizacji jakikolwiek operacji transakcja musi być
wycofana.
Listing conntrans.asp
1.
2.
3.
4.
5.
<%@ Language=VBScript %>
<% option explicit %>
<!--The references to ADO objects and constants-->
<!--#INCLUDE virtual = "adovbs.inc" -->
<html>
6.
7.
8.
9.
<body>
<%
On Error Resume Next
Dim objConn, str1SQL, str2SQL
10.str1SQL = "INSERT INTO PRACOWNICY "
11.str1SQL = str1SQL + "VALUES ('0020', 'OLIVER', 'KAHN', "
12.str1SQL = str1SQL + "'2002-11-06', 'TECHNICZNY', 'MECHANIK',
"
13.str1SQL = str1SQL + "1300, 200, '000011', '357-357-357'); "
14.str2SQL = "INSERT INTO MIEJSCA "
15.str2SQL = str2SQL + "VALUES ('000011', 'PARTYZANTOW', '17',
'KOSZALIN', "
16.str2SQL = str2SQL + "'75-411', '343-32-11', NULL);"
17.Set objConn = Server.CreateObject("ADODB.Connection")
18.objConn.Mode = adModeReadWrite
19.objConn.open("samochody")
20.objConn.BeginTrans
21.objConn.Execute str2SQL,,adCmdText
22.objConn.Execute str1SQL,,adCmdText
23.If objConn.Errors.Count = 0 Then
24.
objConn.CommitTrans
25.
Response.write "<b> Recordy są wpisane do bazy
danych !<B>"
26.Else
91
27.
28.
objConn.RollbackTrans
Response.write "<b> !!! Recordy nie zostali wpisane do bazy
danych !!!<B>"
29.End if
30.%>
31.</body>
32.</html>
Linia 8 zawiera kod instrukcji, pozwalającej skryptu samodzielne
analizować błędy w linii 23 bez komunikatów systemy. W linii 9
definiowane zmienny. W liniach 10-13 jest definiowane polecenie SQL dla
wpisania danych pro pracownika do tabeli „Pracownicy”. W liniach 14 -16
jest definiowane polecenie SQL dla wpisania danych pro nowe miejsce
pracownika do tabeli „Miejsca”. W linii 17 jest stworzony obiekt
CONNECTION. Po domyśleniu nowy obiekt połączenia może być w trybie
„ tylko dla czytania”, dlatego w linii 18 właściwości Mode jest przypisana
wartość „adModeReadWrite”. To pozwoli czytać oraz wpisywać rekordy w
operacjach transakcji do bazy danych. W linii 19 jest otworzona baza
danych „Samochody”. Linii 20 – 29 zawierają transakcję. W linii 20 jest
wyznaczony początek transakcji. W liniach 21,22 są operacji transakcji. W
liniach 23 – 20 transakcja będzie zatwierdzona (linia 24) lub wycofana (linia
27).
Filtrowanie rekordów w obiekcie Recordset
W obiekcie Recordset są pobierane wszystkie rekordy tabeli bazy danych
lub polecenia SQL do różnych tabel. Wszystkie te rekordy można filtrować
po wartości ich pól. Istnieją różne możliwości filtracji:
 Bezpośrednio w poleceniu SQL (np. przez klauzuli WHERE,
HAVING)
 Za dopomogą instrukcji If ... Then, która jest umieszczona wewnątrz
pętli Do While...Loop
 Za dopomogą właściwości Filter obiektu Recordset.
Aby wyświetlić jedynie te rekordy, w których wartość pól zadowoli
warunkom filtracji, trzeba wykonać następujące czynności:
1. Stworzyć egzemplarz obiektu Recordset i pobrać zawartość tabeli
lub polecenia SQL przy użyciu metody Open.
2. Określić wartość właściwości Filter umieszczając w niej warunek
filtracji.
92
3. Pobrać wszystkie rekordy dosępne w obiekcie Recordset, posługując
się w tym celu pętlą Do While Not objRS.EOF ...Loop.
Przykład wykorzystania właściwości Filter dla filtracji rekordów jest
pokazany w listingu FiltrRS.asp. Ten skrypt wywoła polecenie do bazy
danych „Samochody” dla otrzymania rekordów, zawierających samochody,
które jeszcze nie są wypożyczone przez klienta. Jednoczesne te rekordy
trzeba filtrować , żeby otrzymać tylko samochody, przebieg których mniej
60000 km .
Listing FiltrRS.asp
1.
2.
3.
4.
5.
6.
7.
8.
9.
<%@ Language=VBScript %>
<% option explicit %>
<!--The references to ADO objects and constants-->
<!--#INCLUDE virtual = "adovbs.inc" -->
<html>
<body>
<%
Dim objConn, objRS,strSQL
strSQL = "SELECT NR_SAMOCHODU, MARKA, TYP,
PRZEBIEG "
10.strSQL = strSQL & "FROM SAMOCHODY S "
11.strSQL = strSQL & "WHERE S.NR_SAMOCHODU "
12.strSQL = strSQL & "NOT IN (SELECT W.NR_SAMOCHODU "
13.strSQL = strSQL & "FROM WYPOZYCZENIA W); "
14.Set objConn = Server.CreateObject("ADODB.Connection")
15.objConn.open("samochody")
16.Set objRS = Server.CreateObject ("ADODB.Recordset")
17.objRS.Open strSQL, objConn, adOpenForwardOnly,,adCmdText
18.objRS.Filter ="Przebieg<60000"
19.%>
20.<h2> Rezultat filtracji: </h2>
21.<h3>Samochody nie wypozyczone oraz przebieg < 60000</h3>
22.<table BORDER ="1" width="100%">
23.<tr>
24.<th width="25%"> Numer samochodu </th>
25.<th width="25%"> Marka </th>
26.<th width="25%"> Typ </th>
93
27.<th width="25%"> Przebieg </th>
28.</tr>
29.<% Do While Not objRS.EOF
30.Response.Write "<tr>"
31.Response.Write "<td>"&objRS("NR_SAMOCHODU")&"</td>"
32.Response.Write "<td>"&objRS("MARKA")&"</td>"
33.Response.Write "<td>"&objRS("TYP") &"</td>"
34.Response.Write "<td>"&objRS("Przebieg") &"</td>"
35.Response.Write "</tr>"
36.objRS.MoveNext
37.Loop
38.%>
39.</Table>
40.<%
41.objRS.Close
42.Set objRS = Nothing
43.objConn.Close
44.Set objConn = Nothing
45.%>
46.</body>
47.</html>
Obiekt COMMAND
Obiekt COMMAND stanowi alternatywny sposób tworzenia obiektów
RECORDSET. Łączy on w sobie dwa obiekty – RECORDSET oraz
CONNECTION. Obiekt COMMAND umożliwia niejawne utworzenie
egzemplarza obiektu RECORDSET. Ten obiekt może mieć kolekcję
parametrów, które mogą być zadane przez obiekty klasy PARAMETER.
Klasa COMMAND zawiera następne metody:
 Execute( ) – uruchomianie instrukcji dla danego połączenia
 CreateParameter( ) – tworzenie nowego parametru(obiektu klasy
PARAMETER)
94
Kolekcja PARAMETERS zawiera wszystkie parametry, które są
wykorzystywane razem z danym obiektem COMMAND. Parametry mogą
zawierać instrukcję SQL lub wywołanie zapamiętanej procedury. Parametry
są przechowywane w obiektach klasy PARAMETER. Klasa
PARAMETERS zawiera następne metody:
 Append(), Delete() – dodawanie (usuwanie) parametru dla danej
kolekcji
 Item() – wywołanie wyznaczonego obiektu PARAMETR
 Refresh() – wywołanie informacji pro parametry właściciela
zapamiętanej procedury.
Metoda Execute obiektu CONNECTION może być wykorzystywana tylko
dla uruchomiania zapamiętanych procedur, które nie mają parametrów.
Metody oraz właściwości obiektu COMMAND pozwalają uruchomić
procedury z wejściowymi oraz wyjściowymi parametrami. Dla obiektu
COMMAND także jako dla obiektu RECORDSET, jest niezbędny obiekt
CONNECTION dla połączenia z bazą danych. Związek z obiektem
CONNECTION może być przez właściwość ActiveConnection obiektu
COMMAND. Ta właściwość zawiera odwołanie do obiektowej zmiennej
obiektu CONNECTION. Ona może być ustalona bez słowa kluczowego
SET, ponieważ może zawierać się odwołanie do łańcucha znaków
połączenia z bazą danych. W tym przypadku, kiedy obiekt CONNECTION
nie istnieje, ADO stworzy go automatyczne po łańcuchu znaków, a potem
usuwa go przy usunięciu obiektu COMMAND.
Wywołanie zapamiętanych procedur przez obiekt COMMAND zawiera
następne czynności:
1. Otworzenie obiektu CONNECTION
2. Stworzenie obiektu COMMAND
3. Ustalenie
właściwości
CommandType,CommandText
oraz
ActiveConnection obiektu COMMAND
4. Stworzenie oraz zapisywanie parametrów do kolekcji obiektu
COMMAND
5. Wywołanie metody Execute obiektu COMMAND.
Przykład wykorzystania obiektu COMMAND dla wywołania zapamiętanych
procedur jest pokazany w listingu ProcedureCommand.asp.
Skrypt dla stworzenia procedury jest pokazany w listingu PROC01.sql. Ta
procedura pozwoli otrzymać ilość pracowników, pensja oraz dodatek
których są w wyznaczonym zasięgu wynagrodzenia.
Baza danych „Samochody” zawiera procedurę Proc01, która otrzyma dwa
wejściowe parametry oraz wróci jeden wyjściowy. Wejściowe parametry
wyznaczają zasięgi wynagrodzenia pracowników. Wyjściowy parametr jest
95
rezultat procedury, zawierający ilość pracowników, wynagrodzenia których
są w tym zasięgu.
Listing Proc01.SQL
if exists(select 1 from sys.sysprocedure where proc_name ='PROC01') then
drop procedure PROC01
end if;
Create procedure PROC01(in dol integer,in gora integer,out ilosc integer) /*
parameters,... */
on exception resume /*umozliwia wykonanie w wypadku bledu*/
begin
select(select COUNT(NR_PRACOWNIKA)
from pracownicy
where(((Pensja+DODATEK) between dol and gora)
and DODATEK is not null)
or ((Pensja between dol and gora) and DODATEK is null)) into ilosc
end
listing ProcedureCommand.asp
1. <%@ Language=VBScript %>
2. <% option explicit %>
3. <!--The references to ADO objects and constants-->
4. <!--#INCLUDE virtual = "adovbs.inc" -->
5. <html>
6. <body>
7. <%
8. Dim objConn, objCM,iparam1,iparam2
9. iparam1=1300
10.iparam2=1900
11.Set objConn = Server.CreateObject("ADODB.Connection")
12.objConn.CursorLocation = adUseClient
13.objConn.open("samochody")
14.Set objCM = Server.CreateObject("ADODB.Command")
15.objCM.ActiveConnection = objConn
16.objCM.Parameters.Append objCM.CreateParameter(_
17.
"Par1",adInteger,adParamInput,4,iparam1)
18.objCM.Parameters.Append objCM.CreateParameter(_
19.
"Par2",adInteger,adParamInput,4,iparam2)
20.objCM.Parameters.Append objCM.CreateParameter(_
21.
"Rezult",adInteger,adParamOutput,2,0)
96
22.objCM.CommandText = "PROC01"
23.objCM.CommandType = adCmdStoredProc
24.call objCM.Execute
25.%>
26.<b>W zasięgu wynagrodżeń (
27.<%=iparam1%> , <%=iparam2%>) ilość pracowników =
</b>
28.<%
29.Response.Write objCM.Parameters("Rezult")
30.Set objCm = Nothing
31.objConn.Close
32.Set objConn = nothing
33.%>
34.</body>
35.</html>
Grupowa modyfikacja rekordów bazy danych
Dla modyfikacji rekordów bazy danych obiekt RECORDSET może być
otwarty
z
warunkiem
blokowania
adLockOptimistic
lub
adLockPessimistic. Jeśli modyfikować rekordy oraz potem wywołać
metodę Update, to obiekt RECORDSET natychmiast przesyła wszystkie
zmiany do bazy danych. Obiekt RECORDSET odwoła się do bazy danych
po modyfikacji każdego rekordu. Kiedy takich rekordów są za dużo trzeba
odtwarzać
obiekt RECORDSET z warunkiem blokowania
adLockBatOptimistic. Ten warunek definiuje grupową modyfikację. Tryb
„grupowa modyfikacja” pozwoli się realizować wszystkie zmiany tylko
jedynie w kursorze obiektu RECORDSET z zatrzymaniem tych zmian w
bazie danych. W bazie danych te zmiany będą wprowadzone tylko po
wywalaniu metody BatchUpdate. Przykład wykorzystania grupowej
modyfikacji jest pokazany w listingu GrModif.asp. W tym skryptu czytają
się rekordy tabeli „WYPOZYCZENIA” bazy danych „Samochody”. W tych
rekordach do wartości daty pola „DATA_ODD” trzeba dodać dwa dni oraz
zmodyfikować te pole.
Listing GrModif.asp.
1. <%@ Language=VBScript %>
2. <% option explicit %>
3. <!--The references to ADO objects and constants-->
4. <!--#INCLUDE virtual = "adovbs.inc" -->
97
5.
6.
7.
8.
<html>
<body>
<%
Dim objConn, objRS,strSQL,dtData_Odd
9. strSQL = "SELECT NR_WYPOZYCZENIA, DATA_ODD "
10.strSQL = strSQL + " FROM wypozyczenia "
11.strSQL = strSQL + "WHERE DATA_ODD IS NOT NULL "
12.strSQL = strSQL + "ORDER BY NR_WYPOZYCZENIA; "
13.Set objConn = Server.CreateObject("ADODB.Connection")
14.objConn.CursorLocation = adUseClient
15.objConn.open("samochody")
16.Set objRS = Server.CreateObject ("ADODB.Recordset")
17.objRS.Open strSQL,objConn, adOpenStatic,
adLockBatchOptimistic,_
18.adCmdText
19.%>
20.<b>Rezultaty modifikacji bazy danych</b>
21.<table align='left' border='1'>
22.<tr>
23.<td>NR_Wypożyczenia</td>
24.<td>Data_odd(stara)</td>
25.<td>Data_odd(nowa)</td>
26.</tr>
27.<%
28.If Not (objRS.EOF AND objRS.BOF) Then
29. Do While NOT objRS.EOF
30.
dtData_Odd = objRS ("DATA_ODD")
31.
dtData_Odd = DateAdd ("d",2,dtData_Odd)
32.
Response.Write "<tr>"
33.
Response.Write "<td>"
&objRS("NR_WYPOZYCZENIA")&"</td>"
34.
Response.Write "<td>" & objRS("DATA_ODD")&"</td>"
35.
Response.Write "<td>" & dtData_Odd &"</td>"
36.
Response.Write "</tr>"
37.
objRS("DATA_ODD")=dtData_Odd
38.
objRS.Update
39.
objRS.MoveNext
40. Loop
98
41. objRS.UpdateBatch
42.End If
43.Response.Write "</table>"
44.objRS.Close
45.Set objRS = Nothing
46.ObjConn.Close
47.Set objConn = Nothing
48.%>
49.</body>
50.</html>
Wstawianie rekordów do bazy danych
Wstawianie rekordów jest niezbędną operacją przy rejestrowaniu nowego
użytkownika, przyjęcia przesyłki, dodania nowych informacji oraz
wykonania wielu innych czynności. Udostępnienie bazy danych na WWW
pozwoli jednocześnie korzystać z niej wielu użytkownikom. Nie ma to
większego znaczenia, jeśli wszystkie te osoby jedynie odczytują informację
zapisane w bazie. Przy wstawianiu oraz modyfikacji rekordów różnymi
osobami mogą być konflikty. Właśnie z tego względu, pierwsza osoba, które
próbuje zmienić zawartość rekordu musi „blokować” go. Kiedy rekord jest
zablokowany, żaden inny użytkownik nie jest w stanie zmienić jego
zawartości. Gdy tylko pierwszy użytkownik zakończy wprowadzanie
modyfikacji, blokada jest usuwana.
Przy tylko odczytywaniu informacji z kursorem typu adOpenForwardOnly
może być skojarzony argument blokowania(LockType), mający wartość
adLockReadOnly. W takim przypadku blokowanie rekordów nie ma
żadnego sensu. Przy dostępu do bazy danych, pozwalającym na zapis
danych, taki sposób blokowania nie będzie słusznym. Dostępne są następne
sposoby blokowania z takimi wartościami stałej blokowania:
 adLockPessimistic oznaczy się, że rekordy są blokowane w
momencie rozpoczynania edycji. Ma to na celu uniknięcie sytuacji, w
której wartości pól rekordu zmieniają się w czasie pomiędzy
rozpoczęciem wpisywania wartości, a wywołaniem metody UPDATE.
 adLockOptimistic oznaczy się, że rekordy są blokowane wyłącznie w
czasie wykonywania metody UPDATE.
 adLockBatchOptimistic
jest potrzebna przy jednoczesnym
modyfikowaniu wielu rekordów.
Sposoby te odróżnia od siebie moment , w którym rekord jest blokowany.
99
Obiekt Recordset udostępia dwie metody pozwalające na modyfikowanie
zawartoścci bazy danych: AddNew oraz Update. Metoda AddNew tworzy
nowy rekord i dodaje go do zbioru rekordów. Ten nowy rekord nie jest
jednak zapisywany w bazie danych, aż do momentu wywołania metody
Update. W wyniku nowego wywołania metody AddNew (bez Update),
nowy rekord staje się aktualnym rekordem zbioru i pozostaje nim nawet po
wywołaniu metody Update.
Poniżej jest pokazany przykład wykorzystania tych metod.
…
objRS.AddNew
objRS.(“Name”) = “ Jacek”
objRS.(“Adres”)=”Koszalin”
objRS.Update
…
Jeśli w rekordzie są wprowadzone zmiany, które nie wolno zapisywać w
bazie danych, to można odrzucić je przy użyciu metody CancelUpdate.
Metodę tę można wywołać tylko wtedy, jeśli wcześniej nie została
wywołana metoda Update. Przykład anulowania zmian jest pokazany na
listingu niżej.
…
objRS.AddNew
objRS.(“Name”) = “ Jacek”
objRS.(“Adres”)=”Koszalin”
objRS.CancelUpdate
W listingu http://had/aspwyklady/addnew.asp
jest pokazany przykład wykorzystania metod AddNew oraz Update. W tym
przykładu jest używane blokowanie tworzone poprzez użycie stałej
adLockOptimistic, której odpowiada wartość 3.
Kod w tym listingu pozwała połączyć się do bazy danych „BIBL”. Dla
połączenia z bazą danych trzeba stworzyć profile ODBC tej bazy z
nazwiskom „BIBL”. Aplikacja dodaje rekord do tabeli „Authors” tej bazy
danych, potem wydrukuje wszystkie rekordy tabeli.
Listing http://had/aspwyklady/addnew.asp
1.
2.
3.
4.
<%@ Language=VBScript %>
<% option explicit %>
<!--The references to ADO objects and constants-->
<!--#INCLUDE virtual = "adovbs.inc" -->
100
5. <HTML>
6. <BODY>
7. <%
8. Dim objCn
9. Dim objRs
10.Set objCn = Server.CreateObject("ADODB.Connection")
11.objCn.open("BIBL")
12.Set objRs = Server.CreateObject("ADODB.Recordset")
13.objRs.Open
"Authors",
objCn,
adOpenForwardOnly,
adLockOptimistic, adCmdTable
14.objRs.AddNew
15.objRs("Author") ="Scott Mitchel"
16.objRs("Year") = 1948
17.objRs.Update
18.objRs.MoveFirst
19.%>
20.<B> Zawartosc tabeli </B>
21.<P>
22.<TABLE>
23.<TR>
<td>author</td>
<td>Rok</td>
24.</TR>
25.<%
Do While Not objRs.EOF %>
26.<TR>
<td><% = objRs("Author") %>,<td/>
<td> <% =objRs("Year")%></td>
27.</TR>
28.<%
29.objRS.MoveNext
30.Loop
31.objRs.Close
32.set objRs = nothing
33.objCn.Close
34.set objCn = nothing
35.%>
36.</table>
37.</BODY>
38.</HTML>
101
Linia 1 wyznacza typ interpretatora ASP. Kod w linii 2 nie pozwoli
wykorzystać definiowanie zmiennych skryptu po domyśleniu, wszystkie
zmieni oraz konstanty muszą być wcześnie deklarowane. Linia 3 zawiera
komentarz w kodu HTML. Linia 4 zawiera instrukcję HTML
#INCLUDE, która połączy do skryptu plik „adovbs.inc”, zawierający
deklarowania konstant obiektów ADO. Linii 7-19, 25,26, 28-35 zawierają
kod skryptu ASP. W linii 10 jest stworzony obiekt ADO CONNECTION,
za pomocą metody CreateObject() wbudowanego obiektu ASP Serwer. W
linii 11 obiekt ADO CONNECTION jest połączony z bazą danych
„BIBL”. W linii 12 jest stworzony obiekt RECORDSET za pomocą
metody CreateObject() obiektu Server. Kod w linii 13 uruchomi obiekt
RECORDSET. W tej linii są wyznaczone typ kursora
adOpenForwardOnly, typ blokowania adLockOptimistic, typ polecenia
adCmdTable , żrodło dla polecenia w bazie danych - tabela „Authors”,
obiekt Connection. Linia 14 dodaje nowy pusty rekord do tabeli
„Authors”. W liniach 15,16 są wyznaczone wartości pól nowego rekordu.
W linii 17 aktualizuje się nowy rekord za dopomogą metody UPDATE. W
liniach 18 – 30 wydrukują się wszystkie rekordy tabeli.
W listingu tabeli_dani_bibl.sql jest pokazany kod SQL dla stworzenia i
uzupełniania bazy danych BIBL.
Listing tabeli_dani_bibl.sql
if exists(select 1 from sys.systable where table_name='Authors' and
table_type='BASE') then
drop table Authors
end if;
create table Authors(
Author
varchar(50) ,
Year
integer
);
INSERT INTO Authors
VALUES ('Grady Booch', 1950);
INSERT INTO Authors
VALUES ('James Rumbaugh', 1952);
INSERT INTO Authors
VALUES ('Ivar Jacobson', 1948);
INSERT INTO Authors
VALUES ('Brian Siler', 1960);
102
INSERT INTO Authors
VALUES ('Jeff Spotts', 1963);
INSERT INTO Authors
VALUES ('Wendy Boggs', 1947);
INSERT INTO Authors
VALUES ('Michael Boggs', 1971);
Dodawanie rekordów do bazy danych przez formularza
Aplikacja w tym przykładu czyta dani pro użytkownika w formularz i
potem pisze te dani do bazy . Strona z formularzem jest zwyczajnym
dokumentem HTML (listing rejestracja.htm). Formularz składa się z
pięciu pól tekstowych. Kiedy użytkownik kliknie przycisk przesyłający,
dane podane w polach formularza zostaną przesłane do skryptu o nazwie
uyztkownik_registration.asp (patrz linia 4). Skrypt przetwarzający dane z
formularza został przedstawiony w listingu niżej.
Listing http://had/aspwyklady/rejestracja.htm
1. <HTML>
2. <BODY>
3. Uzupelni ten formularz :
4. <FORM ACTION="/aspwyklady/uyztkownik_registration.asp"
method="post">
5. <TABLE>
6. <TR>
7. <TD align = right>Imie: </TD>
8. <TD align = right><INPUT NAME="firstname" size="30" ></TD>
9. </TR>
10.<TR>
11.<TD align = right>Nazwisko: </TD>
12.<TD align = right><INPUT NAME="lastname" size="30" ></TD>
13.</TR>
14.<TR>
15.<TD align = right> Email: </TD>
16.<TD align = right><INPUT NAME="email" size="30"></TD>
17.</TR>
18.<TR>
19.<TD align = right> Nazwa uzytkownika: </TD>
20.<TD align = right><INPUT NAME="username" size="30"></TD>
103
21.</TR>
22.<TR>
23.<TD align = right>Haslo: </TD>
24.<TD align = right><INPUT TYPE="password" NAME="password"
size="30"></TD>
25.</TR>
26.</TABLE>
27.<TABLE >
28.<TR>
29.<TD ><INPUT TYPE="submit" VALUE="Submit Registration"
></TD>
30.<TD ><INPUT TYPE="reset" VALUE="Start Over" ></TD>
31.</TR>
32.</TABLE>
33.</FORM>
34.</BODY>
35.</HTML>
Listing http://had/aspwyklady/uyztkownik_registration.asp
W linii 4 jest dołączony do skryptu plik adobs.inc. W liniach 10,11 zostało
realizowane połączenie z bazą danych. Profil ODBC tej bazy ma nazwisko
„REGISTRATION”. W liniach 9 i 12 jest stworzony egzemplarz obiektu
Recordset. W linii 13 otwiera się zbiór rekordów. Źródłem obiektu
Recordset jest tabela "tblUsers" . Typ kursora jest dwukierunkowy
(statyczny), typ blokowania adLockOptimistic. W linii 14 jest dodany do
tabeli bazy danych pusty rekord. W liniach 15 -19 jest zapisana informacja z
odpowiednich pól formularza do obiektów kolekcji Filds obiektu Recordset.
W linii 20 rekord staje aktualnym. W pozostałych liniach można zamknąć i
usunąć z pamięci egzemplarzy obiektów Connection i Recordset. W linii 26
jest generowane podziękowanie za rejestrację.
1. <%@ Language=VBScript %>
2. <% option explicit %>
3. <!--The references to ADO objects and constants-->
4. <!--#INCLUDE virtual = "adovbs.inc" -->
5. <HTML>
6. <BODY>
7. <%
8. Dim objCn
9. Dim objRs
10.Set objCn = Server.CreateObject("ADODB.Connection")
104
11.objCn.open("REGISTRATION")
12.Set objRs = Server.CreateObject("ADODB.Recordset")
13.objRs.Open
"tblUsers",objCn,adOpenStatic,adLockOptimistic,adCmdTable
14.objRs.AddNew
15.objRs("FirstName") = Request.Form ("firstname")
16.objRs("LastName") = Request.Form ("lastname")
17.objRs("Email") = Request.Form ("email")
18.objRs("Username") = Request.Form ("username")
19.objRs("Password") = Request.Form ("password")
20.objRs.Update
21.objRs.Close
22.set objRs = nothing
23.objCn.Close
24.set objCn = nothing
25.%>
26.<B> Thank you for registration!</B>
27.</BODY>
28.</HTML>
Listing users.sql zawiera skrypt dla stworzenia bazy REJESTRACJA tego
przykładu:
%%================================================
%% Database name: ConceptualDataModel_1
%% DBMS name: Sybase SQL Anywhere 5.5
%% Created on: 2002-09-29 23:50:04
%%=============================================
if exists(select 1 from sys.systable where table_name='tblUsers' and
table_type='BASE') then
drop table tblUsers
end if;
%%==============================================
%% Table: tblUsers
%%==============================================
create table tblUsers (
FirstName
varchar(25),
LastName
varchar(25),
Email
varchar(30),
Username
varchar(20),
105
Password
);
varchar(10)
Realizacja skryptów na stronie klienta
Współcześni przeglądarki mogą realizować na stronie klienta kody
skryptowe w VBSCRIPT lub JAVASCRIPT. Skrypt może być stworzony na
stronie serwera i przesłany do klienta. Skrypt klienta musi być w
znacznikach <script>:
<script language= „VBScript”>
kod klienta
</script>
Te same znaczniki wykorzystują się dla skryptów serwera w plikach
global.asa, ale dla realizacji na stronie serwera znacznik <script> musi
zawierać atrybut :
runat=server
Skrypt klienta może nie zawierać atrybut runat=client, ten atrybut jest
ustalony po domyśleniu.
Na stronie klienta przeglądarka realizuje obiektowy model DOM(Document
Object Model). Wbudowane obiekty VBScript oraz obiekty ADO nie są
dostępne w przeglądarce.
DOM umożliwi dostęp do jakikolwiek obiektu dokumentu HTML, to
znaczy do jakikolwiek znacznika oraz go komponenty bieżącej strony
internetowej. Dla identyfikacji obiektów odpowiedni znaczniki muszą mieć
wyznaczone właściwości NAME oraz ID.
Przykład analizy danych formy na stronie klienta jest pokazany w listingu
REJESTR_scr.htm . Ten skrypt realizuje analogiczną formę poprzedniego
skryptu rejestracja.htm dla pobierania danych pro klienta. Oprócz tego te
dani analizują się na zawieranie pustych łańcuchów znaków.
Listing REJESTR_scr.htm
1. <script LANGUAGE="VBScript">
2. <html>
3. <head>
4. Function Form_Validator()
5. If (Document.frmReg.firstname.Value)="" Then
6.
MsgBox "Pole 'imie' nie moze byc puste!"
7.
document.all("firstname").focus
8.
Form_Validator = false
9. ElseIf (Document.frmReg.lastname.Value)="" Then
106
10.
MsgBox "Pole 'nazwisko' nie moze byc puste!"
11.
document.all("lastname").focus
12.
Form_Validator = false
13.ElseIf (Document.frmReg.username.Value)="" Then
14.
MsgBox "Pole 'Nazwa Uzytkownika' nie moze byc
puste!"
15.
document.all("username").focus
16.
Form_Validator = false
17.ElseIf (Document.frmReg.password.Value)="" Then
18.
MsgBox "Pole 'haslo' nie moze byc puste!"
19.
document.all("password").focus
20.
Form_Validator = false
21.Else
22.
document.frmReg.submit
23.
Form_Validator = true
24.End If
25.End Function
26.</script>
27.</head>
28.<body>
29.<p>Uzupelni ten formularz : </p>
30.<form NAME="frmReg" method="post"
ACTION="uyztkownik_registration.asp"
31.onsubmit="Form_Validator()">
32.<table>
33.<tr>
34. <td align="right">Imie: </td>
35. <td align="right"><input NAME="firstname" size="30"></td>
36.</tr>
37.<tr>
38.
<td align="right">Nazwisko: </td>
39.
<td align="right"><input NAME="lastname" size="30"></td>
40.</tr>
41.<tr>
42.
<td align="right">Email: </td>
43.
<td align="right"><input NAME="email" size="30"></td>
44.</tr>
107
45.<tr>
46.
<td align="right">Nazwa uzytkownika: </td>
47.
<td align="right"><input NAME="username" size="30"></td>
48.</tr>
49.<tr>
50.
<td align="right">Haslo: </td>
51.
<td align="right"><input TYPE="password" NAME="password"
size="30"></td>
52.</tr>
53.</table>
54.<table>
55.<tr>
56.
<td><input TYPE="button" NAME="btn" VALUE="Submit
Registration" onClick="Form_Validator()"></td>
57.
<td><input TYPE="reset" Name="start" VALUE="Start
Over"></td>
58.</tr>
59.</table>
60.</form>
61.</body>
62.</html>
W liniach 4-25 jest wyznaczona funkcja Form_Validator(). Wywołanie tej
funkcji będzie po clickneniu przyciska „Submit Registration”. W linii 56
zdefiniowany warunek wywołania : onClick="Form_Validator()".
Przykład analizy daty jest pokazany w listingu ch25i8.asp.
Listing ch25i8.asp.
<%@ Language=VBScript %>
<HTML>
<HEAD>
<script language="VBScript">
dim errMsg
dim submitVal
function frmDate_onSubmit()
frmDate_onSubmit = doSubmit()
end function
function setErrorMsg(s)
errMsg = s
document.all("txtDate").focus
call window.setTimeout("showErrorMsg", 100)
108
end function
function clearErrorMsg()
errMsg = ""
document.all("errMsg").innerText = "Please re-enter the date in the form
'mm/dd/yyyy'."
end function
function showErrorMsg()
document.all("errMsg").innerText = errMsg
call window.setTimeout("clearErrorMsg", 2000)
end function
function doSubmit()
dim dateVal
dim aDate
dim el
dim parts
dateVal = document.all("txtDate").value
on error resume next
aDate = cdate(dateVal)
if err.number <> 0 then
on error goto 0
call setErrorMsg("That doesn't appear to be a valid date.")
doSubmit = false
Exit Function
elseif instr(1, dateVal, "/", vbBinaryCompare) = 0 then
call setErrorMsg("You entered a date in the incorrect format. Use the
format 'mm/dd/yyyy'.")
doSubmit = False
exit function
end if
parts = split(dateVal, "/")
if ubound(parts) < 2 then
call setErrorMessage("You must enter a month, a day, and a year.")
doSubmit=False
Exit function
elseif (clng(parts(0)) <> clng(month(dateVal))) or clng(parts(1)) <>
clng(day(dateVal)) or clng(parts(2)) <> clng(year(dateVal)) then
call setErrorMsg("You entered an invalid date. Use the format
'mm/dd/yyyy'.")
doSubmit = False
exit function
109
end if
document.frmDate.submit
doSubmit = True
end function
</script>
</HEAD>
<BODY>
<%
if request.form("txtDate") <> "" then
response.write "You entered the valid date " & request.form("txtDate") &
"."
response.end
end if
%>
<form name="frmDate" method="post" action="ch25i8.asp">
<div id="errMsg" style="color: red"> </div><br>
Enter a date in the form "mm/dd/yyyy"
<input id="txtDate" type="text" name="txtDate" maxLength="10"
size="20"></input> 
<input type="button" name="btnSubmit" value="Submit"
onClick="doSubmit()">
</form>
</BODY>
</HTML>
Zastosowania obiektów ASP oraz ADO dla połączenia z
bazą danych
Przykład zastosowania obiektów ASP oraz ADO jest przedstawiony w
listingu
http://had/aspwyklady/DBsamoch1.asp. Kod w tym listingu
pozwała połączyć się do bazy danych „SAMOCHODY”, stworzyć obiekt
„kursor” z zapytaniem SQL do bazy. Skrypt listingu zawiera także instrukcji
sterowania kursorem oraz czytania informacji pro pracowników firmy
wypożyczającej samochody. Dla połączenia z bazą danych trzeba stworzyć
profile ODBC tej bazy z nazwiskom „SAMOCHODY”.
Listing http://had/aspwyklady/DBsamoch1.asp
1. <%@ Language=VBScript %>
110
2. <% option explicit %>
3. <!--The references to ADO objects and constants-->
4. <!--#INCLUDE virtual = "adovbs.inc" -->
5. <%
6. Dim conn
7. Dim SQL
8. Dim R
9. Dim F
10.' Dim RecsAffected
11.Dim aConnectionString
12.'aConnectionString ="Provider=MSDASQL.1;" _
13.' & "User ID=dba;Data Source=samochody;" _
14.' & "Extended Properties=""DSN=samochody;UID=dba"";User
Id=dba;"
15.Set conn = Server.CreateObject("ADODB.Connection")
16.'Only reading DataBase
17.'conn.Mode = adModeRead
18.'conn.ConnectionString = aConnectionString
19.'The cursor on the clients computer
20.conn.CursorLocation=adUseClient
21.conn.open("samochody")
22.SQL = "SELECT
PRACOWNICY.NAZWISKO,PRACOWNICY.STANOWISKO,"
23.SQL = SQL &
"PRACOWNICY.DZIAL,MIEJSCA.MIASTO,MIEJSCA.ULICA "
24.SQL = SQL & "FROM PRACOWNICY, MIEJSCA "
25.SQL = SQL & "WHERE PRACOWNICY.NR_MIEJSCA =
MIEJSCA.NR_MIEJSCA "
26.SQL = SQL & "ORDER BY PRACOWNICY.NAZWISKO;"
27.'Response.Write SQL
28.Set R = Server.CreateObject("ADODB.Recordset")
29.R.Open SQL, conn
30.Response.Write "<b>By default, when you first open a Recordset object,
it's positioned at the first record.</b><br>"
31.Response.Write "First Record: " & R("NAZWISKO") & ", " &
R("STANOWISKO") & "<br>"
32.Response.Write "<b>Moved to the last record.</b><br>"
33.R.moveLast
34.Response.Write "Last Record: " & R("NAZWISKO") & ", " &
R("STANOWISKO") & "<br>"
111
35.Response.Write "<b>Moved to the previous record.</b><br>"
36.R.MovePrevious
37.Response.Write "Next-To-Last Record: " & R("NAZWISKO") & ", " &
R("STANOWISKO") & "<br>"
38.R.MoveFirst
39.Response.Write "<b>Moved to the first record.</b><br>"
40.R.MoveNext
41.Response.Write "<b>Moved to the next record.</b><br>"
42.Response.Write "Second Record: " & R("NAZWISKO") & ", " &
R("STANOWISKO") & "<br>"
43.Response.Write "<br>"
44.Response.Write "<h3>All Records</h3>"
45.R.MoveFirst
46.Response.Write "<table align='left' border='1'>"
47.Response.Write "<tr>"
48.for each F in R.Fields
49.Response.Write "<td>" & F.name & "</td>"
50.next
51.Response.Write "</tr>"
52.while not R.EOF
53.Response.Write "<tr>"
54.for each F in R.Fields
55.Response.Write "<td>" & F.value & "</td>"
56.next
57.Response.Write "</tr>"
58.r.MoveNext
59.wend
60.Response.Write "</table>"
61.R.Close
62.set R = nothing
63.conn.Close
64.set conn = nothing
65.%>
Linia 1 wyznacza typ interpretatora ASP. Kod w linii 2 nie pozwoli
wykorzystać definiowanie zmiennych skryptu po domyśleniu, wszystkie
zmieni oraz konstanty muszą być wcześnie deklarowane. Linia 3 zawiera
komentarz w kodu HTML. Linia 4 zawiera instrukcję HTML #INCLUDE,
która połączy do skryptu plik „adovbs.inc”, zawierający deklarowania
112
konstant obiektów ADO. Linii 5-65 zawierają kod skryptu ASP. W liniach
6-11 są deklarowane zmienne. Linii 12-14 zawierają komentarz, który
pokazuje sposób połączenia do bazy danych bez DSN systemu. W linii 15
jest stworzony obiekt ADO CONNECTION, za pomocą metody
CreateObject() wbudowanego obiektu ASP Serwer. Linii 16-19 zawierają
komentarz z przykładem instrukcji dla innego trybu kursora. W linii 20 jest
ustalona właściwość „CursorLocation” obiektu CONNECT. Wartość
„adUseClient” ustali kursor na stronie klienta. W linii 21 dokonywa się
połączenie z bazą danych za pomocą metody OPEN() obiektu
CONNECTION. W liniach 22-26 jest otrzymana tekstowa zmienna, która
zawiera kod polecenia SQL do bazy danych. Linia 27 zawiera kod, który
był wykorzystany przy usuwaniu błędów. W linii 28 jest stworzony obiekt
RECORDSET za pomocą metody CreateObject() obiektu Server. Kod w
linii 29 uruchomi obiekt RECORDSET. W liniach 31,34,37,42 są pokazane
przykłady czytania pól bieżących rekordów obiektu RECORDSET. W
liniach 33,36,38,40,45 są wykorzystane różne metody sterowania kursorem.
W liniach 46-60 jest pokazany przykład poszeregowania tabeli, zawierające
rezultaty polecenia SQL. W linii 61 obiekt RECORDSET jest zamknięty. W
linii 62 obiekt RECORDSET jest usunięty z pamięci. W liniach 62,63 jest
zamknięty oraz usunięty obiekt CONNECTION.
Przesyłanie plików pomiędzy klientem a serwerem
Wbudowane obiekty VBScript , obiekty ADO oraz obiekty DOM nie
zawierają możliwości przesyłania plików pomiędzy klientem a serwerem.
Pliki mogą być przesłane przez protokół HTTP lub przez protokół FTP. Dla
przesyłania plików przez HTTP mogą być wykorzystane obiekty FORM,
które są zapisane w przeglądarce. Możliwość przesyłania plików do serwera
WWW jest realizowana przez protokół RFC1867, który ma nazwisko: „
Form-based file Upload in HTML” – typowy plik HTML dla zapisywania na
serwerze. Zgodnie z tym protokołem trzeba w dokumencie HTML
rozmieścić formę HTML, zawierające znacznik <INPUT>. Dla tego
znacznika trzeba wyznaczyć parametr TYPE=FILE. Jednocześnie dla
znacznika <FORM> trzeba wyznaczyć format danych w parametrze
ENCTYPE=multipart/form-data. W pole ACTION trzeba wyznaczyć
adres strony WWW, która będzie obrabiać dani w formacie
multipart/form-data. Kiedy ta forma jest uruchomiana w przeglądarce
automatyczne są sformowane dodatkowe przyciski dla poszukiwania plików
na komputerze klienta. Dla przesyłania plików trzeba wcisnąć przycisk
SUBMIT.
Przykład formy jest pokazany w listingu Sampl1.htm
113
Listing Sampl1.htm
<HTML>
<BODY BGCOLOR="white">
<H1>aspSmartUpload : Sample 1</H1>
<HR>
<FORM METHOD="POST"
ACTION="/scripts/aspSmartUpload/Sample1.asp"
ENCTYPE="multipart/form-data">
<INPUT TYPE="FILE" NAME="FILE1" SIZE="50"><BR>
<INPUT TYPE="FILE" NAME="FILE2" SIZE="50"><BR>
<INPUT TYPE="FILE" NAME="FILE3" SIZE="50"><BR>
<INPUT TYPE="FILE" NAME="FILE4" SIZE="50"><BR>
<INPUT TYPE="SUBMIT" VALUE="Upload">
</FORM>
</BODY>
</HTML>
Dla zapisywania plików na serwerze można wykorzystać oprogramowanie
firmy SMART (http://www.aspsmart.com) które może być pobierane za
darmo ze strony firmy. Oprogramowanie te zawiera komponent ActiveX,
który musi być ustalony w rejestru systemu operacyjnego. Dokumentacja na
stronie WWW informuje pro czynności dla aktywacji tego komponentu
ActiveX.
Głównym elementem tego oprogramowania jest obiekt
SmartUpload który zawiera dwie kolekcje (Files oraz Form), właściwości
obiektu oraz metody. Właściwości obiektu SmartUpload są pokazane w
następnej tabeli.
Właściwości obiektu SmartUpload.
Parametr
Opis
CodePage
Kod strony dla wszystkich przesyłanych plików
TotalmaxFileSize
Maksymalny rozmiar wszystkich przesyłanych
plików
MaxFileSize
Maksymalny rozmiar jednego pliku
AllowedFilesList
Lista rozszerzeń plików które są dopuszczalnymi
DeniedFilesList
Lista rozszerzeń plików które nie są
dopuszczalnymi
DenyPhysicalPath
Zapobiega zapisywanie pliku w tym katalogu
ContentDisposition
Ustali właściwość content-disposition w nagłówku
114
DownloadBlockSize
TotalBytes
BinaryData
Ilość bajtów w bloku przy czytaniu danych
Ilość bajtów w formie POST
Bajt z indeksem tabeli, zawierającą pliki
Metody obiektu SmartUpload są pokazane w następnej tabeli.
Metoda
Opis
Upload
Otrzymać formę POST z plikami od klienta
Save
Zapisać wszystkie pliki na serwerze
DownloadFile
Otrzymać plik z serwera
DownloadField
Otrzymać plik z bazy danych serwera
FieldToFile
Stworzyć plik z pola bazy danych
UploadInFile
Zapisać dani formy POST w plik
Kolekcja Files zawiera obiekty File, właściwości oraz jedną metodę.
Właściwości kolekcji Files.
Parametr
Opis
Count
Ilość obiektów typu File w kolekcji
TotalBytes
Ilość bajtów dla wszystkich plików w kolekcji
Metodą Item(ID) kolekcji Files wróci obiekt typu File, który ma
wyznaczony identyfikator(ID).
Obiekt File kolekcji Files zawiera właściwości oraz metody.
Właściwości obiektu File.
Parametr
Opis
Name
Imię elementu formy POST
FileName
Imię pliku, które jest wpisane przez klienta
FileExt
Rozszerzenie pliku
FilePathName
Ścieżka pliku
ContentType
Typ pliku dokumentu(content)
ContentDisp
Dyspozycja pliku w dokumencie(content)
Size
Rozmiar pliku
ContentString
Łańcuch znaków tego pliku
TypeMIME
Typ MIME od klienta
SubTypeMIME
Podtyp MIME
IsMissing
Jest TRUE, kiedy klient nie wyznaczył plik
BynaryData
Bajt z indeksem tabeli, zawierającą przesłane dani
Metody obiektu File.
Metoda
Opis
115
SaveAs
FileToField
Zapisuje plik na dysk. Kiedy plik już
istnieje pisze go po nową.
Zapisuje plik do bazy danych
Kolekcja Form zawiera obiekty Item, właściwość Count oraz metodę
Item() .
Właściwość Count wyznacza ilość obiektów ITEM w kolekcji. Metoda
Item(ID) wróci się obiekt Item, mający wyznaczony ID w formie.
Właściwości obiektu Item.
Parametr
Opis
Count
Ilość wartości tego elementu Item
Name
Imię elementu Item formy POST
Values
Wartość elementu Item
Przykład skryptu który otrzyma rezultaty formy jest pokazany w listingu
Sampl1.asp.
Listing Sampl1.asp
<HTML>
<BODY BGCOLOR="white">
<H1>aspSmartUpload : Sample 1</H1>
<HR>
<%
' Variables
' *********
Dim mySmartUpload
Dim intCount
' Object creation
' ***************
Set mySmartUpload =
Server.CreateObject("aspSmartUpload.SmartUpload")
' Upload
' ******
mySmartUpload.Upload
' Save the files with their original names in a virtual path of the web server
intCount = mySmartUpload.Save("/aspSmartUpload/Upload")
' sample with a physical path
' intCount = mySmartUpload.Save("c:\temp\")
' Display the number of files uploaded
' ************************************
116
Response.Write(intCount & " file(s) uploaded.")
%>
</BODY>
</HTML>
Przykład pliku, który operuje oraz wyświetla właściwości otrzymanych
plików jest pokazany w listingu Sample2.asp.
Listing Sample2.asp.
<HTML>
<BODY BGCOLOR="white">
<H1>aspSmartUpload : Sample 2</H1>
<HR>
<%
' Variables
' *********
Dim mySmartUpload
Dim file
Dim intCount
intCount=0
' Object creation
' ***************
Set mySmartUpload =
Server.CreateObject("aspSmartUpload.SmartUpload")
' Upload
' ******
mySmartUpload.Upload
' Select each file
' ****************
For each file In mySmartUpload.Files
' Only if the file exist
' **********************
If not file.IsMissing Then
' Save the files with his original names in a virtual path of the web
server
file.SaveAs("/aspSmartUpload/Upload/" & file.FileName)
' sample with a physical path
' file.SaveAs("c:\temp\" & file.FileName)
' Display the properties of the current file
' ******************************************
117
Response.Write("Name = " & file.Name & "<BR>")
Response.Write("Size = " & file.Size & "<BR>")
Response.Write("FileName = " & file.FileName & "<BR>")
Response.Write("FileExt = " & file.FileExt & "<BR>")
Response.Write("FilePathName = " & file.FilePathName & "<BR>")
Response.Write("ContentType = " & file.ContentType & "<BR>")
Response.Write("ContentDisp = " & file.ContentDisp & "<BR>")
Response.Write("TypeMIME = " & file.TypeMIME & "<BR>")
Response.Write("SubTypeMIME = " & file.SubTypeMIME &
"<BR>")
intCount = intCount + 1
End If
Next
' Display the number of files which could be uploaded
' ***************************************************
Response.Write("<BR>" & mySmartUpload.Files.Count & " files could be
uploaded.<BR>")
' Display the number of files uploaded
' ************************************
Response.Write(intCount & " file(s) uploaded.<BR>")
%>
</BODY>
</HTML>
Przykład skryptu który ustali ograniczenia na przesyłane pliki jest pokazany
w listingu Sample3.asp.
Listing Sample3.asp.
<HTML>
<BODY BGCOLOR="white">
<H1>aspSmartUpload : Sample 3</H1>
<HR>
<%
On Error Resume Next
' Variables
' *********
Dim mySmartUpload
Dim intCount
' Object creation
' ***************
118
Set mySmartUpload =
Server.CreateObject("aspSmartUpload.SmartUpload")
' Only allow txt or htm files
' ***************************
mySmartUpload.AllowedFilesList = "htm,txt"
' DeniedFilesList can also be used :
' Allow all files except exe, bat and asp
' ***************************************
' mySmartUpload.DeniedFilesList = "exe,bat,asp"
' Deny physical path
' *******************
mySmartUpload.DenyPhysicalPath = True
' Only allow files smaller than 50000 bytes
' *****************************************
mySmartUpload.MaxFileSize = 50000
' Deny upload if the total fila size is greater than 200000 bytes
'
*************************************************************
**
mySmartUpload.TotalMaxFileSize = 200000
' Upload
' ******
mySmartUpload.Upload
' Save the files with their original names in a virtual path of the web server
intCount = mySmartUpload.Save("/aspSmartUpload/Upload")
' sample with a physical path
' intCount = mySmartUpload.Save("c:\temp\")
' Trap errors
' ***********
If Err Then
Response.Write("<b>Wrong selection : </b>" & Err.description)
119
Else
' Display the number of files uploaded
' ************************************
Response.Write(intCount & " file(s) uploaded.")
End If
%>
</BODY>
</HTML>
Przykład pliku, który pisze przesłane pliki do bazy danych jest pokazany w
listingu Sample4.asp.
Listing Sample4.asp.
<HTML>
<BODY BGCOLOR="white">
<H1>aspSmartUpload : Sample 4</H1>
<HR>
<%
' Variables
' *********
Dim mySmartUpload
Dim file
Dim oConn
Dim oRs
Dim intCount
intCount=0
' Object creation
' ***************
Set mySmartUpload =
Server.CreateObject("aspSmartUpload.SmartUpload")
' Upload
' ******
mySmartUpload.Upload
' Connect to the DB
' *****************
Set oConn = Server.CreateObject("ADODB.Connection")
curDir = Server.MapPath("\scripts\aspSmartUpload\Sample.mdb")
120
oConn.Open "DBQ="& curDir &";Driver={Microsoft Access Driver
(*.mdb)};DriverId=25;FIL=MS Access;"
' Open a recordset
' ****************
strSQL = "SELECT FILENAME,FILE FROM TFILES"
Set oRs = Server.CreateObject("ADODB.recordset")
Set oRs.ActiveConnection = oConn
oRs.Source = strSQL
oRs.LockType = 3
oRs.Open
' Select each file
' ****************
For each file In mySmartUpload.Files
' Only if the file exist
' **********************
If not file.IsMissing Then
' Add the current file in a DB field
' **********************************
oRs.AddNew
file.FileToField oRs.Fields("FILE")
oRs("FILENAME") = file.FileName
oRs.Update
intCount = intCount + 1
End If
Next
' Display the number of files uploaded
' ************************************
Response.Write(intCount & " file(s) uploaded.<BR>")
' Destruction
' ***********
oRs.Close
oConn.Close
Set oRs = Nothing
Set oConn = Nothing
121
%>
</BODY>
</HTML>
Przykład pliku, który otrzymuje jednocześnie pliki i dani z form jest
pokazany w listingu Sample5.asp.
Listing Sample5.asp.
<HTML>
<BODY BGCOLOR="white">
<H1>aspSmartUpload : Sample 5</H1>
<HR>
<%
' Variables
' *********
Dim mySmartUpload
Dim item
Dim value
Dim file
' Object creation
' ***************
Set mySmartUpload =
Server.CreateObject("aspSmartUpload.SmartUpload")
' Upload
' ******
mySmartUpload.Upload
' FILES Collection
' ****************
Response.Write("<BR><STRONG>Files Collection</STRONG><BR>")
' Informations about files
' ************************
Response.Write("Number of files =" & mySmartUpload.Files.count
&"<BR>")
Response.Write("Total bytes of files =" &
mySmartUpload.Files.TotalBytes &"<BR>")
' Select each file
' ****************
122
For each file In mySmartUpload.Files
Response.Write(file.FileName & " (" & file.Size & "bytes)<BR>")
Next
' FORM Collection
' ***************
Response.Write("<BR><STRONG>Form Collection</STRONG><BR>")
' Select each item
' ****************
For each item In mySmartUpload.Form
' Select each value of the current item
' *************************************
For each value In mySmartUpload.Form(item)
Response.Write(item & " = " & value & "<BR>")
Next
Next
%>
</BODY>
</HTML>
Przykład wyładowania plików do klienta jest pokazany w listingu
Sampl6.asp.
Listing Sampl6.asp.
<%
' Variables
' *********
Dim mySmartUpload
' Object creation
' ***************
Set mySmartUpload =
Server.CreateObject("aspSmartUpload.SmartUpload")
' Download
' ********
mySmartUpload.DownloadFile("/aspSmartUpload/Upload/sample.zip")
' sample with a physical path
' mySmartUpload.DownloadFile("c:\temp\sample.zip")
' sample with optionnals
123
' Call
mySmartUpload.DownloadFile("/aspSmartUpload/Upload/sample.zip",
"application/x-zip-compressed", "downloaded.zip")
%>
Przykład projektu aplikacji bazodanowej w środowisku
INTERNET
Opis procesów biznesowych.
Księgarnia dokonywa sprzedaż książek przez INTERNET. Aplikacja
bazodanowa realizuje technologię ASP i jest rozmieszona na serwerze
WWW (IIS). Aplikacja realizuje następne funkcje:
 Zadanie przez formularzy warunków poszukiwanej książki
 Poszukiwanie książki w bazie danych
 Formowania listy, zawierającej wszystkie książki, które odpowiadają
warunkom poszukiwania
 Wybór potrzebnej książki z listy
 Formowanie zamawiania klienta
 Formowania listy zamówień wszystkich klientów w ciąże terminu
wyznaczonego.
Baza danych księgarni jest rozmieszona na serwerze firmy. Serwer WWW
firmy zawiera ASP i HTML strony, które mają dostęp do relacyjnej bazy
danych księgarni. Klient musi uruchomić przez przeglądarkę stronę
początkową WWW. Na tej stronie klient musi uzupełnić formę dla
zamówienia książki. Ta forma zawiera pola z danymi pro tytuł książki, je
autora oraz wydawnictwo. Klient może nie wiedzieć wszystkie pola dla
identyfikowania potrzebnej książki (np. może wiedzieć tylko tytuł książki
lub tylko je autora lub je wydawnictwo). W temu wypadku można uzupełnić
tylko pola wyznaczone. Wyniki zamawiania będą zawierać zbiór rekordów,
które odpowiadają warunkom zapytania. To może być zbiór rekordów
książek z identycznymi łańcuchami znaków w tytułach, lub rekordy z
wszystkimi książkami jednego autora, lub wszystkie książki wyznaczonego
wydawnictwa. Ten zbiór rekordów będzie wyświetlony na stronie WWW
klienta. Każdy rekord ma odwołanie typu hyper tekst (Hyper reference)
Klient może popatrzyć rezultaty zapytania oraz zamówić potrzebną książkę
przyciskiem na odwołaniu hyper tekst.
Opis struktury bazy danych
Baza danych zawiera 5 tabel, które są połączone pomiędzy sobą.
124
Opis kodu źródłowego stron aplikacji
Struktura aplikacji jest pokazana na rys. niżej.
<<submit>>>
<<link>>
OrderForm.asp
Locate.asp
Default.htm
<<redirect>>
Order.asp
The diagram of components
Kod HTML stronę początkową jest pokazany w listingu default.htm.
W linii 3 jest rozmieszczony graficzny obiekt. W liniach 7 - 17 jest
wyznaczony formularz dla zadania warunków poszukiwanej książki. W linii
7 jest wyznaczona strona ASP , do której będzie posyłane dani formularza.
W linii 8 jest wyznaczona metoda „POST”. W liniach 9 - 13 są wyznaczone
pola formularza.
Listing http://had/bookstore/default.htm
1. <html>
2. <body bgcolor="#FFFFFF">
3. <p align="center"><img src="../Bookstore/images/banner.gif"
4. width="576" height="128"></p>
5. <p> </p>
6. <hr>
7. <form action="/Bookstore/locate.asp"
8. method="POST" name="frmLocate">
9. <p><input type="text" size="20" name="txtTitle">
10.Title</p>
11.<p><input type="text" size="20" name="txtAuthor">
12.Author</p>
125
13.<p><input type="text" size="20" name="Publisher">
14.Publisher</p>
15.<p><input type="submit" name="B1" value="Go!"><input
16.type="reset" name="B2" value="Reset"></p>
17.</form>
18.<hr>
19.</body>
20.</html>
Strona Locate.asp będzie aktywna przy przesyłaniu rezultatów formularza ze
strony początkowej. W liniach 9,10 są deklarowane zmienne dla obiektów
ASP oraz ADO: CONNECTION, RECORDSET. W linii 11 deklarowana
zmienna dla przechowywania kodu SQL. W linii 13 za pomocą metody
CreateObject() obiektu Server stwarza się obiekt Connection. W linii 14 jest
otworzona baza danych za pomocą metody Open() obiektu Connection.
Baza danych ma profil ODBC z nazwiskom „WebPages”. W liniach 16 –
31 stwarza się kod SQL dla polecenia z bazą danych. W linii 33 jest
stworzony obiekt RECORDSET. W linii 34 jest wyznaczony kursor
statyczny ( konstanta adOpenStatic = 3). To znaczy, że wyniki wykonania
zapytania SQL są przechowywane w tabeli tymczasowej, której wierszy nie
są modyfikowane w momencie, gdy kursor był otwarty oraz wszystkie
zmiany przez innych użytkowników bazy danych w momencie, gdy kursor
był otwarty, będą widoczne tylko po dodatkowym uruchomianiu obiektu
RECORDSET. W liniach 38 – 51 jest sformowany komunikat w wypadkach
kiedy dani jest nieobecne lub danych są za dużo. W liniach 52 – 84 jest
stworzone kolumny tabeli: „Autor”, „Title”, „Publisher”. W wierszach
tabeli są rezultaty poszuka w bazie danych. Kolejne wierszy czytają się z
obiektu RECORDSET przez metodę MOVENEXT(). Tytuł każdej książki
jest zanurzony do znacznika <A> </A>. Ten znacznik realizuje odwołanie
typu HYPERTEXT do strony z formularzem zamówienia książki.
Listing http://had/bookstore/locate.asp
1.
2.
3.
4.
5.
6.
7.
<%@ LANGUAGE="VBSCRIPT" %>
<%Response.Expires=0%>
<HTML>
<HEAD>
<TITLE>Document Title</TITLE>
</HEAD>
<BODY>
126
8. <%
9. Public dbBooks
10.Public rsBooks
11.Dim strSQL
12.' Open a connection to Biblio
13.Set dbBooks = Server.CreateObject("ADODB.Connection")
14.dbBooks.Open("WebPages")
15.' Build SQL statement
16.strSQL = "SELECT Authors.Author, Titles.Title, Publishers.`Company
Name` "
17.strSQL = strSQL & "FROM Authors, `Title Author`, Titles, Publishers "
18.strSQL = strSQL & "WHERE (Authors.Au_ID = `Title Author`.Au_ID
AND "
19.strSQL = strSQL & "`Title Author`.ISBN = Titles.ISBN AND "
20.strSQL = strSQL & "Titles.PubID = Publishers.PubID)"
21.If Request.Form("txtTitle") <> "" Then
22.strSQL = strSQL & " AND Title LIKE '%" & Request.Form("txtTitle")
& "%'"
23.End If
24.If Request.Form("txtAuthor") <> "" Then
25.strSQL = strSQL & " AND Author LIKE '%" & _
26.Request.Form("txtAuthor") & "%'"
27.End If
28.If Request.Form("txtPublisher") <> "" Then
29.strSQL = strSQL & " AND `Company Name` LIKE '%" & _
30.Request.Form("txtPublisher") & "%'"
31.End If
32.' Run the query
33.Set rsBooks = Server.CreateObject("ADODB.Recordset")
34.rsBooks.Open strSQL, dbBooks, 3
35.%>
36.<!-- Build the results table -->
37.<%
38.If rsBooks.BOF and rsBooks.EOF Then%>
39.<H2><CENTER>Sorry, no results! Please try again!</CENTER></H2>
40.<%Else
41.' Populate the cursor
42.rsBooks.MoveLast
43.rsBooks.MoveFirst
44.End If
127
45.If rsBooks.RecordCount > 200 Then%>
46.<H2><CENTER>
47.Sorry, too many results. Please narrow your search
48.</CENTER></H2>
49.<%Else%>
50.<%If Not rsBooks.BOF Then%>
51.<H2>Here are the results of your search:</H2>
52.<TABLE BORDER>
53.<TR>
54.<TH>
55.Author
56.</TH>
57.<TH>
58.Title
59.</TH>
60.<TH>
61.Publisher
62.</TH>
63.</TR>
64.<%
65.Do While Not rsBooks.EOF
66.%>
67.<TR>
68.<TD>
69.<%=rsBooks("Author")%>
70.</TD>
71.<TD>
72.<A
HREF="/Bookstore/OrderForm.asp?Title=<%=Server.URLEncode(rsBo
oks("Title"))%>">
73.<%=rsBooks("Title")%>
74.</A>
75.</TD>
76.<TD>
77.<%=rsBooks("Company Name")%>
78.</TD>
79.</TR>
80.<%
81.rsBooks.MoveNext
82.Loop
128
83.%>
84.</TABLE>
85.<%End If%>
86.<%End If%>
87.<%
88.' Close database
89.rsBooks.Close
90.dbBooks.Close
91.Set rsBooks = Nothing
92.Set dbBooks = Nothing
93.%>
94.</BODY>
95.</HTML>
Listing http://had/bookstore/orderform.asp
1.
2.
3.
4.
5.
6.
7.
<%@ LANGUAGE="VBSCRIPT" %>
<html>
<head>
<title>Document Title</title>
</head>
<body bgcolor="#FFFFFF">
<!-- Insert HTML here --><img src="../Bookstore/images/order.gif"
width="360" height="96">
8. <form action="Order.asp" method="POST" id=form1 name=form1>
9. <p><input type="text" size="20" name="txtName"> Name</p>
10.<p><input type="text" size="20" name="txtAddress1"> Address</p>
11.<p><input type="text" size="20" name="txtAddress2"></p>
12.<p><input type="text" size="20" name="txtCity"> City</p>
13.<p><input type="text" size="20" name="txtState"> State</p>
14.<p><input type="text" size="20" name="txtZip"> Zip</p>
15.<p><input type="text" size="20" name="txtCreditCard"> Credit
16.Card</p>
17.<p><textarea name="txtBookTitle" rows="2" cols="20">
18.<%=Request.QueryString("Title")%>
19.</textarea> Book Title </p>
20.<p><input type="submit" name="cmdSubmit" value="Submit"><input
21.type="reset" name="cmdReset" value="Reset"></p>
22.</form>
129
23.</body>
24.</html>
Listing http://had/bookstore/order.asp
1. <%@ LANGUAGE="VBSCRIPT" %>
2. <HTML>
3. <HEAD>
4. <TITLE>Document Title</TITLE>
5. </HEAD>
6. <BODY>
7. <H2><CENTER>Thanks for your order!</CENTER></H2>
8. <%
9. Dim objFile
10.Dim objStream
11.' Open ORDER.TXT for writing
12.Set objFile = Server.CreateObject("Scripting.FileSystemObject")
13.Set objStream = objFile.OpenTextFile(Server.MapPath("/Bookstore") +
_
14."\order.txt", 8, True)
15.objStream.WriteLine Request.Form("txtName")
16.objStream.WriteLine Request.Form("txtAddress1")
17.objStream.WriteLine Request.Form("txtAddress2")
18.objStream.WriteLine Request.Form("txtCity")
19.objStream.WriteLine Request.Form("txtState")
20.objStream.WriteLine Request.Form("txtZip")
21.objStream.WriteLine Request.Form("txtCreditCard")
22.objStream.WriteLine Request.Form("txtBookTitle")
23.objStream.Close
24.Set objStream = Nothing
25.Set objFile = Nothing
26.%>
27.</BODY>
28.</HTML>
Przykład realizacji. Baza danych dokumentów w
środowisku Internet
Listing C:\Inetpub\wwwroot\dok1\default.htm
1. <html>
2. <head>
130
3. <meta NAME="GENERATOR" Content="Microsoft FrontPage
3.0">
4. <title> System of search of the documents</title>
5. </head>
6. <body>
7. <h1>System of information search of the documents</h1>
8. <hr>
9. <h2>Choose a type of search:</h2>
10.<h3><A href="locate.asp">1.To search in headings</A> - Viewing of
the documents under the names of the documents in headings </h3>
11.<h3><A href="locate1.htm">2.To search under the names </A> Viewing of the documents under the names of the documents under
the names</h3>
12.<p> </p></A>
13.</body>
14.</html>
Listing Dokumentlist.asp
1. <%@ Language=VBScript %>
2. <HTML>
3. <HEAD>
4. <META NAME="GENERATOR" Content="Microsoft FrontPage
5.0">
5. </HEAD>
6. <BODY>
7. <%
8. Public dbDocuments
9. Public rsDocuments
10.Dim strSQL
11.' Open a connection to dokuments
12.Set dbDocuments = Server.CreateObject("ADODB.Connection")
13.dbDocuments.Open("dokuments")
14.strSQL = "SELECT rubric.rid, files.Fid, files.Fdescr, files.FName,
files.FPath"
15.strSQL = strSQL & " FROM rubric INNER JOIN files ON rubric.rid
= files.rid"
16.strSQL = strSQL & " WHERE ((rubric.rid)= " &
Request.QueryString("rid")& ")"
17.strSQL = strSQL & " ORDER BY files.Fid;"
131
18.%>
19.<!--strSQL=<br>
20.<% Response.Write strSQL%>-->
21.<%
22.' Run the query
23.Set rsDocuments = Server.CreateObject("ADODB.Recordset")
24.rsDocuments.Open strSQL, dbDocuments, 3
25.%>
26.<!-- We build the table with the documents -->
27.<%
28.If rsDocuments.BOF and rsDocuments.EOF Then%>
29.<H2><CENTER>The documents in a heading are
absent!</CENTER></H2>
30.<%Else
31.' install the cursor
32.rsDocuments.MoveLast
33.rsDocuments.MoveFirst
34.End If
35.%>
36.<%If Not rsDocuments.BOF Then%>
37.<H2>There are following documents in a heading:</H2>
38.<TABLE BORDER width="100%">
<TR>
<TH width="50%">
Name of the document
</TH>
<TH width="50%">
File of the document
</TH>
</TR>
39.<%
40.Do While Not rsDocuments.EOF
41.%>
<TR>
<TD width="50%">
42.<A HREF="<%Response.Write Application.Value("ftppub")&
trim(rsDocuments("FPath"))&trim(rsDocuments("FName"))%>">
132
<%=rsDocuments("Fdescr")%>
</A>
</TD>
<TD width="50%">
<%=rsDocuments("FName")%>
</TD>
</TR>
43.<%
rsDocuments.MoveNext
44.Loop
45.%>
46.</TABLE>
47.<%End If%>
48.<P> </P>
49.<%
50.' Close database
51.rsDocuments.Close
52.dbDocuments.Close
53.Set rsDocuments = Nothing
54.Set dbDocuments = Nothing
55.%>
56.</BODY>
57.</HTML>
Listing locate.asp
1.
2.
3.
4.
5.
6.
7.
8.
9.
<%@ Language=VBScript %>
<%Response.Expires=0%>
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft FrontPage
5.0">
<META HTTP-EQUIV="Content-Type" content="text/html;
charset=windows-1251">
</HEAD>
<BODY>
<%
10.Public dbRubric
11.Public rsRubric
133
12.Dim strSQL
13.' Open a connection to DB "dokuments"
14.Set dbRubric = Server.CreateObject("ADODB.Connection")
15.dbRubric.Open("dokuments")
16.strSQL = "SELECT rName , rDescr , rid FROM rubric;"%>
17.<!--strSQL =<br>
18.<%=strSQL %>-->
19.<%
20.' Run the query
21.Set rsRubric = Server.CreateObject("ADODB.Recordset")
22.rsRubric.Open strSQL, dbRubric, 3
23.%>
24.<!-- We build the table with headings -->
25.<%
26.If rsRubric.BOF and rsRubric.EOF Then%>
27.<H2><CENTER>The data on headings are
absent!</CENTER></H2>
28.<%Else
29.' install the cursor
30.rsRubric.MoveLast
31.rsRubric.MoveFirst
32.End If
33.%>
34.<%If Not rsRubric.BOF Then%>
35.<H2>There are following documents in a database of the
documents:</H2>
36.<TABLE BORDER width="100%">
<TR>
<TH width="50%">
Name of a heading
</TH>
<TH width="50%">
Description of a heading
</TH>
</TR>
37.<%
38.Do While Not rsRubric.EOF
39.%>
134
<TR>
<TD width="50%">
<A HREF="<%Response.Write
Application.Value("aspcall")&
Server.URLEncode(rsRubric("rid"))%>">
<%=rsRubric("rName")%>
</A>
</TD>
<TD width="50%">
<%=rsRubric("rDescr")%>
</TD>
</TR>
40.<%
rsRubric.MoveNext
41.Loop
42.%>
43.</TABLE>
44.<%End If%>
45.<P> </P>
46.<%
47.' Close database
48.rsRubric.Close
49.dbRubric.Close
50.Set rsRubric = Nothing
51.Set dbRubric = Nothing
52.%>
53.</BODY>
54.</HTML>
Listing locate1.asp
1.
2.
3.
4.
<%@ Language=VBScript %>
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft FrontPage
5.0">
5. </HEAD>
6. <BODY>
7. <%
135
8. Public dbDocuments
9. Public rsDocuments
10.Dim strSQL
11.' Open a connection to DB "dokuments"
12.Set dbDocuments = Server.CreateObject("ADODB.Connection")
13.dbDocuments.Open("dokuments")
14.strSQL = "SELECT Fid, Fdescr, FName,FPath FROM files"
15.If Request.Form("txtTitle") <> "" Then
16.strSQL = strSQL & " Where Fdescr LIKE '%" &
Request.Form("txtTitle") & "%'"
17.End If
18.'Run the query
19.Set rsDocuments = Server.CreateObject("ADODB.Recordset")
20.rsDocuments.Open strSQL, dbDocuments, 3
21.%>
22.<!-- We build the table with the documents -->
23.<%
24.If rsDocuments.BOF and rsDocuments.EOF Then%>
25.<H2><CENTER>Such documents are absent!</CENTER></H2>
26.<%Else
27.' install the cursor
28.rsDocuments.MoveLast
29.rsDocuments.MoveFirst
30.End If %>
31.<%If rsDocuments.RecordCount >300 Then%>
32.<H2><CENTER>
33.It is too much the documents! Specify inquiry!
34.</CENTER></H2>
35.<%Else
36.If Not rsDocuments.BOF Then%>
37.<H2><CENTER>There are such documents :
38.</CENTER></H2>
39.<TABLE BORDER width="100%">
<TR>
<TH width="50%">
Name of the document
</TH>
<TH width="50%">
File of the document
136
</TH>
</TR>
40.<%
41.Do While Not rsDocuments.EOF
42.%>
<TR>
<TD width="50%">
<A HREF="<%Response.Write
Application.Value("ftppub")&
trim(rsDocuments("FPath"))&trim(rsDocuments("FName"
))%>">
<%=rsDocuments("Fdescr")%>
</A>
</TD>
<TD width="50%">
<%=rsDocuments("FName")%>
</TD>
</TR>
43.<%
rsDocuments.MoveNext
44.Loop
45.%>
46.</TABLE>
47.<%End If%>
48.<%End If%>
49.<P> </P>
50.<%
51.' Close database
52.rsDocuments.Close
53.dbDocuments.Close
54.Set rsDocuments = Nothing
55.Set dbDocuments = Nothing
56.%>
57.<P> </P>
58.</BODY>
59.</HTML>
Listing locate1.htm
137
1. <HTML>
2. <HEAD>
3. <META NAME="GENERATOR" Content="Microsoft Visual Studio
6.0">
4. <TITLE></TITLE>
5. </HEAD>
6. <BODY>
7. <h1>Definition conditions of search</h1>
8. <h2>Enter a name of the document or characteristic words,
9. click Key.</h2>
10.<P> </P>
11.<form action="/dok1/locate1.asp"
12.method="post" name="frmLocate">
<p style="BORDER-TOP-WIDTH: 400px; BORDER-LEFTWIDTH: 400px; BORDER-BOTTOM-WIDTH: 400px; BORDERRIGHT-WIDTH: 400px">
13.<input name="txtTitle" style="WIDTH: 331px; HEIGHT: 25px"
size=36>
14.Name of the document</p>
<p><input type="submit" name="B1" value="Press!"><input
type="reset" name="B2" value="Clear"></p>
15.</form>
16.<P> </P>
17.<P> </P>
18.</BODY>
19.</HTML>
Listing global.asa
1. <SCRIPT LANGUAGE=VBScript RUNAT=Server>
2. Sub Application_OnStart
3. '==Visual InterDev Generated - startspan==
4. '--Project Data Connection
Application("Connection1_ConnectionString") =
"Provider=MSDASQL.1;Persist Security Info=False;Data
Source=dokuments;Extended
Properties=""DSN=dokuments;DBQ=F:\asp\Databases\doku
ments.mdb;DriverId=281;FIL=MS
Access;MaxBufferSize=2048;PageTimeout=5;"";"
Application("Connection1_ConnectionTimeout") = 15
138
5.
6.
7.
8.
Application("Connection1_CommandTimeout") = 30
Application("Connection1_CursorLocation") = 3
Application("Connection1_RuntimeUserName") = ""
Application("Connection1_RuntimePassword") = ""
'-- Пути к директориям и страницам
Application("ftppub") = "ftp://had/doc/"
Application ("aspcall") ="/dok1/documentlist.asp?rid="
'-- Project Data Environment
'Set DE = Server.CreateObject("DERuntime.DERuntime")
'Application("DE") =
DE.Load(Server.MapPath("Global.ASA"),
"_private/DataEnvironment/DataEnvironment.asa")
'==Visual InterDev Generated - endspan==
End Sub
</SCRIPT>
Przykład realizacji. Czasopismo elektroniczne.
Ten projekt wykorzysta komponent ASP, mający nazwisko „Content Linking”.
Content Linking pozwala na połączenia stron w taki sposób, aby mogły być przeglądane
w seriach, sekwencyjnie.
Przykładowo czasopismo składa się z artykułów oraz sekcji tych artykułów ułożonych
sekwencyjne. Realizacja czasopisma potrzebuje wyznaczenia stron (*.htm lub *.asp)
które dynamiczne przenosiłyby użytkownika do strony następnej lub z powrotem, do
poprzedniej.
Komponent Content Linking łączy w sobie metody umożliwiające realizację takich
zadań.
Komponent Content Linking jest częścią standartowej instalacji IIS. Jego plik biblioteki
nosi nazwę nextlink.dll. Podstawą działania tego komponentu jest plik tekstowy,
zawierający informacje o wszystkich stronach, które trzeba połączyć, oraz o kolejności,
w jakiej te strony mają być połączone. W tym specjalnym pliku tekstowym muszą być
podane nie tylko nazwę strony, ale również jej adres URL. Plik nie musi nosić jakiejś
określonej specjalnej nazwy – musi być jedynie dostępny w strukturze katalogu
wirtualnego, który będzie wykorzystany. Każdy wiersz pliku tekstowego ma następującą
strukturę:
PageURL Description Comment
Każde pole oddzielone jest od siebie znakiem tabulacji, a każda pozycja musi być
umieszczona w osobnym wierszu tekstowego pliku indeksu. Pierwsze pole każdego
wiersza przechowuje adres URL danej strony. Drugie pole jest nazwą lub opisem strony.
Trzecie, które nie jest wymagane, może zawierać dowolny komentarz, który po prostu
jest ignorowany przez komponent. Przykład tego pliku jest pokazany w listingu
Magazine.txt.
139
Listing magazine/magazine.txt
/Magazine/Content.asp?ArticleID=1 Create ActiveX Controls
/Magazine/Content.asp?ArticleID=2 Developer Days Information
/Magazine/Content.asp?ArticleID=3 CTVBSIG Information
Wszystkie artykuły są rozmieszczone w bazie danych aplikacji, dlatego połączenia do
strony zawiera indeks rekordu ArtikleID.
Metody komponentu Content Linking
Metoda
Opis
GetListCount
Zwraca liczbę pozycji w pliku indeksu
GetListIndeks
Zwraca numer pozycji bieżącej strony w pliku indeksu
GetNextUrl
Zwraca adres URL strony następnej względem strony bieżącej
GetNextDescription
Zwraca opis strony następnej względem strony bieżącej
GetPreviosURL
Zwraca adres URL strony poprzedniej względem strony bieżącej
GetPreviosDescription Zwraca opis strony poprzedniej względem strony bieżącej
GetNthURL
Zwraca URL pozycji indeksu na podstawie liczby przekazanej
metodzie
GetNthDescription
Zwraca opis pozycji indeksu na podstawie liczby przekazanej
metodzie
Projekt realizuje połączone tabeli stylu (linked style sheets). W tym przypadku tabela
stylów dokumentu jest wyznaczona w innym dokumencie. Na tą tabelę mogą odwołać
inne strony aplikacji, które będą miały jedyny standard formatowania rezultatów.
Połączona tabela realizowana się w wyglądzie pliku tekstowego w listingu Magazine.css.
listing magazine/magazine.css
BODY {
margin-left:10px;
font:12pt/14pt "Garamond";
color:black;
text-align:left;
background:transparent;
}
P{
margin-left:10px;
font:12pt/14pt "Garamond";
color:black;
text-align:left;
background:transparent;
}
H1 {
margin-left:10px;
font:18pt/20pt "Arial Black";
color:black;
text-align:left;
140
background:transparent;
}
H2 {
margin-left:10px;
font:12pt/14pt "Arial Black";
color:black;
text-align:left;
background:gray;
}
H3 {
margin-left:10px;
font:12pt/14pt "Garamond";
color:black;
text-align:left;
background:transparent;
}
H4 {
margin-left:10px;
font:14pt/16pt "Garamond";
font-style:italic
color:black;
text-align:left;
background:transparent;
}
Dla odwołania do wyznaczonego stylu znacznik <LINK> rozdziału <HEAD> musi
zawierać nazwę tego pliku.
Ten projekt wykorzysta bazę danych magazine.mdb. Schemat bazy oraz treść tabel są
pokazane na rysunku niżej.
Baza danych Magazine.mdb
141
Początkowa strona aplikacji jest pokazana w listingu default.asp.
Listing magazine/default.asp
1. <%@ LANGUAGE="VBSCRIPT" %>
2. <% Option Explicit %>
3. <html>
4. <head>
5. <title>Document Title</title>
6. <LINK REL=STYLESHEET HREF="Magazine.css">
7. </head>
8. <body bgcolor="#FFFFFF">
9. <%
10. ' Variables
11. Dim objLinker
12. Dim i
13. ' Create Content Linking component
14. Set objLinker = Server.CreateObject("MSWC.NextLink")
15. %>
16. <!-- Generate table of contents
17. from content linking list -->
18. <H1>Table of Contents</H1>
19. <TABLE>
142
20. <%
21. For i = 1 to objLinker.GetListCount("Magazine.txt")
22. %>
23. <TR>
24. <TD><IMG SRC="/Magazine/Images/Bullet.gif"></TD>
25. <TD><H3><A HREF="<%=objLinker.GetNthURL("Magazine.txt", i)%>">
<%=objLinker.GetNthDescription("Magazine.txt", i)%></A></H3>
26. </TD>
27. </TR>
28. <%Next%>
29. </TABLE>
30. <!-- Index search form -->
31. <DIV STYLE="position:absolute; top:370px; left:400px; width:200;">
32. <CENTER>
33. <BR>
34. <FORM ACTION="/Magazine/Search.asp" METHOD="POST">
35. <INPUT NAME="SearchString" size="20"><BR>
36. <INPUT TYPE="SUBMIT" VALUE="Search!">
37. </FORM>
38. </CENTER>
39. </DIV>
40. <hr>
41. <p><img src="../Magazine/Images/banner.gif" width="467"
42. height="175"></p>
43. </body>
44. </html>
Pozostałe strony aplikacji (content.asp oraz search.asp) są pokazane niżej.
Listing magazine/content.asp
1.
2.
3.
4.
5.
<%@ LANGUAGE="VBSCRIPT" %>
<% Option Explicit %>
<HTML>
<HEAD>
<LINK REL=STYLESHEET HREF="Magazine.css">
6. <SCRIPT LANGUAGE="VBScript">
7. <!-8. Sub imgBack_OnMouseOver()
9.
txtBack.Style.Visibility = "Visible"
10. End Sub
11. Sub imgBack_OnMouseOut()
143
12.
txtBack.Style.Visibility = "Hidden"
13. End Sub
14. Sub imgNext_OnMouseOver()
15.
txtNext.Style.Visibility = "Visible"
16. End Sub
17. Sub imgNext_OnMouseOut()
18.
txtNext.Style.Visibility = "Hidden"
19. End Sub
20. -->
21. </SCRIPT>
22. </HEAD>
23. <BODY LINK="White" VLINK="White" ALINK="White">
24. <%
25. ' This code creates navigational tools for the site
26. ' Variables
27. Public objLinker
28. Public intArticleID
29. Public intArticles
30. ' Get Content Linking object info
31. Set objLinker = Server.CreateObject("MSWC.NextLink")
32. ' Get ArticleID
33. intArticleID = CInt(Request.QueryString("ArticleID"))
34. intArticles = CInt(objLinker.GetListCount("Magazine.txt"))
35. %>
36. <!-- Navigational tools -->
37. <DIV>
38. <!-- Next Article -->
39. <%If intArticleID > 1 Then%>
40. <A HREF=<%=objLinker.GetNthURL("Magazine.txt", intArticleID - 1)%>>
41. <IMG ID="imgBack" SRC="/Magazine/Images/Back.gif">
42. </A>
43. <%End If%>
44. <!-- Previous Article -->
45. <%If intArticleID < intArticles Then%>
46. <A HREF=<%=objLinker.GetNthURL("Magazine.txt", intArticleID + 1)%>>
144
47. <IMG ID="imgNext" SRC="/Magazine/Images/Next.gif">
48. </A>
49. <%End If%>
50. <!-- Article descriptions -->
51. <%If intArticleID > 1 Then%>
52. <FONT FACE="Verdana" ID="txtBack" SIZE=4
53. STYLE="position:relative;visibility:hidden;color:red;margin-left:20px">
54. <%=objLinker.GetNthDescription("Magazine.txt", intArticleID - 1)%>
55. </FONT><BR>
56. <%End If%>
57. <%If intArticleID < intArticles Then%>
58. <FONT FACE="Verdana" ID="txtNext" SIZE=4
59. STYLE="position:relative;visibility:hidden;color:red;margin-left:20px">
60. <%=objLinker.GetNthDescription("Magazine.txt", intArticleID + 1)%>
61. </FONT>
62. <%End If%>
63. <%
64. ' Variables
65. Dim objConnection
66. Dim objRecordset
67. Dim strSQL
68. ' Open data source
69. Set objConnection = Server.CreateObject("ADODB.Connection")
70. objConnection.Open "Magazine"
71. ' Build SQL statement
72. strSQL = "SELECT * FROM Articles,Sections "
73. strSQL = strSQL & "WHERE Sections.ArticleID = Articles.ArticleID "
74. strSQL = strSQL & "AND Articles.ArticleID = " & _
75. Request.QueryString("ArticleID")
76. ' Get records
77. Set objRecordset = Server.CreateObject("ADODB.Recordset")
78. objRecordset.Open strSQL, objConnection
79. ' Get article information
80. Dim strTitle
81. Dim strSubTitle
82. Dim strNote
83. strTitle = objRecordset("ArticleTitle") & ""
84. strSubTitle = objRecordset("ArticleSubTitle") & ""
145
85. strNote = objRecordset("ArticleNote") & ""
86. ' Article title
87. If strTitle <> "" Then
88. %>
89. <H1><%=strTitle%></H1><%
90. End If
91. ' Article subtitle
92. If strSubTitle <> "" Then
93. %>
94. <H4><%=strSubTitle%></H4><%
95. End If
96. ' Build article body
97. ' Variables
98. Dim strSection
99. Dim strText
100.
Do While Not objRecordset.EOF
101.
102.
103.
104.
105.
106.
' Get section header
strSection = objRecordset("SectionTitle") & ""
If strSection <> "" Then
%>
<H2><%=strSection%></H2><%
End If
107.
108.
109.
110.
111.
112.
113.
' Get section text
strText = objRecordset("SectionText") & ""
If strText <> "" Then
%>
<%=strText%>
<%
End if
114.
115.
116.
' Get next section
objRecordset.MoveNext
Loop
117.
118.
119.
120.
121.
' Close database
objRecordset.Close
objConnection.Close
Set objRecordset = Nothing
Set objConnection = Nothing
146
122.
%>
123.
124.
</BODY>
</HTML>
listing magazine/search.asp
1.
2.
3.
4.
5.
<%@ LANGUAGE="VBSCRIPT" %>
<% Option Explicit %>
<HTML>
<LINK REL=STYLESHEET HREF="Magazine.css">
<BODY>
6. <H1>Here are the results of your search...</H1>
7. <%
8. ' Variables
9. Dim objConnection
10. Dim objRecordset
11. Dim strSQL
12. ' Open data source
13. Set objConnection = Server.CreateObject("ADODB.Connection")
14. objConnection.Open "Magazine"
15. ' Build SQL statement
16. strSQL = "SELECT * FROM Articles,Sections "
17. strSQL = strSQL & "WHERE Sections.ArticleID = Articles.ArticleID "
18. strSQL = strSQL & "AND Sections.SectionText LIKE '%" & _
19. Request.Form("SearchString") & "%'"
20. ' Get records
21. Set objRecordset = Server.CreateObject("ADODB.Recordset")
22. objRecordset.Open strSQL,objConnection%>
23. <TABLE>
24. <% Do While Not objRecordset.EOF %>
25. <TR>
26. <TD>
27. <A HREF="Content.asp?ArticleID=<%=objRecordset("ArticleID")%>">
28. <H3><%=objRecordset("ArticleTitle")%></H3> </A>
147
29. </TD>
30. </TR>
31. <%
32. ' Get next record
33. objRecordset.MoveNext
34. Loop
35. %>
36. </TABLE>
37. <H1>Tip of the Day...</H1>
38. <%
39. ' Tip of the day
40. ' Variables
41. Dim objFile, objStream
42. Dim TextNumber, strText, i
43. Set objFile = Server.CreateObject("Scripting.FileSystemObject")
44. Set objStream = objFile.OpenTextFile(Server.MapPath ("/Magazine") _
45. + "\tips.txt")
46. Randomize Timer
47. TextNumber = Int(Rnd*30)
48. For i = 0 to TextNumber
49. objStream.SkipLine
50. Next
51. strText= objStream.ReadLine
52. objStream.Close
53. %>
54. <H4><%=strText%></H4>
55. </BODY>
56. </HTML>
Wymogi do projektu aplikacji bazodanowej
Etapy projektu:
148
1. Stworzenie bazy danych
1.1. Stworzenia modelu konceptualnego bazy danych aplikacji w
środowisku PowerDesigner
Treść podetapu:
 Model musi zawierać nie mniej niż 5 encji.
 Schemat modelu konceptualnego
1.2 Stworzenia modelu fizycznego w środowisku PowerDesigner
Treść podetapu:
 Wybór typu DBMS (Sybase SQL Anywhere lub MS ACCESS)
 Schemat modelu fizycznego
1.3 Stworzenia tabel bazy danych
Treść podetapu:
 Stworzenia kodu SQL w środowisku PowerDesigner
 Stworzenia tabel bazy w środowisku serwera
 Uzupełnienie bazy testową informacją
1.4. Stworzenia zapytań SQL do bazy danych
Treść podetapu:
 Stworzenie zapytań SQL dla wpisu informacji do tabel bazy danych
 Stworzenie zapytań SQL dla czytania informacji (4-5 zapytań)
2. Stworzenia lokalnej aplikacji bazodanowej
Treść podetapu:
Aplikacja bazodanowa, która jest stworzona w jednym z środowisk: C++,
Java lub PowerBuilder.
3. Stworzenia zdalnej Internet- aplikacji
Treść podetapu:
 Internet aplikacja (ASP – aplikacja)
 Kody stron ASP
Pytania kontrolne po kursu „Systemy zarządzania relacyjnymi
bazami danych”.
1.Technologia dostępu do baz danych w Internecie. Serwery WWW.
Technologia ASP. Wbudowane obiekty ASP. Przykłady.
2.Funkcje wbudowane w VBScript. Wykorzystanie Formularzy. Metody
Post i Get. Wykorzystanie cookies. Przesyłanie plików pomiędzy klientem a
serwerem. Przykłady.
3.Dostęp do plików i folderów. Obiekty FileSystemObject, File i Folder.
Wykorzystanie tych obiektów. Przykłady.
4.Standardy ODBC, OLE DB. Dostęp do baz danych przy użyciu ADO.
149
5.Obiekty CONNECTION i RECORDSET. Typy kursorów, tryby
blokowania. Modyfikacja, wstawianie i dodawanie rekordów do baz danych.
Przykłady.
6.Sterowanie transakcjami bazy danych. Filtrowanie rekordów. Obiekt
COMMAND. Przykłady.
7.Realizacja skryptów na stronie klienta. Przykłady.
8. Przykład projektu księgarni Internetowej.
9.Przykład projektu czasopisma elektronicznego.
10.Przykład projektu bazy danych dokumentów.
150
Download