Agentie de Voiaj Prezentare pe Internet
Cuprins
Cap.1 Introducere
Cap.2 Baze de date
2.1 Introducere
2.2 Baze de date relationale si normalizarea relatiilor
2.3 Sisteme de gestiune a bazelor de date
2.3.1 Introducere
2.3.2 Facilitatile mediului de programare Access
2.4 SQL
2.4.1 Notiuni introductive
2.4.2 Comanda SELECT
2.4.3 Comanda INSERT
2.4.4 Comanda UPDATE
2.4.5 Comanda DELETE
Cap.3 HTML
3.1 Retele de calculatoare si Internet
3.2 Prezentare generala HTML
3.3 Tag-uri HTML
Cap.4 Active Server Pages ( ASP )
4.1 Prezentare generala
4.2 Accesarea bazelor de date
4.3 Obiectul Response
4.4 Obiectul Request
4.5 Obiectul Session
Cap.5 Prezentarea aplicatiei
3.1 Structura bazei de date
3.2 Interfata grafica
3.3 Descrierea programelor
Cap.6 Concluzii
Bibliografie
59 pagini
=== Agentie de voiaj – prezentare pe internet ===
Cuprins
Cap.1 Introducere
Cap.2 Baze de date
2.1 Introducere
2.2 Baze de date relationale si normalizarea relatiilor
2.3 Sisteme de gestiune a bazelor de date
2.3.1 Introducere
2.3.2 Facilitatile mediului de programare Access
2.4 SQL
2.4.1 Notiuni introductive
2.4.2 Comanda SELECT
2.4.3 Comanda INSERT
2.4.4 Comanda UPDATE
2.4.5 Comanda DELETE
Cap.3 HTML
3.1 Retele de calculatoare si Internet
3.2 Prezentare generala HTML
3.3 Tag-uri HTML
Cap.4 Active Server Pages ( ASP )
4.1 Prezentare generala
4.2 Accesarea bazelor de date
4.3 Obiectul Response
4.4 Obiectul Request
4.5 Obiectul Session
Cap.5 Prezentarea aplicatiei
3.1 Structura bazei de date
3.2 Interfata grafica
3.3 Descrierea programelor
Cap.6 Concluzii
Bibliografie
Listing Program
Cap.1 Introducere
Aplicatia intitulata ,,Agentie de voiaj – prezentare pe Internet”, realizata intr-o combinatie de HTML (Hypertext Markup Language ) si ASP ( Active Server Pages ) reprezinta o colectie de pagini de Web care pune la dispozitia clientilor informatii despre excursiile tip croaziera pe care le organizeaza o agentie de voiaj.
Prin intermediul ASP, aplicatia permite integrarea completa a paginilor de Web cu o baza de date relationala prin intermediul ODBC. Absolut toate informatiile afisate in paginile de Web provin dintr-o baza de date de tip MS Access care a fost declarata in ODBC cu ajutorul numelui Vacante pentru System DSN ( Data Source Name ).
Avantajul utilizarii unei baze de date in spatele paginilor de Web este major: orice modificare in baza de date ( adaugarea unei noi companii maritime, vas, croaziera, s.a.m.d.) va fi imediat disponibila in paginile de Web fara sa fie necesara nici o modificare in programele sursa. In cazul construirii unui astfel de site numai cu ajutorul HTML, fara ASP, ar insemna o munca importanta depusa in vederea actualizarii informatiilor din pagini.
Iata ce pune la dispozitia utilizatorilor acest site:
Informatii despre agentia de turism posesoare a site-ului. Aceste informatii se obtin urmind hiperlegatura Home.
Informatii despre destinatiile catre care se organizeaza croaziere. Afisarea destinatiilor se face in ordine alfabetica si este insotita de informatii detaliate si poze. Toate acestea se realizeaza urmind hiperlegatura Destinatii.
Informatii despre companiile navale cu care se organizeaza croazierele, care se obtin urmind hiperlegatura Companii. Pentru fiecare companie se afiseaza numele, informatii detaliate si sigla sa. Numele fiecarei companii reprezinta o hiperlegatura catre o alta pagina in care se afiseaza informatii despre vasele companiei respective, si anume : numele si poza vasului, categoria sa si o descriere a acestuia. Pentru a obtine informatii mai detaliate despre un anume vas, se urmeaza hiperlegatura amplasata pe numele fiecarui vas. Aceste informatii detaliate se refera la :
Lista croazierelor organizate cu vasul respective
Informatii despre tipurile de cabine amplasate pe vas, facilitatile fiecarui tip de cabina, insotita de o poza a acesteia
Informatii de natura statistica pentru vasul selectat ( tonaj, viteza maxima, informatii despre echipaj si ofiteri, numar de restaurante, piscine, lifturi, data la care a fost construit vasul, data la care a fost renovat ultima oara, tara in care este inregistrat, si altele)
Informatii despre zonele publice aflate pe vas, si anume: baruri, casinouri, sali de concert, magazine, si altele.
Informatii despre vacantele tip croaziera organizate de agentia de turism. Pentru a le obtine, utilizatorul este rugat sa selecteze urmatoarele:
destinatia unde doreste sa mearga. Utilizatorului I se afiseaza intr-o lista ascunsa toate destinatiile din baza de date, plus optiunea “toate destinatiile”, daca acest criteriu nu prezinta importanta
luna si anul in care doreste sa calatoreasca, pe care le selecteaza tot dintr-o lista. Si aici exista optiunea “toate datele”, daca acest criteriu nu este important.
compania cu care doreste sa calatoreasca. Se afiseaza numele companiilor din baza de date, plus optiunea “toate companiile”, daca acest criteriu nu este important.
Daca in baza de date exista vacante care sa satisfaca criteriile specificate de utilizator, se trece la afisarea informatiilor despre acestea. Despre fiecare excursie se afiseaza urmatoarele: numele comercial al croazierei, pretul sau in dolari, numele companiei navale, numele si poza vasului cu care se face deplasarea, data la care incepe vacanta, lungimea sa in zile, precum si traseul.
Numele fiecarei vacante este o hiperlegatura catre o pagina cu informatii si mai bogate despre vacanta selectata. In plus, aici se afiseaza o poza a traseului urmat de vas in croaziera, precum si ofertele zilnice.
5. Utilizatorului i se pun la dispozitie intrebarile puse de vizitatorii si clientii acestui site, precum si raspunsurile firmei. Pentru aceasta trebuie urmata hiperlegatura Intrebari.
6. Comentarii – cu ajutorul acestei functiuni utilizatorul poate trimite firmei comentariile, intrebarile, reclamatiile sale. Daca furnizeaza si adresa de e-mail, desi acest lucru nu este obligatoriu, firma poate sa-i furnizeze toate raspunsurile necesare.
Aplicatia are o interfata placuta, cu hiperlegaturi amplasate pe imagini, care isi schimba culoarea atunci cind sunt apelate, cu imagini .gif animate, incadrindu-se in noile tendinte pentru proiectarea de site-uri.
Pentru a obtine aceasta interfata placuta care dispune de un stil uniform, proiectarea site-ului s-a facut cu ajutorul sistemului Net Objects Fusion, instrument eficient in construirea rapida de pagini de Web.
Lucrarea se incadreaza in tendintele actuale in care Internetul ocupa un loc important, si in care paginile de Web construite numai cu ajutorul HTML nu mai satisfac cerintele utilizatorilor, locul lor fiind luat de paginile dinamice care-si extrag continutul dintr-o baza de date.
In realizarea acestor pagini am mers pe directia care utilizeaza ASP, Personal Web Server, iar baza de date este de tip Access la care conexiunea se realizeaza prin ODBC. Alte modalitati, la fel de eficiente sunt:
In cazul in carea baza de date este de dimensiuni mari, sa se utilizeze un alt sistem de baze de date, mai robust, ca de exemplu MS SQL Server.
Accesarea bazei de date, nu prin ODBC, ci prin utilizarea unui sir conexiune
Utilizarea limbajului PHP sub Linux, server Apache si o baza de date de tip MySql.
Cap. 2 Baze de date
2.1 Introducere
La ora actuala, baza de date reprezinta un obiect de studiu bine definit, cu proprietati specifice, de un mare interes practic. In literatura de specialitate exista un numar mare de definitii ale bazei de date. O definitie a bazei de date este urmatoarea: prin baza de date intelegem o colectie de date operationale, conectate logic si care respecta urmatoarele proprietati:
Este exhaustiva
Este neredundanta
Asigura independenta aplicatiilor in raport cu structura datelor
Conexiunea logica a datelor se refera la faptul ca intr-o baza de date se introduc numai acele date care se refera la un fenomen, obiect, proces bine definit, distinct de alte fenomene, obiecte sau procese. Datele dintr-o baza de date nu sint independente unele fata de altele, intre ele pot fi puse in evidenta legaturi logice.
Exhaustivitatea se refera la tendinta de a pastra intr-o baza de date toate datele referitoare la obiectul sau procesul care intereseaza. In multe situatii, aceasta tendinta este in contradictie cu posibilitatile reale, raminind, deci, in sarcina proiectantului bazei de date sa decida care sint datele care trebuie introduse obligatoriu in baza de date. O problema importanta in decizia pastrarii unor date este aceea a accesibilitatii la datele respective.
In general, o baza de date se dezvolta in etape. Pentru fiecare etapa se stabilesc obiective precise si se incarca numai datele care servesc acestor obiective.
O etapa importanta in definirea unei baze de date este stabilirea entitatilor si a legaturilor dintre acestea.
Prin entitate se intelege orice obiect, fenomen sau proces despre care se pastreaza informatii in baza de date. Fiecare entitate trebuie sa fie bine definita in raport cu celelalte entitati ale bazei de date. O entitate este formata din atribute.
Atributul este elementul informational fundamental. Atributele unei entitati se impart in :
Atribute identificator
Atribute descriptor
Atributele identificator sint acele atribute ale caror valori identifica in mod unic o anumita realizare concreta a entitatii.
Atributele descriptor sint acele atribute care pastreaza informatii privind anumite proprietati ale entitatii.
In general, pot exista mai multe atribute identificator. Dintre acestea, proiectantul va alege un singur atribut numit cheie primara a entitatii.
Fiecare atribut are un domeniu de valori. Domeniul de valori al atributelor reprezinta totalitatea valorilor posibile ale atributului. In general, numai o parte a acestor valori se regaseste in inregistrarile bazei de date.
Entitatile unei baze de date sint, conform definitiei, conectate logic prin continutul lor informational. Stabilirea corecta a legaturilor ce exista intre entitati este deosebit de importanta in proiectarea structurii bazei de date. Indiferent de natura lor, legaturile intre entitati au anumite proprietati generale.
Fiecare legatura se caracterizeaza printr-un nume si printr-o semantica. Proprietatile generale ale legaturilor dintre entitati sint:
Legatura este intotdeauna bidirectionala
Se pot defini mai multe legaturi cu semantici diferite intre aceleasi entitati
Se poate defini o legatura intre inregistrarile aceleiasi entitati
Se pot defini legaturi intre mai multe entitati. De obicei, aceste legaturi sint mult mai bogate in informatii decit legaturile intre fiecare dintre entitatile legate
Punerea in evidenta a entitatilor si legaturilor se realizeaza prin analiza amanuntita a tuturor datelor si documentelor privind continutul ipotetic al bazei de date.
Legaturile intre entitati pun de fapt in corespondenta inregistrari ale diverselor entitati. La o singura valoare dintr-o entitate pot sa corespunda una sau mai multe valori ale entitatii cu care este pusa in legatura.
Din acest punct de vedere distingem urmatoarele tipuri de legaturi:
Legaturi 1:1 – in acest caz, fiecare inregistrare a unei entitati este pusa in corespondenta cu cel mult o inregistrare a entitatii cu care este legata
Legaturi 1:m – in acest caz, o inregistrare a unei entitati este pusa in corespondenta cu mai multe inregistrari ale celeilalte entitati
Legaturi m:m – in acest caz, mai multe inregistrari ale unei entitati pot fi puse in legatura cu mai multe inregistrari ale celeilalte entitati care participa la legatura
Tipul legaturilor este un parametru foarte important in stabilirea caracteristicilor bazei de date si in rezolvarea unor probleme practice.
2.2 Baze de date relationale si normalizarea relatiilor
Fiind data o colectie de multimi D1, D2,…Dn ( nu neaparat distincte ) se numeste relatie pe aceste multimi, orice subset R al produsului cartezian D1 *D2*..*Dn.
Multimea D1 se numeste domeniu.
Fiecare relatie este identificata printr-un nume.
Relatia poate fi reprezentata ca un tabel cu valori atomice ( valori ce nu pot fi descompuse fara a se pierde semnificatia valorii ).
Fiecarei multimi Di i=1,n ii corespunde in tabel o coloana numita atribut al relatiei. Fiecare atribut este identificat printr-un nume.
Valoarea n se numeste gradul sau aritatea relatiei R.
O linie a tabelului se numeste tuplu, realizare sau inregistrare.
Numarul inregistrarilor dintr-o relatie reprezinta cardinalul relatiei.
Atributul reprezinta multimea valorilor existente in relatie, la un moment dat, intr-o anumita coloana a tabelului.
Se numeste cheie primara a unei relatii date, un atribut sau grup de atribute ale caror valori identifica in mod unic inregistrarile unei relatii.
In cadrul unei relatii pot exista mai multe atribute sau grupuri de atribute care sa permita identificarea in mod unic a inregistrarilor. Acestea se numesc chei candidat si dintre ele se alege cheia primara. Se numeste domeniu primar acel domeniu pentru care exista un atribut singular cu rol de cheie primara definit pe acest domeniu.
Pentru ca o relatie sa fie corect definita si utilizata, datele continute in inregistrarile relatiei trebuie sa respecte anumite reguli numite restrictii de integritate. Restrictiile de integritate pot fi impartite in trei categorii:
Integritatea cheii – impune ca nici o componenta a cheii primare sa nu fie nula
Integritatea referirii – fie C cheia primara a relatiei R, definita pe domeniul primar D. daca A este un atribut al relatiei R, definit peste acelasi domeniu D, valorile lui A nu pot fi decit valori din setul de valori ale atributului C, sau nedefinite. Atributul A se numeste cheie externa si serveste la stabilirea unor legaturi intre relatii. Intr-o relatie pot exista mai multe chei externe.
Integritatea semantica a datelor – restrictiile din aceasta categorie ( numite si restrictii utilizator ) impuse asupra valorilor unor atribute rezulta din semantica datelor sau natura unor aplicatii.
Unele restrictii au forme mult mai complexe impunind corelarea valorilor din mai multe atribute ale aceleiasi relatii sau din relatii diferite.
In ceea ce priveste normalizarea relatiilor, se spune ca o relatie se afla intr-o forma de normalizare daca satisface un anumit set specificat de restrictii.
Pina in prezent au fost studiate cinci forme normale, notate FN1,..FN5. Fiecare forma este inclusa in forma cu indice inferior, ceea ce inseamna ca fiecare forma se poate obtine din precedenta prin introducerea unor restrictii suplimentare.
Scopul normalizarii relatiilor este eliminarea sistematica a redundantei datelor. In acelasi timp se limina si diverse anomalii legate de folosirea operatiilor elementare de actualizare a datelor ( adaugare, stergere, modificare).
In teoria normalizarii relatiilor exista trei tipuri de dependente :
Dependenta functionala – fiind data o relatie R si doua atribute simple sau compuse X si Y din aceasta relatie, se spune ca atributul X depinde functional de Y, daca si numai daca valori identice ale atributului X implica valori identice ale atributului Y ( X -> Y )
Dependenta multivaloare – fiind data o relatie R cu atributele A,B,C ( simple sau compuse ), se spune ca atributul B depinde multivaloare de atributul A, daca si numai daca multimea valorilor lui B ce corespund unei perechi date <valoare A, valoare C> depinde numai de valoarea lui A si este independenta de valorile lui C sau ale oricarei submultimi ale lui C ( A->>B )
Dependenta jonctiune
Tipul dependentei este o problema de semantica a datelor.
Se spune ca o relatie R este in forma normala 1 (FN1), daca si numai daca toate atributele sale contin valori atomice.
Teoria bazelor de date relationale nu accepta decit relatii in FN1, deci este necesar ca toate tabelele sa fie aduse intr-o forma corespunzatoare.
O relatie R este in forma normala 2 (FN2), daca si numai daca este in FN1 si fiecare atribut al sau este complet dependent de cheia primara.
Orice relatie in FN1 poate fi transformata intr-o colectie echivalenta de relatii in FN2, prin inlocuirea ei cu proiectii ce nu mai contin dependente functionale partiale in raport cu componentele cheii primare. Proiectiile pot sa contina si informatii suplimentare, fata de relatia care le-a generat.
O relatie R este in forma normala 3 (FN3), daca si numai daca este in FN2 si fiecare atribut noncheie nu este dependent tranzitiv de cheia primara.
Orice relatie in FN2 poate fi transformata intr-o colectie echivalenta de relatii in FN3, prin inlocuirea ei cu proiectii ce nu mai contin dependente functionale tranzitive. Proiectiile pot sa contina si informatii suplimentare, fata de relatia care le-a generat.
S-a incercat formularea unei definitii directe pentru FN3 care sa nu utilizeze conceptele de dependenta functionala completa si tranzitiva. Pentru aceasta a fost introdus un concept nou, si anume acela de determinant.
Se numeste determinant, un atribut simplu sau compus de care alte atribute sint complet dependente functional.
Pe baza acestui concept se poate formula o noua definitie pentru FN3 numita si BCNF ( Boyce/Codd Normal Form ).
O relatie R este in BCNF daca si numai daca fiecare determinant este o cheie candidat.
S-a dovedit ca in practica se utilizeaza cu precadere cele trei forme normale prezentate anterior si foarte putin FN4 si FN5.
2.3 Sisteme de gestiune a bazelor de date
2.3.1 Introducere
Un sistem de gestiune a bazelor de date este un sistem de programe care trebuie sa asigure:
Imunitatea programelor aplicative fata de modul de structurare al datelor
Eliminarea redundantei datelor
Timp acceptabil de raspuns la solicitarile tuturor categoriilor de utilizatori.
SGBD-urile au fost introduse in principal in scopul izolarii utilizatorilor intre ei. De asemenea, utilizatorul este indepartat de sistemul de operare ale carui functii sint disponibile doar prin intermediul SGBD-ului. In felul acesta, scade mult complexitatea programelor de aplicatii si creste imunitatea acestora in raport cu modificarile survenite in structura datelor si in tehnicile de acces la date. Toate aceste probleme sint rezolvate de catre SGBD care contine toate datele necesare servirii fiecarui utilizator numai conform necesitatilor acestuia.
Actualizare corecta a datelor in scopul eliminarii inconsistentelor logice este realizata tot de catre SGBD. Acesta manipuleaza o inregistrare globala ce contine datele specifice fiecarui utilizator. Fiecare utilizator primeste insa, o inregistrare ce corespunde necesitatilor sale. Aceasta reduce volumul de memorie utilizata si creste gradul de securitate a informatiei, limitind accesul la diverse date pentru fiecare categorie de utilizatori. Orice modificare efectuata de un utilizator conduce imediat la modificarea corespunzatoare in inregistrarea globala si se transmite foarte usor inregistrarilor specifice celorlalti utilizatori.
La ora actuala, utilizarea SGBD-urilor s-a impus in domeniul exploatarii bazelor de date, datorita numeroaselor avantaje pe care le prezinta, in special pentru utilizatorii neinformaticieni.
2.3.2 Facilitatile mediului de programare Access
Microsoft Access este un SGBD relational, care ofera utilizatorului posibilitatea de a manipula datele in conformitate cu nevoile sale specifice. La una dintre extremele pietei bazelor de date se gasesc produse simple, care pot fi invatate usor, este vorba despre pachete de programe care nu pot realiza mai mult decit operatii uzuale de stocare si cautare. La celalt capat se afla unele dintre cele mai complexe programe, care ruleaza pe mai multe calculatoare, in diverse locatii, pentru acolecta si distribui cantitati uriase de date. De exemplu, societatile bancare internationale utilizeaza baze de date dedicate pentru a urmari in timp real comertul mondial de bunuri si valori si pentru a realiza tranzactii electronice cu fonduri financiare. Microsoft Access este unul dintre cele mai bune sisteme pentru baze de date, disponibile pentru calculatoare personale. Utilizatorii care nu vor sa se implice in proiectarea bazelor de date complexe, pot sa-l foloseasca, preluindu-l pur si simplu din caseta cu aplicatii. Database wizard ( programul ,,vrajitor” pentru baze de date ), aparut odata cu Access 95, pune la dispozitie o interfata simpla pentru a putea incepe imediat. Atunci cind se apeleaza Database wizard si se raspunde la citeva intrebari simple, Access creaza in mod automat tabele, interogari, formulare pentru peste 20 de tipuri uzuale de baze de date.
Sub aspectul exterior simplu al unei aplicatii Access se afla ,,caii putere” ai unei masini de baze de date care poate duce utilizatorul cit de departe permite calculatorul personal pe care ruleaza. Datorita posibilitatilor de programare oferite de Access, un utilizator eficient va realiza cu usurinta operatii complexe, cum ar fi sincronizarea datelor pentru mai multi utilizatori cuplati la retea, verificari de validare complicate, sau scrierea transparenta a unei inregistrari intr-un tabel arhiva, la stergerea acesteia de catre un utilizator. Daca limbajul de programare Visual Basic nu are o anumita particularitate de care are nevoie utilizatorul, ramine posibilitatea de a crea propriile biblioteci legate dinamic ( DLL ), care extind posibilitatile insusi sistemului Windows.
Tabelele bine proiectate pot manipula sute de mii de inregistrari fara un effort prea mare. O retea de 20 de utilizatori care lucreaza simultan cu o baza de date Access functioneaza foarte bine. Daca baza de date este prea mare pentru o retea de calculatoare personale, Access poate asigura interfata cu sistemele de operare cu servere care ruleaza programe ca Oracle sau SQL Server.
Spre deosebire de instrumentele anterioare de baze de date, Microsoft Access stocheaza toate componentele unei baze de date ( tabele, interogari, formulare, rapoarte, macrouri si module ) intr-un singur fisier cu extensia MDB.
Baza de date utilizata de aplicatie este de tip Microsoft Access.
2.4 SQL
2.4.1 Notiuni introductive
SQL a fost conceput ca un limbaj standard de descriere a datelor si acces la informatiile din baze de date, dezvoltindu-se ca o adevarata tehnologie dedicata arhitecturilor client/server.
Utilizat initial de catre firma IBM pentru produsul DB2, limbajul de interogare a bazelor de date relationale SQL ( Structured Query Language ) a devenit la mijlocul deceniului trecut un standard in domeniu. De atunci si pina in prezent au fost dezvoltate mai multe versiuni ale standardului SQL, trei dintre ele apartinind Institutului National American de Standarde ( ANSI ), celelalte fiind concepute de firme de prestigiu ca IBM, Microsoft, Borland. Din pacate, lipsa unui standard unic SQL are drept consecinte cresterea costurilor programelor de gestiune a bazelor de date si ingreuneaza intretinerea arhitecturilor client/server. Primul standard SQL a fost creat in anul 1989 de catre ANSI, fiind cunoscut sub numele de ANSI-SQL ’89 si a fost revizuit in 1992 sub noua denumire ANSI-SQL ’92. Proliferarea intre timp a diferitelor implementari ale limbajului SQL, a determinat formarea consortiului SAG, cu scopul de a concepe un set de standarde SQL, care sa aiba la baza un subset al standardului ANSI-SQL ’89 si in plus sa rezolve problemele legate de implementarea acestora in arhitecturi client/server cum ar fi conectivitatea si interfetele cu utilizatorul ale programelor.
In anul 1992, firma Microsoft, in calitate de membru SAG a lansat pe piata produsul ODBC ( Open Database Conectivity ), un standard API-SQL ce are la baza un proiect de standard si defineste o interfata de programare a aplicatiilor ( API ) pentru accesul la baze de date.
Interfata de programare cunoscuta in domeniu sub initialele API, ofera o cale de comunicare intre programe si bazele de date prin apeluri de functii care substituie instructiunile SQL. Astfel, standardele API se bazeaza pe conectivitate, precum si schimbul de date si mesaje SQL.
SQL este un limbaj complet pentru baze de date, cuprinzind comenzi pentru definirea datelor, actualizare si interogare. Deci, este atit un limbaj pentru definirea datelor (DDL), cit si pentru manipularea datelor (DML). In plus, are facilitati pentru definirea viziunilor, pentru crearea si stergerea indecsilor si pentru incapsularea comenzilor SQL in limbaje de programare ca C sau Pascal.
Comenzile SQL pentru definirea datelor sint CREATE, ALTER si DROP.
Comenzile SQL pentru modificarea datelor sint INSERT, DELETE si UPDATE.
SQL are o singura comanda pentru regasirea datelor din bazele de date, SELECT .
Avind in vedere ca in ASP, accesul la bazele de date de tip Access se realizeaza prin intermediul limbajului SQL, voi prezenta in continuare, sintaxa comenzilor SQL in Microsoft Access.
2.4.2 Comanda SELECT
Comanda SELECT permite returnarea unui set de inregistrari din baza de date. Are urmatoarea sintaxa:
SELECT [predicate] { * | table.* | [table.]field1 [AS alias1]
[,table.]field2 [AS alias2] [, …]]}
FROM tableexpression [, …] [IN externaldatabase]
[WHERE… ]
[GROUP BY… ]
[ORDER BY… ]
Comanda SELECT are urmatoarele parti:
Predicate – poate fi unul dintre urmatoarele predicate: ALL, DISTINCT, DISTINCTROW, or TOP, care se utilizeaza pentru a restrictiona numarul de inregistrari returnate. ( implicit este ALL).
* – specifica selectarea tuturor cimpurilor din tabela sau tabelelor selectate.
table – specifica numele tabelei continind cimpurile din care se selecteaza datele
field1, field2 – reprezinta numele cimpurilor din care dorim regasirea datelor.
alias1, alias2 – reprezinta numele utilizate ca si titluri de coloane in locul numelor coloanelor din tabela
tableexpression – reprezinta numele tabelei sau tabelelor din care se regases datele
externaldatabase – reprezinta numele bazei de date externe, daca tabelele nu sint in cea curenta
Observatii:
Pentru a executa aceasta operatie, motorul de baze de date Microsoft Jet cauta tabela sau tabelele specificate, extrage coloanele alese, selecteaza rindurile care satisfac criteriul si sorteaza sau grupeaza rindurile rezultate in ordinea specificata.
Comanda SELECT nu modifica datele din baza de date.
Daca numele unui cimp apare in mai multe tabele din clauza FROM, el trebuie precedat de numele tabelei si operatorul punct (.).
Clauza WHERE specifica inregistrarile din tabelele ce apar in clauza FROM care vor fi afectate de comanda SELECT. Numai acele inregistari care satisfac criteriul din aceasta clauza vor fi incluse in interogarea rezultat.
Observatii :
Daca nu se specifica clauza WHERE vor fi returnate toate rindurile din tabele. Daca in interogare se specifica mai mult de o tabela si nu specifica clauza WHERE sau JOIN, se efectueaza produsul cartezian al tabelelor, operatie consumatoare de timp.
Clauza ORDER BY permite sortarea inregistrarilor dupa valorile din cimpurile specificate, ascendent sau descendent.
Sintaxa acestei clauze este:
[ORDER BY field1 [ASC | DESC ][, field2 [ASC | DESC ]][, …]]]
Observatii :
Clauza este optionala. Sortarea implicita este ascendenta, altfel trebuie specificat DESC. In aceasta clauza nu pot apare cimpuri de tip OLE sau Memo.
Clauza GROUP BY combina inregistrarile cu valori identice din lista de cimpuri specificate, intr-o singura inregistrare.Daca in comanda SELECT se specifica una dintre functiile agregat ( Sum, Count, Max ), atunci pentru fiecare astfel de inregistrare se creaza apoi o valoare agregat.
Clauza are urmatoarea sintaxa:
[GROUP BY groupfieldlist]
groupfieldlist – reprezinta numele a cel mult 10 cimpuri utilizate pentru gruparea inregistrarilor. Ordinea acestor cimpuri in lista determina nivelele de grupare de la cel mai inalt pina la cel mai de jos
Observatii:
Clauza este optionala. Valorile agregat sint omise daca in comanda SQL nu se specifica nici o functie agregat. Nu se poate face grupare dupa cimpuri de tip Ole sau Memo.
Jonctiunea interna ( INNER JOIN )
Se specifica cu urmatoare sintaxa:
FROM table1 INNER JOIN table2 ON table1.field1
compopr table2.field2
Operatia INNER JOIN are urmatoarele parti:
table1, table2 – reprezinta numele tabelelor din care se combina inregistrarile
field1, field2 – reprezinta numele cimpurilor dupa care se face jonctiunea. Daca ele nu sint numerice, trebuie sa fie de acelasi tip, aceeasi dimensiune, dar nu trebuie sa aiba acelasi nume.
compopr – reprezinta orice operator relational: "=," "<," ">," "<=," ">=," sau "<>."
Observatii:
Acest tip de jonctiune este cel mai utilizat si se poate folosi in orice clauza FROM. Combina inregistrarile din doua tabele, ori de cite ori exista valori care isi corespund in cimpul comun din cele doua tabele.
Nu se poate face jonctiune pe tipuri de date OLE sau Memo.
2.4.3 Comanda INSERT
Permite adaugarea uneia sau mai multor inregistrari intr-o tabela.
Pentru adaugarea unei singure inregistrari se foloseste urmatoarea sintaxa:
INSERT INTO target [(field1[, field2[, …]])]
VALUES (value1[, value2[, …])
Comanda are urmatoarele parti:
target – reprezinta numele tabelei sau interogarii in care se insereaza date
field1, field2 – reprezinta numele cimpurilor pentru care se furnizeaza date
value1, value2 – reprezinta valorile care se insereaza in noua inregistrare. Value1 se insereaza in field1, value2 in field2, s.a.m.d. Valorile se separa prin virgula, iar valorile de tip text se incadreaza intre apostrofuri.
Observatii:
Daca tabela destinatie contine o cheie primara, trebuie ca in cimpul sau cimpurile ce formeaza cheia primara sa se insereze valori unice si nenule.
Daca se omite lista cimpurilor, clauza VALUES trebuie sa includa cite o valoare pentru fiecare cimp din tabela, altfel operatia va esua.
2.4.4 Comanda UPDATE
Permite modificarea valorilor cimpurilor intr-o tabela specificata, pe baza unui criteriu specificat. Are urmatoarea sintaxa:
UPDATE table
SET newvalue
WHERE criteria
Comanda UPDATE are urmatoarele parti:
table – reprezinta numele tabelei ce contine datele ce vor fi modificate.
newvalue – este expresia care determina valoarea ce va fi memorata intr-un anume cimp din inregistrarile care se actualizeaza.
criteria – este expresia care determina inregistrarile ce vor fi actualizate
2.4.5 Comanda DELETE
Permite stergerea inregistrarilor din una sau mai multe tabele precizate in clauza FROM, inregistrari care satisfac clauza WHERE. Are urmatoarea sintaxa:
DELETE [table.*]
FROM table
WHERE criteria
Comanda DELETE are urmatoarele parti:
table – numele tabelei din care se vor sterge inregistrarile
criteria – expresia care determina inregistrarile de sters
Observatii:
Comanda Delete este foarte utila atunci cind se doreste stergerea unui numar mare de inregistrari.
Se poate utiliza si la stergerea inregistrarilor din tabele care se afla intr-o legatura 1:m. Operatia de stergere in cascada determina stergerea inregistrarilor aflate in tabela din partea m a legaturii, atunci cind se sterge inregistrarea care le corespunde in tabela din partea unu a legaturii.
Operatia sterge intreaga inregistrare, si nu poate fi anulata, ca si operatia UPDATE.
Cap.3 HTML
3.1 Retele de calculatoare si Internet
Retelele se formeaza atunci cind calculatoarele sint conectate unele la altele astfel incit sa poata comunica. Aceste calculatoare nu trebuie sa fie apropiate intre ele. De fapt, ele pot sa se afle in parti diferite ale cladirii sau ale lumii.
Daca reteaua este compusa din calculatoare aflate in acelasi loc, este numita retea locala (LAN). Acestea sint calculatoare care, de obicei, se afla in acelasi departament, sectie de lucru sau sediu de firma.
In cazul in care calculatoarele sint raspindite pe o arie mult mai mare, reteaua este numita retea de mari dimensiuni (WAN). Aceste retele pot fi compuse din calculatoare aflate in orase, tari sau chiar continente diferite. In linii mari, singura diferenta intre o LAN si o WAN este suprafata geografica acoperita de retea.
Retelele sint folosite in multe domenii, inclusiv comert, educatie, cercetare. Ele ofera o gama larga de avantaje pentru utilizatorii calculatoarelor, printre care:
Comunicatie – se pot folosi programe pentru acomunica electronic intre calculatoarele din retea. Aceasta comunicatie, cunoscuta ca e-mail, permite comunicarea imediata pe distante mari.
Date comune – este vorba despre date centralizate, atunci cind, in urma actualizarii datelor de catre o persoana in retea, acestea sint accesibile tuturor, imediat.
Resurse partajate – sistemele conectate la retea pot folosi in comun imprimante, unitati de disc fix, fisiere si practic orice dispozitiv imaginabail.
Tehnologiile folosite in prezent in retea pot varia enorm. Sistemele de operare folosite depind de tipul calculatoarelor care alcatuiesc reteaua. In ceea ce priveste reteaua Internet, tipul de sistem de operare folosit nu va conta prea mult, practic orice tip de retea poate fi atasat la Internet.
Internet a fost descrisa ca ,,o colectie larga de retele legate” sau ca o ,,retea de retele”. Amindoua descrierile sint exacte, intr-un fel, dar amindoua sint insuficiente pentru a arata complet ce anume este Internet in realitate. Aceasta din cauza ca este greu sa descrii reteaua Internet, persoane diferite o vad sub aspecte diferite.
Daca se descrie Internet-ul unui grup de persoane cu formare si interese in domeniul educational, se poate prezenta ca cel mai mare, complet si complex instrument de invatare din lume. Prin Internet se pot gasi resurse de cunostinte care permi studierea oricarei discipline. In plus, se poate comunica rapid si eficient cu alte persoane interesate in aceeasi disciplina. Profesori, studenti, educatori pot sa-si impartaseasca ideile imediat, in ciuda distantelor foarte mari.
Pentru conducatorii industriei si comertului, Internet reprezinta accesul la o comunitate foarte educata si cu perspective, care are venituri mai mari decit media. Chiar daca cu membrii acestei comunitati nu se pot face direct afaceri, ei pot oferi informatii despre cum gindesc, ce fac in timpul liber, cum vad viitorul. Toate acestea pot avea o influenta directa asupra produselor si planurilor de marketing.
In toate aceste descrieri este o tema care se repeta – comunitatea Internet si instrumentul care este Internet. Acesti doi termeni sint cei mai potriviti pentru a descrie ce reprezinta Internet. Este un nou mod de a vedea o comunitate, o comunitate vasta si larg dispersata, cu multi membri. Fiecare membru poate cauta sa atinga diferite scopuri prin diferite mijloace, dar fiecare foloseste instrumentele oferite de Internet pentru a usura cresterea si dezvoltarea lor.
Nu exista o autoritate centrala sau un organism guvernamental responsabil pentru retea in ansamblu. In schimb, aceasta comunitate de retele individuale este responsabila in mod colectiv pentru Internet.
3.2 Prezentare generala HTML
Worl Wide Web , abreviat WWW sau pur si simplu Web, este sistemul de distribuire a informatiei multimedia cu cea mai rapida rata de crestere din intreaga industrie informatica. Ceea ce, cu foarte putin timp in urma , parea un domeniu rezervat doar celor descrisi ca fiind ,,computer guru” a penetrat in viata de toate zilele: tot mai multe ziare apar si in versiuni electronice, comertul virtual este la moda, publicatiile si cartile de vizita insereaza tot mai des adrese de posta electronica sau adresele paginilor de Web personale.
WWW si HTML reprezinta numai o parte din mediul cunoscut sub numele de Internet. HTML este primul limbaj care trebuie invatat de catre cineva care doreste sa fie prezent pe Web. Urmeaza apoi JavaScript, dezvoltat de Netscape, care amplifica dinamismul documentelor HTML.
HTML nu este un limbaj de programare. Specificatiile luidefinesc seturi de tag-uri ( marcatori ) si regulile de inserare a acestora pentru descrierea documentelor, astfel incit acestea sa poata fi afisate de niste aplicatii numite navigatori ( browsers ) care pot rula pe orice platforma hard sau soft. Cu ajutorul HTML se realizeaza mai multe lucruri :
Documente independente de platforma
Legaturi la alte documente de pe Internet
Insertii de grafica, sunet si video
Legaturi la resurse aditionale de pe Internet
Interactivitatea intre cititorul documentului si aplicatia dorita de autor
Cea mai importanta caracteristica a WWW si HTML este independenta de platforma. Aceasta inseamna ca publicatiile Web HTML vor putea fi deopotriva afisate pe un PC, Mac sau sistem Unix, cu conditia ca acestea sa fie conectate la Internet.
Limbajul HTML, utilizat pentru crearea de documente si prezentari multimedia pe Internet, este extensibil si versatil. Extensibil in sensul ca este capabil sa implementeze orice nou protocol care va fi adaugat in viitor, si poate integra in documente cele mai avansate medii. Versatil in sensul ca, facind acest lucru, fisierele HTML isi extind functionalitatea dincolo de cea imaginata initial, aceea de hypertext, inserind in documente nu numai legaturi si multimedia ci si programe.
Un document HTML, pe linga faptul ca este complet portabil, lucreaza extrem de simplu. El ,,spune” navigatorului si aplicatiilor lui auxiliare, prin intermediul tag-urilor, ce sa faca cu textul, grafica, sunetul, fisierele video sau cu programele incorporate. Portabilitatea completa este asigurata de faptul ca fisierele HTML sint salvate intr-un format standard ( ASCII ) si seturile de tag-uri sint definite de un comitet international.
Majoritatea tag-urilor HTML sint de forma
<NumeTag> Textul afectat de tag </NumeTag>
si indica navigatorului elemente de structura documentului, formatare, hypertext sau alte elemente ( imagini, fisiere sonore ). Documentele HTML contin doar textul propriu-zis si tag-urile HTML, iar sursa lor poate fi usor vazuta din orice navigator.
HTML este preferat pentru realizarea publicatiilor pe Web datorita simplitatii sale, pentru ca permite formatarea textului ASCII cu tag-uri in format ASCII, de unde rezulta o compresie buna, suport pentru legaturi hypertext si usurinta in a scrie navigatoare pentru vizualizarea documentelor.
3.3 Tag-uri HTML
Structura generala a unui document HTML este urmatoarea:
<HTML>
<HEAD>
<TITLE>Titlul documentului</TITLE>
…alte declaratii/informatii despre document…
</HEAD>
<BODY>
..textul documentului propriu-zis…
</BODY>
</HTML>
Tag-urile HTML folosite in aplicatie :
Specificatiile HTML includ formularele (forms) care permit integrarea in document a cimpurilor text, butoanelor radio, casutelor de selectie, listelor de selectie si a cimpurilor de editare. Interactivitatea se bazeaza pe faptul ca acestea pot fi utilizate pentru stringerea de informatie necesara unei aplicatii aflata in spatele documentului, care hotaraste ce anume va fi oferit clientului.
Sintaxa:
<FORM ACTION=”actiune” METHOD=”metoda”>
………
</FORM>
Exista si alte atribute posibile pentru elementul FORM, dar cele mai importante sint ACTION si METHOD.
Valorile lui ACTION specifica natura actiunii care va avea loc printr-un program care va fi executata de serverul care este gazda pentru document. Acest program va trebui sa ia datele din formular si sa le prelucreze.
METHOD specifica metoda utilizata de server pentru a trimite datele programului specificat in ACTION.
METHOD poate lua doua valori : get si post. Cind metoda este post, datele formularului sint transmise programului care le proceseaza ca o cerere HTTP POST cu datele formularului incluse corpul formularului.
Crearea controalelor de baza ale unu formular se pot face cu elemente ca INPUT, BUTTON, TEXTAREA.
Elementul INPUT este cel mai frecvent intilnit, deoarece creaza mai multe tipuri de controale care permit utilizatorului sa aleaga. Tag-ul INPUT este nevid.
Controalele de baza pe care le poate utiliza un autor in cadrul formularelor interactive sint create cu elementul INPUT, individualizarea lor facindu-se prin intermediul atributului sau TYPE. Parametrul TYPE specifica ce fel de INPUT se asteapta de la utilizator si poate primi valori ca:
Text –permite utilizatorului sa introduca un rind de text
Password – permite utilizatorului sa introduca un rind de text, dar caracterele tastate de utilizator au ca ecou asterics menit sa ascunda textul introdus
Submit – afiseaza un buton, care daca este apasat, transmite formularul catre programul specificat in ACTION
Hidden – creaza un control ascuns
Sintaxa pentru elementul INPUT este:
<INPUT>
Citeva dintre atributele utilizate:
TYPE=[text|password|checkbox|radio|submit|reset|file|hidden|image|button]
Parametrul NAME este cerut de toate elementele INPUT, cu exceptia elementelor SUBMIT si RESET si reprezinta numele care se va asocia elementului.
VALUE reprezinta valoarea introdusa.
SIZE reprezinta un numar sugerat de caractere pentru introducerea unui text
MAXLENGTH reprezinta numarul maxim de caractere pentru introducerea unui text)
READONLY previne modificari asupra elementului.
Elementul de tip text (TYPE=TEXT) are sintaxa:
<INPUT TYPE=”text” NAME=”nume” VALUE=”valoare” SIZE=xx MAXLENGTH=yy>
Cimpul text este utilizat frecvent ca forma de intrare a datelor, pentru culegerea unor informatii cum ar fi nume, adrese, numere de telefon,s.a.m.d. Parametrul VALUE este egal cu textul implicit pe care il dorim introdus in rindul text. Daca lipseste, rindul va fi initial blank.
Butonul SUBMIT (TYPE=SUBMIT) are sintaxa:
<INPUT TYPE=”submit” NAME=”nume” VALUE=”Trimite”>
Elementul de acest tip este utilizat pentru crearea butonului care trimite formularul serverului. La apasarea butonului, formularul si continutul lui curent sint trimise serverului specificat de atributul ACTION al elementului FORM, utilizind procedeul specificat cu METHOD. Cimpurile necompletate si butoanele neselectate nu vor fi transmise. Parametrul VALUE da valoarea care va fi inscrisa pe buton. Daca apare si atributul NAME, browserul va trimite o pereche name/value pentru butonul Submit, aceasta permitind existenta mai multor butoane SUBMIT intr-un formular, fiecare cu propria sa actiune.
Elementul ascuns (TYPE=HIDDEN) are sintaxa:
<INPUT TYPE=”hidden” NAME=”nume” VALUE=”valoare”>
Elementele de tip ascuns permit inserarea in formular a unor elemente care nu sint vizibile. In aplicatie sint utilizate pentru validarea datelor introduse de utilizator.
Elementul SELECT, avind sintaxa :
<SELECT>…</SELECT>
creaza un control pentru selectia dintr-o lista de optiuni. El este de obicei utilizat in cadrul lui FORM, dar HTML 4.0 permite folosirea lui in orice element block-level sau inline (cu exceptia lui BUTTON).
Atribute posibile:
NAME reprezinta numele care se va asocia elementului
MULTIPLE permite selectii multiple
SIZE reprezinta numarul de optiuni vizibile
Elementul OPTION, avind sintaxa :
<OPTION>…</OPTION>
defineste o optiune dintr-o lista de optiuni. Valoarea acestei optiuni va fi transmisa la Submit si este specificata cu atributul VALUE.
Atribute posibile:
VALUE reprezinta valoarea optiunii
SELECTED reprezinta optiunea selectata initial
DISABLED reprezinta optiune dezactivata
Imaginile inserate in documentele HTML imbogatesc paginile web nu numai sub raport decorativ. Inserarea imaginilor in text se poate face cu tag-ul <IMG>.
Atribute posibile:
SRC reprezinta locatia imaginii
ALT reprezinta textul alternativ
WIDTH este latimea imaginii
LENGTH este inaltimea imaginii
Atributul SRC indica URL-ul imaginii care va fi inserata in document.
In aplicatie au fost folosite tabelele care permit afisarea informatiei in doua dimensiuni, nu liniar, adica informatia este mai sugestiva. Definirea tabelelor se face cu tag-ul <TABLE>, avind sintaxa:
<TABLE>…</TABLE>
Definirea rindurilor in tabele se face cu tag-ul <TR>, iar definirea coloanelor cu tag-ul <TD>.
Adevarata putere a limbajului HTML consta in capacitatea sa de a include in documentele HTML a unor legaturi (link-uri) catre alte documente de pe Web. Legaturile transforma documentele simple afisate pe ecran intr-o ,,biblioteca universala” in care materialele pe care dorim sa le consultam vin la cititor aproape instantaneu, iar documentele statice devin astfel documente interactive.
Legatura (hyperlegatura) este constructia de baza, putind fi definita ca o conexiune de la o resursa Web la alta. Chiar daca pare un concept simplu, ea a asigurat succesul Web-ului.
O legatura are doua capete, numite uneori si ancore si o directie. Legatura porneste de la ancora sursa si indica catre ancora destinatie, care poate fi orice resursa Web.
Actiunea implicita asociata cu o legatura este aducerea (incarcarea) in browser a resursei catre care indica legatura. Acest comportament este obtinut de obicei prin selectarea legaturii.
Sintaxa:
<A>…</A>
Atribute posibile:
HREF reprezinta referinta hypertext
NAME reprezinta destinatia
TYPE reprezinta tipul continutului destinatiei
Atributul HREF ( Hypertext Reference ) este utilizat pentru specificarea URI-ului documentului tinta. Este de fapt modul de localizare a documentului care va fi adus la selectarea textului activ. Atributul suplimentar TYPE poate fi folosit pentru a indica tipul resursei catre care se indica.
Cap.4 Active Server Pages
4.1 Prezentare generala
Microsoft Active Server Pages ( ASP ) este un mediu scriptic utilizat pentru a crea si executa aplicatii dinamice, interactive pe servere Web. Cu ajutorul ASP, se pot combina pagini HTML, comenzi scriptice si componente ActivX pentru a crea pagini Web interactive sau aplicatii puternice pe Web. Aplicatiile ASP sint usor de dezvoltat si modificat.
Prin script intelem un tip de program care consta dintr-un set de instructiuni pentru o aplicatie. Un scrip poate fi inclus intr-o pagina Web.
Pentru autorii de pagini HTML, scripturile ASP reprezinta o modalitate usoara de a incepe crearea de pagini interactive. Astfel, in locul colectarii de informatii dintr-o forma HTML cu ajutorul aplicatiilor CGI ( Common Gateway Interface ) scrise intr-un limbaj de programare, ASP ofera alternativa colectarii si analizarii datelor dintr-o forma prin utilizarea unor instructiuni simple care se introduc direct in documentele HTML. Deci, prin utilizarea ASP, nu mai este necesara invatarea unui limbaj de programare si compilarea separata a programelor in vederea crearii de pagini interactive.
Cu ajutorul ASP se pot crea scripturi complexe, se pot utiliza cu usurinta componente ActiveX in vederea executarii unor sarcini mai dificile, ca de exemplu conectarea la o baza de date in care sa se memoreze informatii si din care sa se regaseasca informatii.
Daca utilizatorul cunoaste deja un limbaj scriptic, ca de exemplu VBScript, JavaScript sau Pearl, poate trece foarte usor la utilizarea ASP. In paginile ASP se poate utiliza orice limbaj scriptic pentru care s-a instalat un motor scriptic care satisface standardul ActiveX Scripting. ASP dispune de astfel de motoare scriptice pentru VBScript, si Microsoft Jscript.
Un motor scriptic este un program care interpreteaza si executa scripturi.
Daca utilizatorul cunoaste deja un limbaj de programare, ca de exemplu Visual Basic, acesta va gasi ca ASP este o modalitate flexibila de a crea rapid aplicatii pe Web. Prin adaugarea de comenzi script in paginile HTML, se poate crea aplicatiei o interfata HTML.
Utilizarea ASP la crearea aplicatiilor pe Web aduce importante beneficii, permitind furnizarea de aplicatii interactive in locul afisarii unui simplu continut, care nu are in spate o baza de date. Astfel, o agentie de voiaj poate, in afara de publicarea programului de zboruri, sa permita utilizatorului sa verifice zborurile, sa le compare si sa faca rezervari la un anume zbor.
Microsoft Transaction Server ( MTS ) care este inclus in pachetul Windows NT reduce complexitatea si costul construirii de aplicatii pe server.
Modelul ASP
Executia unui script ASP incepe atunci cind browser-ul cere un fisier cu extensia asp la serverul de Web. Serverul de Web apeleaza apoi ASP, care citeste fisierul cerut de la inceput catre sfirsit, executa comenzile script si transmite catre browser o pagina de web.
Datorita faptului ca scripturile se executa pe server si nu la client, serverul de Web este cel care face toata munca necesara la generarea paginilor de Web pe care utilizatorul le trimite browser-ului. Deci, serverul de Web executa procesarea scripturilor, transmitind catre browser pagini HTML standard. Comenzile script care creaza paginile nu pot fi vazute de catre utilizatorii aplicatiei, pentru ca numai rezultatul acestor scripturi sint returnate browser-ului.
4.2 Accesarea bazelor de date
ActiveX Data Objects ( ADO ) reprezinta o tehnologie extensibila si usor de utilizat care permite accesul la baze de date din cadrul paginilor de Web. ADO se poate utiliza pentru a scrie scripturi compacte si scalabile pentru conectarea la baze de date prin intermediul ODBC ( Open Database Connectivity ).
Inainte de crearea unor scripturi pentru accesul la o baza de date este necesar sa furnizam tehnologiei ADO o cale de localizare, identificare si comunicare cu baza de date. Driverele pentru baze de date ( programele care transmit informatiile din aplicatia pe Web la baza de date ) utilizeaza un DSN ( Data Source Name ) pentru localizarea si identificarea unei anumite baze de date prin intermediul ODBC. In mod obisnuit, DSN contine informatii despre configurarea bazei de date, securitate, localizarea bazei de date.
Cu ajutorul ODBC utilizatorul poate alege tipul de DSN pe care doreste sa-l creeze, si anume: User, System sau File. Un DSN de tip User sau System rezida intr-un registru al Windows NT. Un DSN de tip System permite tuturor utilizatorilor conectati la un anume server sa acceseze baza de date, in timp ce un DSN de tip User limiteaza accesul la un utilizator specific care are un grad de securitate corespunzator. Un DSN de tip File care are forma unui fisier text, permite accesul mai multor utilizatori la baza de date si se poate transfera usor de pe un server pe altul prin copierea fisierului DSN.
Pentru a crea un fisier DSN de tip System pentru o baza de date de tip MS Access se procedeaza astfel:
Din meniul Start din Windows se alege optiunea Settings apoi Control Panel
2. Dublu-click pe icoana ODBC ceea ce conduce la afisarea ferestrei ODBC Data Source Administrator
Se selecteaza optiunea System DSN
Se selecteaza butonul Add pentru a alege driverul bazei de date si apoi se apasa butonul Finish
Se introduce un nume pentru fisierul DSN in caseta Data Source Name
Prin apasarea butonului Select se alege o baza de date de tip Access ( *.mdb ) existenta si apoi se apasa butonul OK.
Conectarea la o baza de date
Primul pas in vederea accesarii informatiilor dintr-o baza de date este stabilirea unei conexiuni cu sursa datelor. In acest scop, ADO furnizeaza obiectul Connection care permite stabilirea si administrarea conexiunilor intre aplicatie si baza de date ODBC. Obiectul Connection are o mare varietate de proprietati si metode care permit deschiderea si inchiderea conexiunilor la baza de date, transmiterea interogarilor pentru selectarea si actualizarea datelor.
Pentru a stabili o conexiune la baza de date trebuie creata o instanta a obiectului Connection. Scriptul urmator creaza o instanta a obiectului Connection si apoi deschide conexiunea :
<%
'mydsn este un sir care specifica numele sursei datelor, numele de 'utilizator si parola stabilite anterior in ODBC
mydsn="DSN=lucrare;uid=Miha;pwd=Miha"
' se creaza o instanta a obiectului Connection
Set cn=Server.CreateObject ("ADODB.Connection")
'se deschide conexiunea
cn.Open mydsn
%>
Obiectul Server furnizeaza accesul la metodele si proprietatile de pe server. Multe dintre aceste metode si proprietati servesc ca si functii utilitare.
Sintaxa este :
Server. proprietate | metoda
Metodele sale sint : CreateObject, HTMLEncode, MapPath si URLEncode, iar proprietatea sa este ScriptTimeout. In continuare se va descrie metoda CreateObject care a fost folosita in aplicatie.
Metoda CreateObject creaza o instanta a unei componente server. Sintaxa este :
Server.CreateObject ( progID)
Parametrul progID specifica tipul de obiect care se creaza.
Implicit, obiectele create cu aceasta metoda au ca scop pagina, ceea ce inseamna ca sint distruse automat de catre server atunci cind acesta termina de procesat pagina ASP curenta.
Un obiect se mai poate distruge fie prin setarea variabilei la Nothing, fie prin setarea ei la o noua valoare.
Nu se poate crea o instanta a unui obiect avind acelasi nume ca si un obiect bult-in. De exemplu,
<% Set Response = Server.CreateObject ("Response") %> va genera eroare.
Executarea interogarilor cu ajutorul obiectului Connection
Dupa deschiderea unei conexiuni cu ajutorul metodei Open a obiectului Connection, se poate utiliza metoda Execute a aceluiasi obiect pentru a transmite interogari SQL catre baza de date.Scriptul urmator utilizeaza metoda Execute a obiectului Connection pentru a transmite bazei de date o comanda SQL Update, care insereaza date intr-o anume tabela.
<%
'mydsn este un sir care specifica numele sursei datelor, numele de 'utilizator si parola stabilite anterior in ODBC
mydsn="DSN=lucrare;uid=Miha;pwd=Miha"
' se creaza o instanta a obiectului Connection
Set cn=Server.CreateObject ("ADODB.Connection")
'se deschide conexiunea
cn.Open mydsn
' se defineste comanda SQL
strSQL="INSERT INTO Clienti ( Nume, Prenume ) Values ('popescu', 'Ion')"
' se utilizeaza metoda Execute pentru a transmite aceasta comanda 'SQL la baza de date
cn.Execute (strSQL)
%>
Utilizarea obiectului Recordset pentru manipularea rezultatelor
Desi obiectul Connection simplifica sarcina de conectare la baza de date si de transmitere a interogarilor, are totusi anumite limitari. De exemplu, nu se pot crea scripturi cu ajutorul obiectului Connection care sa regaseasca si sa afiseze informatii din baza de date.
Pentru regasirea datelor, examinarea rezultatelor si efectuarea schimbarilor in baza de date, tehnologia ADO furnizeaza obiectul Recordset. Asa cum ii indica si numele, obiectul Recordset poate fi utilizat pentru regasirea si afisarea unui set de rinduri sau inregistrari din baza de date. Obiectul Recordset memoreaza pozitia fiecarei inregistrari returnate de interogare.
Aplicatiile pe baze de date utilizeaza obiectul Connection pentru a stabili o conexiune cu baza de date si obiectul Recordset pentru a manipula datele returnate. De exemplu, urmatorul script utilizeaza obiectul Recordset pentru a executa o comanda Select.
<%
'mydsn este un sir care specifica numele sursei datelor, numele de 'utilizator si parola stabilite anterior in ODBC
mydsn="DSN=lucrare;uid=Miha;pwd=Miha"
' se creaza o instanta a obiectului Connection
Set cn=Server.CreateObject ("ADODB.Connection")
Cn.Open mydsn
' se creaza o instanta a obiectului Recordset
Set rsClienti=Server.CreateObject ("ADODB.Recordset")
' se defineste comanda SQL
strSQL=" SELECT * FROM Clienti "
' se deschide un set de inregistrari cu ajutorul metodei Open
rsClienti.Open strSQL, cn
' se parcurge setul de inregistrari si se afiseaza rezultatele
' pozitia inregistrarii se incrementeaza cu ajutorul metodei MoveNext
Set obj1=rsClienti("Nume")
Set obj2=rsClienti("Prenume")
Do Until rsClienti.EOF
Response.Write obj1 & " " & obj2 & "<BR>"
RsClienti.MoveNext
Loop
%>
Inchiderea conexiunilor
Implicit, o conexiune se termina atunci cind se incheie executia scriptului. Totusi, o inchidere explicita a conexiunii in cadrul scriptului in momentul in care nu mai este necesara are ca urmare reducerea cererii catre serverul de baze de date si face conexiunea diponibila altor utilizatori.
Pentru a incheia in mod explicit o conexiune intre obiectul Connection si baza de date se utilizeaza metoda Close a obiectului Connection.
In execmplul urmator se deschide si se inchide o conexiune:
<%
mydsn="DSN=lucrare;uid=Miha;pwd=Miha"
Set cn=Server.CreateObject ("ADODB.Connection")
Cn.Open mydsn
Cn.Close
%>
4.3 Obiectul Response
Obiectul Response se poate folosi pentru a trimite date catre client.
Sintaxa este :
Response.colectie | proprietate|metoda
Singura colectie care poate fi utilizata este Cookies si permite setarea valorilor pentru cookies.
Proprietatile obiectului Response sint : Buffer, CacheControl, Charset, ContentType, Expires, ExpiresAbsolute, IsClientConnected, Pics si Status.
Metodele obiectului Response sint : AddHeader, AppendToLog, BinaryWrite, Clear, End, Flush, Redirect si Write.
Metoda Write permite trimiterea la client a unei date specificate . Sintaxa utilizata este :
Response.Write variant
variant este data care se scrie. Acest parametru poate fi caracter, sir sau intreg.
4.4 Obiectul Request
Obiectul Request permite regasirea valorilor pe care browserul clientului le transmite serverului in timpul unei cereri HTTP.
Sintaxa este :
Request [.colectie | proprietate|metoda] (variabila)
Colectiile care pot fi utilizate sint : ClientCertificate, Cookies, Form, QueryString si ServerVariables.
Singura proprietate a obiectului Request este TotalBytes, iar singura metoda este BinaryRead.
Parametrul variabila este un sir care specifica articolul care se regaseste dintr-o colectie, sau care va fi utilizat ca intrare pentru o metoda sau proprietate.
Colectia Form
Colectia Form permite regasirea valorilor din elementele formei puse intr-o cerere HTTP de catre o forma cu ajutorul metodei POST.
Sintaxa este :
Request.Form (element) [(index)|.Count ]
Parametrul element reprezinta numele elementului de pe forma din care colectia isi regaseste valorile.
Parametrul index reprezinta un parametru optional care permite accesarea uneia dintre mai multe valori ale unui parametru. El poate lua valori intre 1 si Request.Form ( parametru ).Count.
In exemplul urmator se creaza o forma in care utilizatorul trebuie sa completeze doua cimpuri, si anume : cod si nume. In momentul in care se apasa butonul "Cauta" aceste valori sint trimise catre programul Cauta.asp.
<FORM ACTION="Cauta.asp" METHOD="post">
<P> Cod : <INPUT NAME="COD" SIZE="50"></TD>
<P><TD>Nume:<INPUT NAME="Nume" SIZE="50"></TD>
<TD><INPUT TYPE="submit" value="Cauta"></TD></TR>
</FORM>
In programul Cauta.asp trebuie utilizat scriptul urmator, care permite regasirea valorilor trimise de catre forma de mai sus. Cele doua valori sint memorate in variabilele acod_produs si aden_produs.
<%
acod_produs=request.form("cod")
aden_produs=request.form("nume")
%>
Colectia QueryString
Colectia QueryString permite regasirea valorilor variabilelor dintr-un sir interogare HTTP. Un sir interogare HTTP este specificat de valorile care urmeaza semnului ?. Exista mai multe procese care genereaza un sir interogare. De exemplu, tagul A HREF
<A HREF ="exemplu?sir=acesta este un sir"> sir exemplu</A>
genereaza o variabila cu numele sir care are valoarea "acesta este un sir". Sirurile interogare sint generate si prin trimiterea unei forme, sau de catre utilizator prin tastarea unei interogari in caseta de adrese a browser-ului.
Sintaxa este :
Request.QueryString ( varibila ) [ (index)|.Count ]
Parametrul variabila specifica numele variabilei care trebuie regasita in sirul interogare.
Parametrul index reprezinta un parametru optional care permite accesarea uneia dintre mai multe valori ale unui parametru. El poate lua valori intre 1 si Request.QueryString ( variabila ).Count.
Exemplu :
<A HREF ="detaliu.asp?nume=popa&virsta=20"> Nume si virsta</A>
Programului detaliu.asp i se transmite urmatorul sir interogare: nume=popa&virsta=20
Colectia QueryString va contine doi membri, adica nume si virsta.
Regasirea valorilor celor doi membri se face astfel :
<%
Vnume=request.QueryString("nume")
Vvirsta=request.QueryString("virsta")
In final, cele doua variabile, vnume si vvirsta vor contine valorile "popa" si "20".
4.5 Obiectul Session
Obiectul Session se poate utiliza pentru a memora informatiile necesare intr-o sesiune particulara a unui utilizator. Variabilele memorate in acest obiect nu se pierd atunci cind utilizatorul trece de la o pagina la alta a aplicatiei, deci ele se pastreaza pe intreaga sesiune a utilizatorului.
Serverul de Web creaza in mod automat un obiect Session atunci cind o pagina Web a aplicatiei este ceruta de catre un utilizator, care nu are inca o sesiune. Serverul distruge obiectul Session atunci cind sesiunea expira sau este abandonata.
Sintaxa:
Session.colectie|proprietate|metoda
Colectiile acestui obiect contin articolele adaugate sesiuni cu ajutorul comenzilor scriptice.
Proprietatile acestui obiect sunt:
CodePage ( codul paginii care va fi utilizat pentru maparea simbolurilor)
LCID (identificator local)
SessionId ( returneaza identificatorul sesiunii pentru utilizator)
Timeout ( Perioada de timeout a sesiunii, in minute )
Metodele acestui obiect:
– Abandon ( distruge obiectul Session si ii elibereaza resursele)
Cap.5 Prezentarea aplicatiei
5.1 Structura bazei de date
Relatiile care rezulta in modelul relational si legaturile care se stabilesc intre relatii sint prezentate in continuare.
Tabela Home contine urmatoarele cimpuri:
id ( AutoNumber ) este cheie primara
titlu ( Text )
continut (Memo)
Informatiile din aceasta tabela vor fi afisate in pagina apelata pe hiperlegatura Home.
Tabela Destinatii memoreaza informatii despre destinatiile catre care se organizeaza croaziere:
– id_destinatie ( AutoNumber )
destinatie ( Text )
descriere (Memo)
cale_poza (Text)
Tabela Companii contine urmatoarele informatii despre companiile maritime care organizeaza croaziere:
– id_companie (AutoNumber ) este cheia primara
den_companie (Text)
informatii (Memo)
cale_poza (Text)
Tabela Vase memoreaza informatii despre vasele fiecarei companii, grupate cu ajutorul cimpurilor:
id_vas (AutoNumber)
den_vas (Text)
id_companie (Number) este identificatorul unic al companiei care detine vasul, este deci cheie externa
informatii (memo)
cale_poza_vas (Text)
categorie (Text)
inregistrata_in (Text) memoreaza tara in care este inregistrata nava
data_construirii (Date/Time)
data_renovarii (Date/Time)
capacitate (Text)
nationalitate_ofiteri (Text)
echipaj (Text) memoreaza numarul si nationalitatea membrilor echipajului (Text)
tonaj (Text)
viteza_maxima (Text)
lungime (Text)
nr_punti (Number)
nr_camere_interioare (Number)
nr_camere_exterioare (Number)
nr_restaurante (Number)
nr_piscine (Number)
nr_lifturi (Number)
reastaurante_nefumatori (Yes/No)
Intre tabelele Companii si Vase exista o legatura 1:m.
Tabela Vacante memoreaza informatii despre vacantele tip croaziera organizate de firma de turism:
id_vacanta (AutoNumber) cheie primara
nume_commercial (Text)
id_vas (Number) reprezinta identificatorul unic al vasului cu care se face croaziera
informatii (Memo) memoreaza detalii despre croaziera
id_destinatie (Number) reprezinta identificatorul unic al destinatiei croazierei
traseu (Memo)
cale_poza_traseu (Text)
Intre tabelele Vacante si Vase , ca si intre Vacante si Destinatii exista o legatura 1:m.
6. Tabela Planificari memoreaza informatii despre datele la care se organizeaza excursia si pretul ei. Am avut in vedere premisa ca aceeasi croaziera poate avea loc la date diferite si prêt diferit . Intre tabelele Vacante si Planificari exista o legatura 1:m.
id (AutoNumber) est cheie primara
id_vacanta (Number) este identificatorul unic al vacantei pentru care se face planificarea
data_inceput (Date/Time) a vacantei
lungime (Number ) reprezinta lungimea in zile a croazierei
prêt (Number)
Tabela Oferte memoreaza pentru fiecare croaziera informatii legate de programul zilnic al fiecarei croaziere:
id (AutoNumber) este cheie primara
id_vacanta (Number) este identificatorul unic al vacantei pentru care memoram ofertele
data (Date/Time)
oferta (Text)
Intre tabelele Vacante si Oferte exista o legatura 1:m.
Tabela Cabine memoreaza informatii despre cabinele existent pe un vas, si anume:
id ( Autonumber) – cheie primara
id_vas (Number) reprezinta identificatorul unic al vasului pe care se afla cabina, este deci cheie externa
categorie ( Text)
informatii (Memo) memoreaza o descriere a facilitatilor cabinei
cale_poza (Text)
Intre tabelele Vacante si Cabine exista o legatura 1:m.
Tabela Zone_publice memoreaza informatii despre zonele publice pe care le poate gasi turistul pe un vas ( restaurante, baruri, magazine, biblioteci, casinouri,etc):
id ( Autonumber) – cheie primara
id_vas (Number) reprezinta identificatorul unic al vasului pe care se afla zona publica, este deci cheie externa
facilitate ( Text)
descriere (Text) memoreaza o descriere a zonei publice
Intre tabelele Vacante si Zone_publice exista o legatura 1:m.
Tabela FAQ memoreaza intrebarile adresate firmei de turism de catre clienti, cu ajutorul urmatoarelor cimpuri:
Id (Autonumber) este cheie primara
Intrebare (Text)
Raspuns (memo)
Tabela Comentarii memoreaza mesajele de la diversi clienti:
– Id ( Autonumber) este cheie primara
Nume (Text)
Companie (Text)
Email (Text)
Subiect (Text)
Mesaj (Memo)
Legaturile intre tabele apar in figura de mai jos:
Baza de date este de tip Microsoft Access, si a fost declarata ca sursa a datelor sub numele vacante.
5.2 Interfata grafica
Paginile Web ce constituie aplicatia sint prezentate in continuare.
5.3 Descrierea programelor
Prima pagina a aplicatiei se apeleaza cu ajutorul programului index.asp. Aceasta prima pagina afiseaza informatii despre firma de turism si legaturile catre celelalte parti ale aplicatiei, adica:
Home
Destinatii
Companii
Vacante
Intrebari
Comentarii
Legaturile catre aceste parti ale aplicatiei se fac cu ajutorul tag-ului <A HREF>…</A> si sunt amplasate intr-un tabel avind identificatorul “VerticalNavigationBar2”.
<TABLE id="VerticalNavigationBar2" BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH=103 >
<TR VALIGN="top" ALIGN="left">
<TD WIDTH=103 HEIGHT=102><A HREF="./index.asp"><IMG id="NavigationButton19" HEIGHT=102 WIDTH=103 SRC="imagini/Home_SurfsUpButtonOn.gif" BORDER=0 ALT=" Home " ></A></TD>
</TR>
<TR VALIGN="top" ALIGN="left">
<TD WIDTH=103 HEIGHT=102><A HREF="destinatii.asp"><IMG id="NavigationButton20" HEIGHT=102 WIDTH=103 SRC="imagini/Destinatii_SurfsUpButton.gif" BORDER=0 ALT=" Destinatii " ></A></TD>
</TR>
<TR VALIGN="top" ALIGN="left">
<TD WIDTH=103 HEIGHT=102><A HREF="companii.asp"><IMG id="NavigationButton21" HEIGHT=102 WIDTH=103 SRC="imagini/Companii_SurfsUpButton.gif" BORDER=0 ALT=" Companii " ></A></TD>
</TR>
<TR VALIGN="top" ALIGN="left">
<TD WIDTH=103 HEIGHT=102><A HREF="vacante.asp"><IMG id="NavigationButton22" HEIGHT=102 WIDTH=103 SRC="imagini/Vacante_SurfsUpButton.gif" BORDER=0 ALT=" Vacante " ></A></TD>
</TR>
<TR VALIGN="top" ALIGN="left">
<TD WIDTH=103 HEIGHT=102><A HREF="intrebari.asp"><IMG id="NavigationButton23" HEIGHT=102 WIDTH=103 SRC="imagini/Intrebari_SurfsUpButton.gif" BORDER=0 ALT=" Intrebari " ></A></TD>
</TR>
<TR VALIGN="top" ALIGN="left">
<TD WIDTH=103 HEIGHT=102><A HREF="comentarii.asp"><IMG id="NavigationButton24" HEIGHT=102 WIDTH=103 SRC="imagini/Comentarii_SurfsUpButton.gif" BORDER=0 ALT=" Comentarii " ></A></TD>
</TR>
</TABLE>
Afisarea acestor hiperlegaturi, se face cu ajutorul unor imagini puse in pagina cu ajutorul tag-ului HTML <IMG SRC>.
Informatiile despre agentia de turism afisate in pagina Home, provin din baza de date, din tabela Home. Ca urmare,este necesara realizarea unei conexiuni cu sursa datelor stabilita prin ODBC ca fiind o baza de date de tip MS Access avind numele "vacante". Acest lucru se face cu ajutorul obiectului Connection. In scriptul de mai jos mydsn este un sir care specifica numele sursei datelor. Sirul sql1 memoreaza interogarea care selecteaza toate inregistrarile din tabela Home. Se creaza apoi o instanta a obiectului Connection cu numele conexiune. Aceasta conexiune se deschide cu ajutorul metodei Open. Se utilizeaza apoi metoda Execute pentru a trimite la baza de date comanda SQL memorata in sql1, iar setul de inregistrari rezultat se memoreaza in rs1.
<%mydsn="DSN=vacante"
set conexiune=server.createobject("adodb.connection")
conexiune.open (mydsn)
sql1="select * from home"
set rs1=conexiune.execute(sql1)%>
Afisarea setului de inregistrari rezultate in urma executiei interogarii si care sint depuse in rs1 se afiseaza pe ecran cu ajutorul scriptului de mai jos:
<TABLE width=500><TR><TD> </TD><TD>
<%do while not rs1.eof%>
<P Style="text-align:center;"><FONT SIZE=6 COLOR="blue"><%=rs1.fields("titlu")%></FONT>
<P Style="text-align:justify;"><FONT SIZE=4 ><%=rs1.fields("continut")%></FONT>
<%rs1.movenext
loop%></TD></TR></TABLE>
Parcurgerea setului de inregistrari se face cu ajutorul unui ciclu Do Until … Loop si a metodei MoveNext. Afisarea valorii din cimpul titlu se face cu ajutorul constructiei <%=rs1.fields("titlu")%> si in mod asemanator afisarea valorii din cimpul continut.
Fiecare pagina de Web contine si un element de animatie, realizat cu ajutorul unui applet Java, care apare sub forma unei componente in Net Objects Fusion, componenta numita Rotating Picture.
Applet-urile Java se folosesc in general pentru a adauga la paginile Web sunete si animatie. Sunt aplicatii independente de platforma si de dimensiuni mici. De obicei se executa pe platforma client.
Componenta Rotating Picture permite afisarea mai multor imagini intr-o succesiune, in aceeasi pozitie in pagina Web. Pentru aceasta componenta trebuie specificate: numarul imaginilor care se afiseaza, numele acestor imagini, precum si numarul de secunde de pauza pina la aparitia urmatoarei imagini in secventa.
Appletul de mai jos specifica numele imaginilor de afisat (Poza1.jpg,poza2.jpg,poza3.jpg), dimensiunile in care se incadreaza pozele, coordonatele pe x si y ale componentei si pauza intre imagini de 2 secunde.
<APPLET id="RotatingPicture1" CODE="RotatingPicture.class" CODEBASE="." HEIGHT=77 WIDTH=130 ALT="Rotating Picture" >
<PARAM NAME="Pause Time" VALUE="2">
<PARAM NAME="Number of Images" VALUE="3">
<PARAM NAME="Image 1" VALUE="imagini/Poza1.jpg">
<PARAM NAME="Image 2" VALUE="imagini/Poza2.jpg">
<PARAM NAME="Image 3" VALUE="imagini/Poza3.jpg">
<PARAM NAME="Image Width" VALUE="130">
<PARAM NAME="Image Height" VALUE="75">
<PARAM NAME="X Position" VALUE="665">
<PARAM NAME="Y Position" VALUE="25">
<PARAM NAME="BackgroundImage" VALUE="./RotatingPicture/SurfsUpBackground.GIF">
</APPLET>
Daca se urmeaza hiperlegatura Destinatii se intra in pagina realizata de catre fisierul destinatii.asp. Deoarece conexiunea stabilita cu baza de date se inchide atunci cind se paraseste pagina respectiva de web, si aici este necesara stabilirea si deschiderea conexiunii cu baza de date. In aceasta pagina se afiseaza informatii aflate in tabela Destinatii, informatii care se selecteaza cu comanda Select de mai jos si se depun in obiectul rs1.
<%mydsn="DSN=vacante"
set conexiune=server.createobject("adodb.connection")
conexiune.open (mydsn)
sql1="select * from destinatii order by destinatie"
set rs1=conexiune.execute(sql1)
%>
Pentru fiecare destinatie se afiseaza numele sau, o descriere si o poza. Afisarea valorilor din cimpurile destinatie, descriere si cale_poza din inregistrarile rezultate in urma executiei comenzii Select se face cu ajutorul script-ului de mai jos:
<TABLE width=500>
<%do while not rs1.eof%>
<TR><TD> </TD><TD>
<P Style="text-align:center;"><FONT SIZE=4 COLOR="blue"><%=rs1.fields("destinatie")%></FONT><BR><BR>
<P Style="text-align:justify;"><FONT SIZE=3 ><%=rs1.fields("descriere")%></FONT><BR><BR>
</TD><TD><IMG SRC="<%=rs1.fields("cale_poza")%>"></TD></TR>
<%rs1.movenext
loop%>
</TABLE>
Daca se urmeaza hiperlegatura Companii se intra in pagina realizata de catre fisierul companii.asp. Deoarece conexiunea stabilita cu baza de date se inchide atunci cind se paraseste pagina respectiva de web, si aici este necesara stabilirea si deschiderea conexiunii cu baza de date. In aceasta pagina se afiseaza informatii aflate in tabela Companii, informatii care se selecteaza cu comanda Select de mai jos si se depun in obiectul rs1.
<%mydsn="DSN=vacante"
set conexiune=server.createobject("adodb.connection")
conexiune.open (mydsn)
sql1="select * from companii order by den_companie"
set rs1=conexiune.execute(sql1)%>
Afisarea informatiilor despre companiile maritime care asigura croazierele, si anume : nume companie, informatii despre aceasta si o poza care reprezinta sigla companiei, se face cu ajutorul script-ului de mai jos.
Se observa ca fiecare denumire de companie reprezinta o hiperlegatura catre pagina vase.asp, pagina careia I se transmite ca parametru valoarea din cimpul id_companie, care este cheia primara in tabela Companii. Acest lucru este necesar pentru ca in pagina care are in spate fisierul vase.asp, se afiseaza informatii despre vasele companiei maritime selectate. Numele fisierului .asp si sirul conexiune este specificat in variabila de tip string cu numele leg.
<CENTER><TABLE width=500>
<%do while not rs1.eof%>
<TR><TD> </TD><TD>
<%leg="vase.asp?id_companie=" & rs1.fields("id_companie")%>
<P Style="text-align:center;"><FONT SIZE=5 COLOR="blue"><A HREF="<%=leg%>"><%=rs1.fields("den_companie")%></A></FONT><BR><BR>
<P Style="text-align justify;"><FONT SIZE=4 ><%=rs1.fields("informatii")%></FONT><BR><BR></TD>
<TD><IMG SRC="<%=rs1.fields("cale_poza")%>"></TD></TR>
<%rs1.movenext
loop%>
</TABLE></CENTER>
Daca utilizatorul urmeaza hiperlegatura amplasata pe numele fiecarei companii maritime se va afisa pagina realizata de fisierul vase.asp. In aceasta pagina apar informatii despre vasele companiei maritime selectate, si anume: denumire vasului, categoria sa, poza si o descriere. Script-ul de mai jos arata redeschiderea conexiunii la baza de date. Comanda Select memorata in variabila string sql1, selecteaza din tabela companii numai inregistrarea corespunzatoare companiei selectate in pagina anterioara. Pentru a realiza acest lucru se foloseste clauza where cu conditia id_companie=request.querystring(“id_companie.”).
Pentru a obtine valoarea variabilei id_companie transmisa din pagina anterioara ( Companii) se utilizeaza colectia querystring a obiectului request.
Comanda Select memorata in variabila sql2 permite selectia vaselor corespunzatoare companiei selectate, adica a inregistrarilor din tabela Vase care au cheia externa (id_companie) egala cu valoarea variabilei id_companie trimisa din pagina anterioara.
<%mydsn="DSN=vacante"
set conexiune=server.createobject("adodb.connection")
conexiune.open (mydsn)
sql1="select * from vase where id_companie=" & request.querystring("id_companie")
set rs1=conexiune.execute(sql1)
sql2="select * from companii where id_companie=" & request.querystring("id_companie")
set rs2=conexiune.execute(sql2)%>
Afisarea informatiilor selectate si depuse in obiectele rs1 si rs2 de tip recordset se face cu script-ul de mai jos:
<CENTER>
<P Style="text-align:center;"><FONT SIZE=5 COLOR="green">Compania <%=rs2.fields("den_companie")%>
</FONT>
<TABLE width=500>
<%do while not rs1.eof%>
<TR><TD></TD><TD>
<%leg="detaliuvas.asp?id_vas=" & rs1.fields("id_vas")%>
<P Style="text-align:center;"><FONT SIZE=5 COLOR="blue">
<A HREF="<%=leg%>"><%=rs1.fields("den_vas")%></A></FONT>
<FONT COLOR="red">(<%=rs1.fields("categorie")%>)</FONT></TD>
<TD><IMG SRC="<%=rs1.fields("cale_poza_vas")%>"><TD></TR>
<TR><TD> </TD><TD colspan=2><P Style="text-align:justify;"><FONT SIZE=4 ><%=rs1.fields("informatii")%></FONT><BR><BR><BR>
</TR>
<%rs1.movenext
loop%>
</TABLE></CENTER>
Se observa ca fiecare nume de vapor reprezinta o hiperlegatura catre detaliuvas.asp catre care se trimite si parametrul id_vas. Numele fisierului .asp si sirul interogare este memorat in variabila leg.
<%leg="detaliuvas.asp?id_vas=" & rs1.fields("id_vas")%>
In pagina realizata de fisierul detaliuvas.asp se afiseaza numai informatii despre vasul selectat in pagina anterioara, si anume: denumirea sa, categoria, poza, informatii, precum si lista croazierelor care se desfasoara cu vasul respectiv. De asemenea, aici apar trei hiperlegaturi : Cabine, Zone publice si Statistica. In script-ul de mai jos se observa redeschiderea conexiunii la baza de date. Interogarea Select din variabila sql1 selecteaza din tabela Vase numai inregistrarea corespunzatoare vasului selectat, cu ajutorul parametrului id_vas transmis cu ajutorul unui sir interogare. Interogarea din variabila sql2 selecteaza din tabela Companii inregistrarea corespunzatoare companiei careia ii apartine vasul, iar interogarea din variabila sql3 selecteaza din tabela Vacante inregistrarile care reprezinta vacantele care se desfasoara cu vasul respectiv.
<%mydsn="DSN=vacante"
set conexiune=server.createobject("adodb.connection")
conexiune.open (mydsn)
sql1="select * from vase where id_vas=" & request.querystring("id_vas")
set rs1=conexiune.execute(sql1)
sql2="select * from companii where id_companie=" & rs1.fields("id_companie")
set rs2=conexiune.execute(sql2)
sql3="select * from vacante where id_vas=" & request.querystring("id_vas")
set rs3=conexiune.execute(sql3)%>
Afisarea inregistrarilor din variabilele recordset cu numele rs1, rs2 si rs3 se face cu script-ul de mai jos:
<P Style="text-align:center;"><FONT SIZE=5 COLOR="green">Compania
<%legcomp="Vase.asp?id_companie=" & rs2.fields("id_companie")%>
<A HREF="<%=legcomp%>"><%=rs2.fields("den_companie")%></A>
</FONT>
<TABLE width=500>
<TR><TD></TD><TD>
<P Style="text-align:center;"><FONT SIZE=5 COLOR="blue">
<%=rs1.fields("den_vas")%></FONT>
<FONT COLOR="red">(<%=rs1.fields("categorie")%>)</FONT></TD>
<TD><IMG SRC="<%=rs1.fields("cale_poza_vas")%>"><TD></TR>
<TR><TD> </TD><TD colspan=2><P Style="text-align:justify;"><FONT SIZE=4 ><%=rs1.fields("informatii")%></FONT><BR><BR><BR>
</TR>
<TR><TD> </TD><TD>
<%legcab="Cabine.asp?id_vas=" & rs1(0)%>
<A HREF="<%=legcab%>">Cabine  
<%legcab="zpublice.asp?id_vas=" & rs1(0)%>
<A HREF="<%=legcab%>">Zone publice  
<%legcab="Statistica.asp?id_vas=" & rs1(0)%>
<A HREF="<%=legcab%>">Statistica</TD>
</TR>
<BR>
</TABLE><BR>
<FONt SIZE=4 COLOR="RED">Croaziere organizate cu acest vas :</FONT> </CENTER>
<BR>
<TABLE width=500>
<%do while not rs3.eof%>
<TR><TD> </TD><TD><%=rs3.fields("nume_comercial")%></TD></TR>
<%rs3.movenext
loop%></TABLE>
Daca se urmeaza hiperlegatura Cabine definite in variabila legcab, utilizatorul trece intr-o alta pagina in care, pe linga informatii despre vas, capata si informatii despre tipurile de cabine existente pe vasul respectiv. Interogarea din variabila sql3 selecteaza din tabela Cabine acele inregistrari corespunzatoare cabinelor aferente vasului selectat si identificat de valoarea variabilei id_vas.
<%mydsn="DSN=vacante"
set conexiune=server.createobject("adodb.connection")
conexiune.open (mydsn)
sql1="select * from vase where id_vas=" & request.querystring("id_vas")
set rs1=conexiune.execute(sql1)
sql2="select * from companii where id_companie=" & rs1.fields("id_companie")
set rs2=conexiune.execute(sql2)
sql3="select * from cabine where id_vas=" & request.querystring("id_vas")
set rs3=conexiune.execute(sql3)%>
Afisarea informatiilor din variabilele rs1,rs2 si rs3 se face cu script-ul urmator. Despre fiecare tip de cabina se afiseaza denumirea sa, o imagine si informatii in legatura cu facilitatile cabinei.
<TABLE width=500>
<%do while not rs1.eof%>
<TR><TD></TD><TD>
<P Style="text-align:center;"><FONT SIZE=5 COLOR="blue">
<%legvas="detaliuvas.asp?id_vas=" & rs1(0)%>
<A HREF="<%=legvas%>"><%=rs1.fields("den_vas")%></A></FONT>
<FONT COLOR="red">(<%=rs1.fields("categorie")%>)</FONT></TD>
<TD><IMG SRC="<%=rs1.fields("cale_poza_vas")%>"><TD></TR>
<TR><TD> </TD><TD colspan=2><P Style="text-align:justify;"><FONT SIZE=4 ><%=rs1.fields("informatii")%></FONT><BR><BR><BR>
</TR>
<%rs1.movenext
loop%>
</TABLE></CENTER>
<CENTER><I><FONT SIZE=5 COLOR="RED">Vasul dispune de urmatoarele tipuri de cabine</FONT></I></CENTER><BR>
<TABLE width=500>
<%do while not rs3.eof%>
<TR><TD></TD><TD>
<P Style="text-align:center;"><FONT SIZE=4 COLOR="blue">
<%=rs3.fields("categorie")%></FONT></TD>
<TD><IMG SRC="<%=rs3.fields("cale_poza")%>"><TD></TR>
<TR><TD> </TD><TD colspan=2><P Style="text-align:justify;"><FONT SIZE=3 ><%=rs3.fields("informatii")%></FONT><BR><BR><BR></TR>
<%rs3.movenext
loop%></TABLE>
Denumirea fiecarui vas reprezinta o hiperlegatura catre pagina anterioara detaliuvas.asp, pentru ca utilizatorul sa se poata intoarce in vederea urmarii unei noi hiperlegaturi.
Daca se doreste vizualizarea informatiilor despre zonele publice existente pe un vas trebuie urmata hiperlegatura Zone publice definita in variabila legcab. Interogarea din variabila sql3 selecteaza din tabela Zone_publice acele inregistrari corespunzatoare zonelor publice aferente vasului selectat si identificat de valoarea variabilei id_vas.
<%mydsn="DSN=vacante"
set conexiune=server.createobject("adodb.connection")
conexiune.open (mydsn)
sql1="select * from vase where id_vas=" & request.querystring("id_vas")
set rs1=conexiune.execute(sql1)
sql2="select * from companii where id_companie=" & rs1.fields("id_companie")
set rs2=conexiune.execute(sql2)
sql3="select * from zone_publice where id_vas=" & request.querystring("id_vas")
set rs3=conexiune.execute(sql3)%>
Informatiile despre zonele publice (denumire si descriere) se afiseaza cu script-ul de mai jos. Aici se observa o alta modalitate de afisare a valorii dintr-un cimp, cu o constructie de forma <%=rs3(2)%>, in care nu apare numele cimpului, ci pozitia sa in setul de inregistrari, pozitiile incepind sa fie numerotate de la zero.
<CENTER><I><FONT SIZE=5 COLOR="RED">Vasul dispune de urmatoarele zone publice</FONT></I></CENTER>
<BR>
<TABLE width=500>
<%do while not rs3.eof%>
<TR><TD>   </TD><TD><FONT SIZE=4 COLOR="RED"><%=rs3(2)%></FONT></TD><TD><%=rs3(3)%></TD></TR>
<%rs3.movenext
loop%></TABLE></CENTER>
Daca se doreste vizualizarea informatiilor de natura statistica ale vasului ( data construirii, data renovarii, tonaj, viteza maxima, nationalitate ofiteri, numar de restaurante, numar de piscine, lifturi, s.a.m.d.) trebuie urmata hiperlegatura Statistica definita in variabila legcab. Informatiile de natura statistica sunt memorate tot in tabela Vase si sunt depuse in variabila rs1 .
<%mydsn="DSN=vacante"
set conexiune=server.createobject("adodb.connection")
conexiune.open (mydsn)
sql1="select * from vase where id_vas=" & request.querystring("id_vas")
set rs1=conexiune.execute(sql1)
sql2="select * from companii where id_companie=" & rs1.fields("id_companie")
set rs2=conexiune.execute(sql2)%>
Afisarea informatiilor de natura statistica se face intr-un tabel ca in script-ul de mai jos:
<TABLE border =1 width=500>
<TR><TD>Denumire vas</TD><TD><FONT SIZE=4 COLOR="RED"><%=rs1(1)%></FONT></TD>
<TR><TD>Tara unde este inregistrata</TD><TD><FONT SIZE=4 COLOR="RED"><%=rs1(6)%></FONT></TD>
<TR><TD>Data construirii</TD><TD><FONT SIZE=4 COLOR="RED"><%=rs1(7)%></FONT></TD>
<TR><TD>Data renovarii</TD><TD><FONT SIZE=4 COLOR="RED"><%=rs1(8)%></FONT></TD>
<TR><TD>Capacitate</TD><TD><FONT SIZE=4 COLOR="RED"><%=rs1(9)%></FONT></TD>
<TR><TD>Nationalitate ofiteri</TD><TD><FONT SIZE=4 COLOR="RED"><%=rs1(10)%></FONT></TD>
<TR><TD>Echipaj</TD><TD><FONT SIZE=4 COLOR="RED"><%=rs1(11)%></FONT></TD>
<TR><TD>Tonaj</TD><TD><FONT SIZE=4 COLOR="RED"><%=rs1(12)%></FONT></TD>
<TR><TD>Viteza maxima</TD><TD><FONT SIZE=4 COLOR="RED"><%=rs1(13)%></FONT></TD>
<TR><TD>Lungime</TD><TD><FONT SIZE=4 COLOR="RED"><%=rs1(14)%></FONT></TD>
<TR><TD>Numar de punti</TD><TD><FONT SIZE=4 COLOR="RED"><%=rs1(15)%></FONT></TD>
<TR><TD>Numar de camere interioare</TD><TD><FONT SIZE=4 COLOR="RED"><%=rs1(16)%></FONT></TD>
<TR><TD>Numar de camere exterioare</TD><TD><FONT SIZE=4 COLOR="RED"><%=rs1(17)%></FONT></TD>
<TR><TD>Numar de restaurante</TD><TD><FONT SIZE=4 COLOR="RED"><%=rs1(18)%></FONT></TD>
<TR><TD>Numar de piscine</TD><TD><FONT SIZE=4 COLOR="RED"><%=rs1(19)%></FONT></TD>
<TR><TD>Numar de lifturi</TD><TD><FONT SIZE=4 COLOR="RED"><%=rs1(20)%></FONT></TD>
<TR><TD>Restaurante pentru nefumatori</TD><TD><FONT SIZE=4 COLOR="RED"><%=rs1(21)%></FONT></TD>
</TABLE>
Pentru ca utilizatorul sa capete informatii despre croazierele organizate de agentia de voiaj trebuie urmata hiperlegatura Vacante. In pagina realizata de fisierul vacante.asp utilizatorul este invitat sa aleaga criteriile de selectare a crozierelor, si anume:
Destinatia – se afiseaza o lista cu toate destinatiile memorate in tabela Destinatii, precum si optiunea ,,Toate destinatiile”
Data – se afiseaza o lista cu luni si ani pina in octombrie 2002, precum si optiunea ,,Toate datele”, care se alege daca pe utilizator nu-l intereseaza perioada in care se desfasoara vacanta
Compania – apare lista cu toate companiile memorate in tabela Companii, precum si optiunea ,,Toate companiile”, daca utilizatorul nu are o anume preferinta.
Selectiile amintite mai sus se fac cu ajutorul unui tag HTML <FORM>, iar datele din forma sint trimise fisierului afisrez.asp.
Destinatiile, datele si companiile sunt afisate cu ajutorul unei liste de optiuni realizata cu tag-ul HTML <SELECT>. In prima lista de optiuni se afiseaza destinatiile cu ajutorul constructiei <%=rs1.fields(“destinatie”)%>, iar valoarea care se transmite in afisrez.asp este destinatia cu ajutorul constructiei <%=rs1.fields(“id_destinatie”)%>.
Cea de a doua lista de optiuni afiseaza datele sub forma de luna si an, iar ce de a treia lista de optiuni afiseaza denumirile companiile navale cu ajutorul constructiei <%=rs1.fields(“den_companie”)%>, iar valoarea care se transmite este <%=rs1.fields(“id_companie”)%>. Se observa ca parametrul care se transmite este intotdeauna cheia primara a tabelei care furnizeaza datele din lista.
La apasarea butonului Cauta de tip Submit, datele din forma sint transmise fisierului afisrez.asp.
<FORM ACTION="afisrez.asp" METHOD="post">
Alegeti destinatia:<BR>
<SELECT name=destinatia>
<OPTION selected value=ALL>Toate destinatiile</OPTION>
<%do while not rs1.eof%>
<OPTION VALUE=<%=rs1.fields("id_destinatie")%>><%=rs1.fields("destinatie")%></OPTION>
<%rs1.movenext
loop%>
</SELECT>
<P>Alegeti data:<BR>
<SELECT name=luna size=1><OPTION selected value=ALL>Toate datele</OPTION>
<OPTION value=1/5/2001>Mai 2001</OPTION>
<OPTION value=1/6/2001>Iunie 2001</OPTION>
<OPTION value=1/7/2001>Iulie 2001</OPTION>
<OPTION value=1/8/2001>August 2001</OPTION>
<OPTION value=1/9/2001>Septembrie 2001</OPTION>
<OPTION value=1/10/2001>Octombrie 2001</OPTION>
<OPTION value=1/11/2001>Noiembrie 2001</OPTION>
<OPTION value=1/12/2001>Decembrie 2001</OPTION>
<OPTION value=1/1/2002>Ianuarie 2002</OPTION>
<OPTION value=1/2/2002>Februarie 2002</OPTION>
<OPTION value=1/3/2002>Martie 2002</OPTION>
<OPTION value=1/4/2002>Aprilie 2002</OPTION>
<OPTION value=1/5/2002>Mai 2002</OPTION>
<OPTION value=1/6/2002>Iunie 2002</OPTION>
<OPTION value=1/7/2002>Iulie 2002</OPTION>
<OPTION value=1/8/2002>August 2002</OPTION>
<OPTION value=1/9/2002>Septembrie 2002</OPTION>
<OPTION value=1/10/2002>Octombrie 2002</OPTION>
</SELECT>
<P>Alegeti compania:<BR>
<SELECT name=compania>
<OPTION selected value=ALL>Toate companiile</OPTION>
<%do while not rs2.eof%>
<OPTION VALUE=<%=rs2.fields("id_companie")%>><%=rs2.fields("den_companie")%></OPTION>
<%rs2.movenext
loop%>
</SELECT>
<P><INPUT TYPE=submit VALUE="Cauta">
</FORM>
Selectia datelor care trebuie afisate, si care trebuie sa satisfaca criteriile furnizate de utilizator, se face cu ajutorul unei comenzi Select complexe care apare in scriptul de mai jos. Se observa ca datele ce trebuie afisate provin din mai multe tabele, si anume: Vacante, Companii, Vase, Planificari si Destinatii, intre care se stabilesc jonctiuni interne conform legaturilor 1:m stabilite intre ele.
Obtinerea valorilor care au fost transmise din forma, si anume : destinatia, luna si compania se face cu colectia forms a obiectului request.
<%dest=request.form("destinatia")
luna=request.form("luna")
if luna<>"ALL" then
vluna=month(luna)
van=year(luna)
end if
compania=request.form("compania")
%>
<%mydsn="DSN=vacante"
set conexiune=server.createobject("adodb.connection")
conexiune.open (mydsn)
sql1="SELECT vacante.id_vacanta, vacante.nume_comercial, vacante.id_vas, vase.den_vas, "
sql1=sql1 & " vase.id_companie, companii.den_companie, vase.cale_poza_vas, vase.categorie,"
sql1=sql1 & " planificari.data_inceput, planificari.lungime, planificari.pret, vacante.traseu, planificari.id "
sql1=sql1 & " FROM (companii INNER JOIN vase ON companii.id_companie = vase.id_companie) "
sql1=sql1 & " INNER JOIN ((destinatii INNER JOIN vacante ON destinatii.id_destinatie = vacante.id_destinatie) "
sql1=sql1 & " INNER JOIN planificari ON vacante.id_vacanta = planificari.id_vacanta) ON "
sql1=sql1 & " vase.id_vas = vacante.id_vas where 1=1"
if dest<>"ALL" then
sql1=sql1 & " and vacante.id_destinatie=" & dest
end if
if luna<>"ALL" then
sql1=sql1 & " and month(planificari.data_inceput)=" & vluna & " and year(planificari.data_inceput)=" & van
end if
if compania<>"ALL" then
sql1=sql1 & " and vase.id_companie=" & compania
end if
set rs1=conexiune.execute (sql1)
if dest <>"ALL" then
sql2="Select * from destinatii where id_destinatie=" & dest
set rs2=conexiune.execute(sql2)
end if
if compania <>"ALL" then
sql3="Select * from companii where id_companie=" & compania
set rs3=conexiune.execute(sql3)
end if%>
Afisarea rezultatelor furnizate de comanda Select de mai sus, se face cu ajutorul script-ului urmator. In primul rind se afiseaza criteriile stabilite de utilizator la selectarea vacantelor, apoi numele commercial al vacantei, pretul sau in dolari, numele companiei maritime, vasul care asigura transportul si poza acestuia, data de inceput a excursiei, lungimea sa in zile si traseul sau.
Se observa ca numele companiei maritime, numele vasului, destinatia sunt hiperlegaturi care conduc utilizatorul in paginile care ofera informatii detaliate despre fiecare dintre ele. De asemenea, numele comercial al croazierei reprezinta o hiperlegatura catre pagina detaliu.asp.
<FONT SIZE=4>Rezultate pentru:</FONT><BR>
<%if dest<>"ALL" then%>
Destinatia: <FONT SIZE=4 COLOR="red"><A HREF="Destinatii.asp"><%=rs2(1)%></A></FONT>
<%else%>
Destinatia: <FONT SIZE=4 COLOR="red">Toate destinatiile</FONT>
<%end if%>
<BR>
<%if luna<>"ALL" then%>
Data: <FONT SIZE=4 COLOR="red"><%=vluna%> / <%=van%></FONT>
<%else%>
Data: <FONT SIZE=4 COLOR="red">Toate datele</FONT>
<%end if%>
<BR>
<%if compania<>"ALL" then%>
<%legcomp="vase.asp?id_companie=" & rs3(0)%>
Compania: <FONT SIZE=4 COLOR="red"><A HREF="<%=legcomp%>"><%=rs3(1)%></A></FONT>
<%else%>
Compania: <FONT SIZE=4 COLOR="red">Toate companiile</FONT>
<%end if%>
<TABLE width=500>
<%do while not rs1.eof%>
<TR><TD colspan=2><%legdetaliu="Detaliu.asp?idinreg=" & rs1(12)%>
<FONT SIZE=5 COLOR="green"><A HREF="<%=legdetaliu%>"><%=rs1(1)%></A></FONT> ( <FONT SIZE=4 COLOR="red"><%=rs1(10)%> $</FONT>)</TD></TR>
<%leg="vase.asp?id_companie=" & rs1(4)%>
<TR><TD>Companie: <FONT SIZE=4 COLOR="green"><A HREF="<%=leg%>"><%=rs1(5)%></A></FONT><BR>
<%legvas="detaliuvas.asp?id_vas=" & rs1(2)%>
Vas : <FONT SIZE=4 COLOR="green">
<A HREF="<%=legvas%>"><%=rs1(3)%></A></FONT> (<FONT SIZE=4 COLOR="red"><%=rs1(7)%></FONT>)<BR>
Data de inceput: <FONT SIZE=4 COLOR="green"><%=rs1(8)%></FONT><BR>
Lungime ( in zile ):<FONT SIZE=4 COLOR="green"><%=rs1(9)%></FONT><BR>
Traseu : <FONT SIZE=4 COLOR="green"><%=rs1(11)%></FONT>
<%legdetaliu="Detaliu.asp?idinreg=" & rs1(12)%>
</TD>
<TD ><IMG SRC="<%=rs1(6)%>"></TD></TR>
<%rs1.movenext
loop%></TABLE>
In pagina detaliu.asp, se afiseaza citeva informatii suplimentare despre croaziera selectata, si anume o poza a traseului , si ofertele zilnice. Comanda Select specificata in sql1 selecteaza informatii despre vacanta selectata din mai multe tabele intre care se stabileste jonctiuni interne, cu ajutorul variabilei idinreg (cheia primara din tabela Planificari ) transmisa din pagina anterioara (afisrez.asp), a carei valoare se obtine cu ajutorul colectiei querystring a obiectului request. Pentru a selecta ofertele corespunzatoare acestei vacante se foloseste comanda Select din variabila sql2.
<%id=request.querystring("idinreg")%>
<%mydsn="DSN=vacante"
set conexiune=server.createobject("adodb.connection")
conexiune.open (mydsn)
sql1="SELECT vacante.id_vacanta, vacante.nume_comercial, vacante.id_vas, vase.den_vas, "
sql1=sql1 & " vase.id_companie, companii.den_companie, vase.cale_poza_vas, vase.categorie,"
sql1=sql1 & " planificari.data_inceput, planificari.lungime, planificari.pret, vacante.traseu, planificari.id, vacante.cale_poza_traseu "
sql1=sql1 & " FROM (companii INNER JOIN vase ON companii.id_companie = vase.id_companie) "
sql1=sql1 & " INNER JOIN ((destinatii INNER JOIN vacante ON destinatii.id_destinatie = vacante.id_destinatie) "
sql1=sql1 & " INNER JOIN planificari ON vacante.id_vacanta = planificari.id_vacanta) ON "
sql1=sql1 & " vase.id_vas = vacante.id_vas where planificari.id=" & id
set rs1=conexiune.execute(sql1)
sql2="Select * from oferte where id_vacanta=" & rs1(0)
set rs2=conexiune.execute(sql2)%>
Daca se apeleaza hiperlegatura ,,Intrebari", se afiseaza pagina realizata de fisierul Intrebari.asp. Pentru selectarea intrebarilor memorate in tabela FAQ se executa interogarea memorata in variabila mysql.
<%mydsn="DSN=magazin"
set conntemp=server.createobject("adodb.connection")
conntemp.open mydsn
mysql="select * from FAQ"
set rstemp=conntemp.execute (mysql)%>
Afisarea inregistrarilor selectate in obiectul rstemp se face cu script-ul de mai jos:
<CENTER><TABLE>
<%do until rstemp.eof%>
<TR><TD>  </TD><TD><B><FONT SIZE=4 COLOR="red"><%=rstemp.fields("Intrebare")%></FONT></B></TD></TR>
<TR></TR><TR></TR><TR></TR>
<TR><TD>  </TD><TD><FONT SIZE=3 COLOR="blue" ><I><%=rstemp.fields("Raspuns")%></I></FONT></TD></TR>
<TR></TR><TR></TR><TR></TR>
<%rstemp.movenext
loop%></TABLE></CENTER>
Daca se urmeaza hiperlegatura ,,Comentarii" se trece in pagina realizata de fisierul Comentarii.asp, unde utilizatorul este invitat sa transmita mesaje. Forma de introducere a mesajelor, in care trebuie completate cimpurile nume, companie, email, subiect si mesaj este realizata cu ajutorul tag-ului HTML <FORM>, asa cum se vede in scrip-ul de mai jos.
<FORM NAME="Intr" ACTION="comentarii.asp" Method="post" >
<PRE>
Nume : <INPUT TYPE="text" NAME="nume" Size=50 >
Companie : <INPUT TYPE="text" NAME="companie" Size=50 >
E-mail: <INPUT TYPE="text" NAME="email" Size=50 >
Subiect : <INPUT TYPE="text" NAME="subiect" Size=50 >
Mesaj : <TEXTAREA COLS=43 ROWS=10 NAME="mesaj" ></TEXTAREA>
<INPUT TYPE="submit" VALUE=" Trimite ">
</FORM>
Datele completate de utilizator in forma sunt transmise aceluiasi fisier Comentarii.asp. Aici se obtin valorile cimpurilor completate pe forma cu ajutorul colectiei form a obiectului request. Aceste valori sunt de asemenea depuse in variabilele: vnume, vcompanie, vemail, vsubiect si vmesaj. Inserarea mesajului, adica a valorilor acestor variabile in cimpurile corespunzatoare din tabela Comentarii se face cu ajutorul comenzii SQL Insert, precizata in variabila mysql.
<%vnou=request.querystring("nou")
mydsn="DSN=magazin"
set conntemp=server.createobject("adodb.connection")
conntemp.open mydsn
vnume=request.form("nume")
vcompanie=request.form("companie")
vemail=request.form("email")
vsubiect=request.form("subiect")
vmesaj=request.form("mesaj")
mysql="Insert into Comentarii(nume,companie,email,subiect,mesaj) Values('" & vnume & "','" & vcompanie & "','" & vemail & "','" & vsubiect & "','" & vmesaj & "')"
conntemp.execute (mysql)%>
Cap.6 Concluzii
Aplicatia intitulata ,,Agentie de voiaj – prezentare pe Internet”, realizata intr-o combinatie de HTML si ASP reprezinta o colectie de pagini dinamice de Web care pune la dispozitia oricarui utilizator citeva functiuni importante, si anume :
1. Home
2. Destinatii
3. Companii
4. Cautare
5. Intrebari
6. Comentarii
Urmind aceste hiperlegaturi, utilizatorul poate afla informatii despre:
firma de turism
despre destinatiile catre care organizeaza croaziere
despre companiile maritime si vasele cu care se fac deplasarile
despre fiecare croaziera ( traseu, pret, oferte zilnice, data de inceput, durata,etc.)
cele mai frecvente intrebari adresate firmei de catre clientii sai
De asemenea, utilizatorul poate trimite firmei comentariile, intrebarile sau nemultimirile sale cu ajutorul hiperlegaturii Comentarii.
Aplicatia ofera utilizatorului toate informatiile necesare, astfel incit acesta nu poate sa greseasca, ofera legaturi imediate la toate celelalte pagini ale aplicatiei.
Se evidentiaza faptul ca, acest tip de aplicatie dinamica permite integrarea completa a paginilor de Web cu orice baza de date relationala prin intermediul ODBC, permite operatii de inserare, actualizare si stergere inregistrari, interogarea bazelor de date si generarea in mod dinamic de pagini de Web care sa contina rezultatele interogarilor, transmiterea imediata de e-mail-uri, este de mare actualitate nu numai in tarile dezvoltate, dar in ultima vreme si in tara noastra.
Eventualele imbunatatiri care pot fi aduse aplicatiei se refera la:
Pot fi utile adresele altor site-uri romanesti care ofera informatii asemanatoare
Daca se doreste ca aceste informatii sa fie accesate si de catre clienti din strainatate se recomanda, pe linga varianta in limba romana si una in limba engleza.
Adaugarea unei functiuni de cautare avansata, care sa permita utilizatorului sa caute croazierele care-l intereseaza dupa un numar mai mare de criterii, ca de exemplu: destinatia, data de inceput si lungimea, compania maritime si nava.
Completarea aplicatiei cu posibilitatea de rezervari de locuri on-line la o anumita croaziera.
Bibliografie
ASP – www.learnasp.com
HTML Reference – www.allaire.com
Microsoft Personal Web Server – Product Documentation
4. HTML Publicatii Web – Dumitru Radoiu – Editura Computer Press Agora 1996
5. Allen Browne, Alison Balter – Access 95 Editura Teora 1996
6. Allen L. Wyatt – Succes cu Internet – Editura All Educational 1995
Sisteme de gestiune a bazelor de date si Proiectarea bazelor de date – notite de curs
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Agentie de Voiaj Prezentare pe Internet (ID: 130563)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
