Zobacz przyk³adowy rozdzia³. Aktualny cennik ksi¹ ek em. Informacje o nowoœciach em. Zamów najnowszy katalog

Podobne dokumenty
Materiały do laboratorium MS ACCESS BASIC

o partnerstwie publiczno-prywatnym.

Materiały pomocnicze do zajęć z przedmiotu Projekt ADP

Jan Bień. Modelowanie obiektów mostowych w procesie ich eksploatacji

Dostęp do baz danych z serwisu www - PHP. Wydział Fizyki i Informatyki Stosowanej Joanna Paszkowska, 4 rok FK

Zajęcia 13 wykorzystanie MySQL w PHP cz. 2

1. PARAMETRY TECHNICZNE WAG NAJAZDOWYCH.

1.1. System otwartych baz danych ODBC. System otwartych baz danych ODBC. Interfejs ODBC. Interfejs ODBC. System otwartych baz danych ODBC

KWIT WYWOZOWY/PODWOZOWY (KW)

DAO. tworzenie tabeli

Manipulowanie danymi przy użyciu DAO

SIECI KOMPUTEROWE I BAZY DANYCH

Paweł Rajba

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

Wydział Elektrotechniki, Informatyki i Telekomunikacji Instytut Informatyki i Elektroniki

SENAT RZECZYPOSPOLITEJ POLSKIEJ V KADENCJA. Warszawa, dnia 3 sierpnia 2005 r. Druk nr 1074

Aplikacje WWW - laboratorium

Projekt strony internetowej firmy organizującej przyjęcia

4 Web Forms i ASP.NET Web Forms Programowanie Web Forms Możliwości Web Forms Przetwarzanie Web Forms...152

Spis treœci :VWS Poziom podstawowy Poziom rozszerzony R]ZL]DQLD áRZQLF]HN Literatura

Administracja i programowanie pod Microsoft SQL Server 2000

'otwarcie i ustawienie zbioru rekordow na podstawie tabeli Studenci Set rs = CurrentDb.OpenRecordset("Studenci", dbopensnapshot)

Zapis stenograficzny (1537) 188. posiedzenie.rplvml3rolw\nl6sráhf]qhml=gurzld w dniu 30 listopada 2004 r.

Zapis stenograficzny (1653) 27. posiedzenie Komisji Spraw Unii Europejskiej w dniu 25 lutego 2005 r.

Funkcje i instrukcje języka JavaScript

Zapis stenograficzny (1532) 187. posiedzenie.rplvml3rolw\nl6sráhf]qhml=gurzld w dniu 25 listopada 2004 r.

MySQL. Æwiczenia praktyczne

Oracle PL/SQL. Paweł Rajba.

INSTRUKCJA OBSŁUGI I INSTALOWANIA ZMYWARKI DO NACZYŃ MODEL: STX2C

Ewolucyjna optymalizacja wielokryterialna

Piotr 7U\EDáD. Leasing 3RUDGQLN3U]HGVLELRU \

Podstawy JavaScript ćwiczenia

ZAAWANSOWANE BAZY DANYCH I HURTOWNIE DANYCH MySQL, PHP

MVC w praktyce tworzymy system artykułów. cz. 2

3URMHNWRZDQLHVFKHPDWyZ UHODF\MQ\FKED]GDQ\FK± 1RUPDOL]DFMD. =E\V]NR.UyOLNRZVNL ,QVW\WXW,QIRUPDW\NL3ROLWHFKQLNL3R]QDVNLHM 3R]QDXO3LRWURZR

Ćwiczenia 2 IBM DB2 Data Studio

Platforma.NET laboratorium 4 Aktualizacja: 15/11/2013. Visual Basic.NET dostęp do bazy danych. Baza Microsoft SQL Server Compact

mysql> UPDATE user SET Password=PASSWORD('pass') WHERE user='root'; Query OK, 2 rows affected (0.05 sec) Rows matched: 2 Changed: 2 Warnings: 0

Smarty PHP. Leksykon kieszonkowy

Współpraca PHP z MySql

Aplikacje WWW - laboratorium

Programowanie MSQL. show databases; - pokazanie jakie bazy danych są dostępne na koncie

ASP.NET MVC. Podstawy. Zaawansowane programowanie internetowe Instrukcja nr 3

Kursory. A. Pankowska 1

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych

Język PHP. Studium Podyplomowe Sieci Komputerowe i Aplikacje Internetowe. v1.7, 2007/11/23

Dokumentacja smsapi wersja 1.4

Opis systemu. BillNet S.A. 1

STACJE ELEKTROENERGETYCZNE

Aplikacje WWW - laboratorium

Laboratorium 15: Bazy Danych Tworzenie bazy danych i programowanie elementów nawigacyjnych aplikacji stworzonej przy pomocy technologii dbexpress

0HWRG\HNVSORUDFMLGRVWSQHZ2UDFOHi Data Mining

Zestaw üwicze z przegldark Internet Explorer. Przegld wybranych funkcji programu

UMOWA NR RAP/130/2010

KLASYCZNA I PROBABILISTYCZNA TEORIA TESTU ANALIZA PORÓWNAWCZA

STWORZENIE BIBLIOTEKI SŁUŻĄCEJ DO WCZYTYWANIA

2. Kliknij Insert->Userform. Jeżeli Toolbox nie pojawi się automatycznie, kliknij View -> Toolbox. Otrzymany widok powinien być jak poniżej.

Baza danych do przechowywania użytkowników

,1)<1,(56.,(%$=<'$1<&+'/$0$à<&+35=('6, %,2567: ENGINEERING DATA BASES FOR SMALL ENTERPRISES

PL/SQL. Zaawansowane tematy PL/SQL

Ćwiczenie 1. Model konceptualny i fizyczny bazy danych. Zadanie 1. Pomoc. Pytania kontrolne

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

W SQL Serwerze 2008 wprowadzono parametry tablicowe (Table Valued Parameters - TVP).

NIP TEL. (032) TEL/FAX (032) DATA r. 6RVQRZLHF$O=Z\FLVWZD %5$1)$ PW

Wprowadzenie do Doctrine ORM

Plan. Formularz i jego typy. Tworzenie formularza. Co to jest formularz? Typy formularzy Tworzenie prostego formularza Budowa prostego formularza

Wdrożenie modułu płatności eservice. dla systemu Gekosale 1.4

Laboratorium nr 4. Temat: SQL część II. Polecenia DML

Bazy Danych - Instrukcja do Ćwiczenia laboratoryjnego nr Prosta obsługa Bazy w PHP

: Autor: Ks. Wojciech Cichosz. 2. 7\WXá:\FKRZDQLHFKU]HFLMDVNLHZREHFSRVWPRGHUQLVW\F]QHMSURZRNDFML. 3. 'UyGáR*GDVN

PHP może zostać rozszerzony o mechanizmy dostępu do różnych baz danych:

Zastosowanie w InTouch u kontrolki ActiveX wwgenericsqlgrid do odczytywania informacji z baz danych

Marek Panfil. =$5='=$1,(1$/()12&,$0, :0$à<0,5('1,0 35=('6, %,2567:,(

Internetowe bazy danych

Ćwiczenie 7 Komponent IBQuery - uruchamianie zapytań aktualizujących. 1. Przygotować w nowym katalogu aplikację do aktualizacji bazy SKOKI.GDB.

Spis treœci WSTÊP... 3 KLUCZ ODPOWIEDZI BIBLIOGRAFIA

Rejestracja i Logowania - PHP/MySQL

SQL 4 Structured Query Lenguage

Bazy Danych i Usługi Sieciowe

Współpraca PHP z MySql cz.2

Bazy Danych - Instrukcja do Ćwiczenia laboratoryjnego nr 8

Formularze w PHP dla początkujących

Autor: Joanna Karwowska

PODSTAWY BAZ DANYCH 13. PL/SQL

Projektowanie baz danych za pomocą narzędzi CASE

Systemy internetowe. Wykład 4 mysql. West Pomeranian University of Technology, Szczecin; Faculty of Computer Science

Internetowe bazy danych

JavaScript - wykład 4. Zdarzenia i formularze. Obsługa zdarzeń. Zdarzenia. Mysz. Logiczne. Klawiatura. Beata Pańczyk

Plan wykładu BAZY DANYCH II WYKŁAD 4. Co to jest kursor? Rodzaje kursorów

SENAT RZECZYPOSPOLITEJ POLSKIEJ V KADENCJA SPRAWOZDANIE. KOMISJI 867$:2'$:67:$,35$:25='12&, oraz KOMISJI SPRAW ZAGRANICZNYCH

TECHNOLOGIE SIECI WEB

strukturalny język zapytań używany do tworzenia i modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych

Technologie Internetowe Raport z wykonanego projektu Temat: Internetowy sklep elektroniczny

SENAT RZECZYPOSPOLITEJ POLSKIEJ V KADENCJA. Warszawa, dnia 18 marca 2004 r. SPRAWOZDANIE KOMISJI ROLNICTWA I ROZWOJU WSI

Kierunek: ETI Przedmiot: Programowanie w środowisku RAD - Delphi Rok III Semestr 5

Kryształowy blask ognia ręcznie zamknięty w wyszukanych szklanych formach idealny dla restauracji domu biura

Szablon główny (plik guestbook.php) będzie miał postać:

TEMAT ĆWICZENIA Zapoznanie z technologią LINQ

T A B E L E i K W E R E N D Y

Transkrypt:

Active Server Pages 2.0 dla ka dego Autor: Sanjaya Hettihewa T³umaczenie: Piotr Rajca ISBN: 83-7197-104-4 Format: B5, 720 stron Data wydania: 10/1999 Cena ksi¹ ki: 66.00 z³ Przesy³ka gratis! Odbiorca pokrywa jedynie koszty pobrania (2,70 z³) w przypadku przesy³ki za zaliczeniem pocztowym Wydawnictwo Helion ul. Chopina 6, 44-100 Gliwice, POLAND telefon: (32) 230-98-63, 231-22-19 fax: (32) 230-98-63 w.10 mail: helion@helion.com.pl Dziêki tej pozycji czytelnik w bardzo krótkim czasie nabêdzie umiejêtnoœci, które pozwol¹ rozpocz¹æ efektywn¹ pracê z Active Server Pages 2.0. Ksi¹ ka ukazuje funkcje i dzia³anie ASP 2.0 od podstaw a do bardziej zaawansowanych funkcji i pojêæ. Czytaj¹c tê ksi¹ kê mo na zrozumieæ podstawy tworzenia dynamicznych i interaktywnych stron internetowych, nauczyæ siê tworzenia aplikacji niezale ne od typu przegl¹darki internetowej, wkorzystaæ si³ê ActiveX Data Objects (ADO) w tworzeniu internetowych aplikacji baz danych,urozmaiciæ swoje strony internetowe przy pomocy aplikacji ASP, rozwin¹æ mo liwoœci ASP dziêki samodzielnemu projektowaniu skryptów i komponentów ASP, opanowaæ bardzo wyszukane techniki interakcji z u ytkownikiem, wykorzystuj¹ce formularze HTML, Javê, ActiveX, okna dialogowe i pola tekstowellllllllllllllllllllllllllllllllllllllllllllllllllllllllllll Zobacz przyk³adowy rozdzia³ Spis treœci Je eli znasz tê ksi¹ kê oceñ j¹ Aktualny cennik ksi¹ ek e-mailem Ksi¹ ki i "3D" Online Informacje o nowoœciach e-mailem Zamów najnowszy katalog Helion 1999

5R]G]LDä 7ZRU]HQLH DSOLNDFMLED]GDQ\FK SU]\X\FLX RELHNWÑZGDQ\FK$FWLYH; QDSLVDá'XQFDQ0DFNHQ]LH : SRSU]HGQLP UR]G]LDOH ]RVWDáR SU]HGVWDZLRQH SRMFLH Z\NRU]\VW\ZDQLD ED] GDQ\FK w aplikafmdfk $63 ED]XMFH QD F]\PRNUHODQ\P MDNR $'2 $'2 $FWLYH; 'DWD 2EMHFWV±RELHNW\GDQ\FK$FWLYH;MHVW]ELRUHP]HZQWU]Q\FKRELHNWyZNWyU\PLPR*HV] operozdü]hvzrlfkvwurqgdmflpw\pvdp\ppr*olzrüsudf\]ed]dplgdnych. PonieZD*]REDF]\áHMX*SU]\NáDGVSRVoEXX*\FLDW\FKRELHNWyZZW\PUR]G]LDOHRPy ZLP\ND*G\]QLFK]QDF]QLHEDUG]LHMV]F]HJyáRZR:W\PUR]G]LDOH X Odkryjesz czym jest ADO. X =DSR]QDV]VL]PRGHOHPRELHNWRZ\P$'2 X 8*\MHV]$'2GRVWZRU]HQLDDSOLNDFMLIRUXPX*\WNRZQLNyZ X :\NRU]\VWDV]]DDZDQVRZDQHPR*OLZRFL$'2VFKHPDW\GDQ\FK 3UH]HQWDFMD$'2 $'2 MHVW JUXS RELHNWyZ ]DSURMHNWRZDQ\FK Z FHOX GRVWDUF]HQLD SURVWHJR LQWHUIHMVX programivw\f]qhjr VáX*FHJR GR RSHURZDQLD QD ED]DFK GDQ\FK : SU]HV]áRFL VWZR rzono wiele podobnych systemów takich, jak: DAO (Data Access Objects) lub RDO

&]öè,, 5HPRWH'DWD2EMHFWVNWyUHE\á\EDUG]RV]HURNRZ\NRU]\VW\ZDQHSU]H]SURJUDPLVWyZ NRU]\VWDMF\FK ] M]\NyZ 9LVXDO %DVLF 9LVXDO & RUD] RVRE\ X*\ZDMFH SURJUDPX 0LFURVRIW$FFHVV0LFURVRIWVWZLHUG]Lá*HWHSoSU]HGQLHV\VWHP\E\á\]E\WRJUDQLF]RQH SRG Z]JOGHP PR*OLZRFL RSHURZDQLD QD ZLHOX Uy*Q\FK W\SDFK GDQ\FK LVWQLHMF\FK wuhdoq\pzlhflh]whjrsrzrgxsrzvwdár2/('%2/('%pdzv]\vwnlhfhfk\ NWyU\FKEUDN'$2±MHVWV]\ENLHPDáHLHODVW\F]QH'$2MHVWLQWHUIHMVHP-HW±PHcha- QL]PXED]GDQ\FKZ\NRU]\VW\ZDQ\PZ$FFHVVLHNWyU\QLH]RVWDá]DSURMHNWRZDQ\GR REVáXJLLQQ\FKW\SyZGDQ\FK=GUXJLHMVWURQ\2/('%PR*HSUDFRZDü]HZV]\VWNLP ZáF]QLH ] GDQ\PL NWyUH QLH V ]DSLVDQH Z WUDG\F\MQ\P IRUPDFLH WDEHODU\F]Q\P :V]\VWNLH WH IDNW\ ZLDdF]RW\P*H 2/( '% MHVW DNWXDOQLH SUHIHURZDQ\P QDU] dziem programistycznym, niestety povldgd RQR MHGQ SRGVWDZRZZDG NWyUD XQLH PR*OLZLáDMHJRSRZV]HFKQHZ\NRU]\VWDQLH±2/('%MHVWQLHVá\FKDQLHVNRPSOLNRZDQH $E\SU]H]Z\FL*\üWHQSUREOHP0LFURVRIWVWZRU]\á$'2SURVWZDUVWZXPLHV]F]R QSRQDG2/('%LGRVWDUF]DMFáDWZLHMV]HJRLQWHUIHMVXSURJUDPistycznego. 3RVLDGDMF MHG\QLH WU]\ JáyZQH RELHNW\ RUD] NLOND SRPRFQLF]\FK NROHNFML $'2 MHVW bardzo provwh']lnlwhpx$'2mhvwádwzhzx*\flxlqlhwuxgqrvljrqdxf]\ümhgqr F]HQLHPR*QDSU]\MHJRSRPRF\]URELüQLHPDO*HZV]\VWNRFRPR*QDZ\NRQDü]ED] GDQ\FK']LNLVZRMHMSURVWHMNRQVWUXNFML$'2GRVNRQDOHQDGDMHVLGRZ\NRU]\VWDQLD ZUD]]$63D]DWHPVWDáDVLRQDMHG\QPHWRGREVáXJLED]GDQ\FKZ\NRU]\VW\ZDQ GRWZRU]HQLDDSOLNDFML $63 8ZD*D VL WDN*H L* $'2 MHVW OHSV]\P QDU]G]LHP GR Z\NRU]\VWDQLD Z 9LVXDO %DVLFX RUD] LQQ\FK URGRZLVNDFK SURJUDPLVW\F]Q\FK FKRü wynru]\vw\zdqlh$'2sr]dwhfkqrorjl$63grslhurwhud]]\vnxmhvrelhsrsxodrqrü 0RGHORELHNWRZ\$'2 $'2SRVLDGDMHG\QLHV]HüRELHNWyZLGZLHNROHNFMHMHGQDNVSRUyGW\FKV]HFLXRELH któw jedyqlhwu]\qdoh*\x]qdü ]D RELHNW\ JáyZQH NWyU\FK G]LDáDQLH EG]LHV] PXVLDá wsháql]ur]xplhü2elhnwdplw\plv X Connection, X Command, X Recordset..D*G\]W\FKJáyZQ\FKRELHNWyZ]RVWDQLHZ\MDQLRQ\ZGDOV]\FKF]FLDFKWHJRUR] G]LDáXJG]LH]RVWDQSRGDQHOLVW\ZV]\VWNLFKLFKZáDFLZRFLLPHWRG3U]\NáDG\Z\NR U]\VWDQLDW\FKRELHNWyZ]RVWDQSRGDQHZGDOV]HMF]FLUR]G]LDáXMDNRF]üV\VWHPX )RUXP8*\WNRZQLNyZ=REDF]\V]MHWDN*HZQDVWSQ\PUR]G]LDOH 2ELHNW&RQQHFWLRQ =JRGQLH ] W\P F]HJR GRZLHG]LDáHVL Z SRSU]HGQLP UR]G]LDOH ND*GH Z\NRU]\VWDQLH bazy danych wymaga obiektu Connection5HSUH]HQWXMHRQU]HF]\ZLVWVHVMQDZL ]DQ]ED]GDQ\FK=D]Z\F]DMMHG\Q\PLPHWRGDPLWHJRRELHNWXZ\NRU]\VW\ZDQ\PL Z VNU\SWDFK $63 V PHWRG\ Open() i Close(). Listing 11.1 przedstawia, w jaki VSRVyEPR*QDZ\NRU]\VWDüRELHNWConnection.

5R]G]LDä 7ZRU]HQLHDSOLNDFMLED]GDQ\FKSU]\X\FLXRELHNWÑZGDQ\FK$FWLYH; /LVWLQJWykorzystanie obiektu Connection 1. 2. <% 3. Dim Conn 'Nasz obiekt Connection 4. 5. Set Conn = Server.CreateObject( "ADODB.Connection" ) 6. 7. Conn.Open "DSN=WEBSQL;UID=sa;pwd=;" 8. 9. ' Tu przychodzi inny kod 10. 11. Conn.Close 12. %> : SU]HGVWDZLRQ\P SRZ\*HM NRG]LH Z NLONX NURNDFK MHVW WZRU]RQ\ Z\NRU]\VW\ZDQ\ i zamykany obiekt Connection. W linii 3. jest deklarowana zmienna Conn, w której zostanie zapisany obiekt Connection. Takie deklarowanie zmiennej nie jest konie- F]QH OHF] XZD*D VL MH ]D OHSV] SUDNW\N SURJUDPLVW\F]Q : OLQLL SU]\ X*\FLX metody Server.CreateObject jest tworzony faktyczny egzemplarz obiektu Connection&]\QQRüWDPXVL]RVWDüZ\NRQDQDSU]HGZ\ZRáDQLHPMDNLHMNROZLHNPHWRdy OXEZáDFLZRFLRELHNWX3RVWZRU]HQLXRELHNWXZOLQLLMHVWRWZLHUDQDVHVMD]ED] GDQ\FK D MDNR SDUDPHWU Z\ZRáDQLD PHWRG\ 2SHQ MHVW X*\ZDQ\ ádfxfk ]QDNyZ SRáF]HQLD]H(UyGáHPGDQ\FK7HQáDFXFK]QDNyZVNáDGDVL]WU]HFKRGG]LHOQ\FKLn- IRUPDFML±QD]Z\'61LGHQW\ILNDWRUDX*\WNRZQLNDRUD]KDVáD:V]\VWNLHWHLQIRUPDFMH PR*QDSRGDüRGG]LHOQLHMDNSoND]DQRQDSRQL*V]\PSU]\NáDG]LH Conn.Open "WEBSQL", "sa", "" 'RZROQ\NRGRSHUXMF\QDSRáF]HQLXSRZLQLHQ]RVWDüXPLHV]F]RQ\SRPLG]\OLQL iolql Obiekt Connection posiada siedem metod przedstawionych w tabeli 11.1. 7DEHOD Metody obiektu Connection 0HWRGD Open Close Execute BaginTrans 2SLV 7ZRU]\VHVM]ED]GDQ\FK-HVWWR]D]Z\F]DMSLHUZV]DLQLHZWSOLZLH najzd*qlhmv]dz\zráywana metoda. =DP\NDVHVMMHOLVHVMDMHVWRWZDUWD-HOLQLHPDRWZDUWHMVHVMLWRPHWRGD]ZUDFD EáG :\NRQXMHSROHFHQLH64/ZED]LHGDQ\FK0HWRGDWDMHVWX*\WHF]QDSU]\ Z\NRQ\ZDQLXF]\QQRFLNWyUHQLH]ZUDFDMZZ\QLNXUHNRUGyZGDQ\FKWDNLFKMDN XVXQLFLHQLHNWyU\FKUHNRUGyZWDEOLF\ 5R]SRF]\QDWUDQVDNFM]ED]GDQ\FK:LFHMLQIRUPDFMLQDWHPDWWUDQVDNFML ivsrvreyzlfkx*\zdqld]qdmg]lhv]zur]g]ldohswä8*\zdqlhnrpsonentów ActiveX stworzonych dla ASP.

&]öè,, 7DEHOD Metody obiektu &RQQHFWLRQ±FLJGDOV]\ 0HWRGD CommitTrans RollbackTrans OpenSchema 2SLV -HGQD]GZyFKPHWRGD]DNRF]HQLDWUDQVDNFML]ED]GDQ\FKWDPHWRGDLQIRUPXMH ED]RW\P*HFDáDRSHUDFMD]RVWDáD]DNRF]RQDSRP\OQLHDZV]\VWNLH PRG\ILNDFMHGDQ\FKSRZLQQ\]RVWDü]DVWRVRZDQH,QQDPHWRGD]DNRF]HQLDWUDQVDNFMLLQIRUPXMHRQDED]GDQ\FKRZ\VWSLeniu EáGyZLR]QDF]D*HZV]\VWNLHRSHUDFMHZ\NRQDQHQDED]LHRGPomentu Z\ZRáDQLDPHWRG\BeginTransSRZLQQH]RVWDüZ\FRIDQH Ta zaawansowana metoda jest wykorzystywana raczej rzadko. Zwraca ona zbiór UHNRUGyZNWyUHJR]DZDUWRü]DOH*\RGSLHUZV]HJRDUJXPHQWXZ\ZoáDQLDPHWRG\ 3HáQDOLVWDDUJXPHQWyZPHWRG\RUD]RGSRZLDGDMF\FKLPZDUWRFLQLHPRJáD]RVWDü SU]HGVWDZLRQDMHGQDNSU]\NáDGMHMZ\NRU]\VWDQLD]RVWDáSRGDQ\ZVHNFMLÄ3UDFD]H VFKHPDWDPLED]GDQ\FK ]QDMGXMFHMVLZGDOV]HMF]FLWHJRUR]G]LDáX Obiekt Connection SRVLDGD WDN*H G]LHZLü ZáDFLZRFL WH QDMEDUG]LHM SRSXODUQH ix*\whf]qh]rvwdá\su]hgvwdzlrqhzwdehol 7DEHOD 3RSXODUQHLSU]\GDWQHZáDFLZRFLRELHNWXConnection :ädflzrè ConnectionString ConnectionTimeout CommandTimeout State Attributes 2SLV 7DZDUWRü]DZLHUDLQIRUPDFMHSRWU]HEQHGRVWZRU]HQLDVHVML]ED] GDQ\FK PR*HRQD]RVWDüSU]HND]DQDEH]SRUHGQLRGRZ\ZRáDQLDPetody Open LWDNVL]D]Z\F]DMG]LHMH 2NUHODMDNGáXJRPHWRGDOpenEG]LHRF]HNLZDáDQDRWU]\PDQLHGDQ\FK ]DQLP]JáRVLEáG 7DZDUWRüMHVWX*\ZDQDGRRNUHOHQLDMDNGáXJRSROHFHQLHZ\GDQHVHVML zed]gdq\fkeg]lhz\nrq\zdqh]dqlp]rvwdqlhz\jhqhurzaq\eág przekroczenia limitu czasu. 7DZáDFLZRü]ZUDFDMHGQ]GZyFKZDUWRFLRNUHODMFF]\SRáczenie zed]gdq\fkmhvwrwzduwh1f]\wh*]dpnqlwh0). :ádflzrü]ddzdqvrzdqd]zudfdqdsu]h]qlzduwrürnuhodpr*olzrfl XGRVWSQLDQHSU]H]ED]GDQ\FKMDNQDSU]\NáDGREVáXJWUDQVDNFML1LHMHVW ona wymagana przy tworzeniu prostych systemów. =D SRPRF RELHNWX Connection PR*QD WDN*H X]\VNDü GRVWS GR GZyFK NROHNFML przedstawionych w tabeli 11.3. Obiekt ConnectionMHVWWZRU]RQ\LRWZLHUDQ\QDVDP\PSRF]WNXSUDF\]ED]GDnych, MHGQDNSU]HZD*QLHQLHMHVWRQX*\ZDQ\ZSRMHG\QN'RIDNW\F]QHJRPDQLpulowania ED] GDQ\FK MHVW Z\NRU]\VW\ZDQ\ SU]HZD*QLH SU]\QDMPQLHM MHGHQ ] SU]HGVWDZLRQ\FK SRQL*HMRELHNWyZ2ELHNW&RPPDQGZ\NRU]\VWXMHRELHNWConnectionSRSU]H]VZRM ZáDFLZRüRQD]ZLHActiveConnection.

5R]G]LDä 7ZRU]HQLHDSOLNDFMLED]GDQ\FKSU]\X\FLXRELHNWÑZGDQ\FK$FWLYH; 7DEHOD Kolekcje obiektu Connection.ROHNFMD Errors Properties 2SLV Jest to kolekcja obiektów Error]NWyU\FKND*G\RGSRZLDGDMHGQHPXEádowi Z\JHQHURZDQHPXZF]DVLHWUZDQLDWHMVHVML]ED] GDQ\FK 7NROHNFMSRVLDGDND*G\RELHNW$'2XGRVWSQLDRQDSRGSRVWDFLNROHNFML ZV]\VWNLHZáDFLZRFLRELHNWXSU]HGVWDZLRQHZWDEHOL 2ELHNW&RPPDQG Obiekt CommandUHSUH]HQWXMHMHGQRSROHFHQLHZ\GDQHSRáF]HQLX]ED]GDQ\FKWDNLH jak polefhqlh64/oxesurfhgxudrvdg]rqddqjvwruhgsurfhgxuh2elhnw]rvwdá]dprojektowany do lepv]hmreváxjlz\nrq\zdqldsrohfhwhjrw\sxql*xpr*olzldwrphwrgd Execute obiektu Connection. Obiekt Command SRVLDGD JUXSZáDFLZRFL PHWRG i koohnfmlnwyuh]rvwdá\su]hdstawione w tabelach 11.4, 11.5 i 11.6. 7DEHOD :ádflzrflrelhnwxcommand :ädflzrè ActiveConnection CommandText CommandTimeout CommandType Prepared 2SLV.D*G\RELHNWCommandSUDFXMHQDVNRMDU]RQ\P]QLPSRáF]HQLX]ED] GDQ\FK7DZáDFLZRüSRELHUDOXEXVWDZLDRELHNWConnection wykorzystywany przez polecenie. 7DZáDFLZRüSU]HFKRZXMHSROHFHQLH64/OXESURFHGXURVDG]RQNWyUDPD ]RVWDüZ\NRQDQDSU]H]SROHFHQLH 7DZáDFLZRüPDWDNLHVDPRSU]H]QDF]HQLHFRDQDORJLF]QDZáDFiZRüRELHNWX Connection. 7DZDUWRüLQIRUPXMH(UyGáRGDQ\FKRQDWXU]HWHNVWXSROHFHQLDMDNL]RVWDáPX SU]HND]DQ\:áDFLZRüPR*HSRVLDGDüMHGQ]ZLHOXUy*Q\FKZDUWRFLMHGQDN QDMF]FLHMVSRW\NDQHVText (1) (tekst) oraz Stored Procedure (4) (procedura osadzona). :ádflzrünrqwuroxmhf]\su]hgz\nrqdqlhpsrohfhqld]rvwdqlhvwzru]rqd jego skompilowana wersja. 7DEHOD Metody obiektu Command 0HWRGD CreateParameter Execute 2SLV.D*G\RELHNWCommandSRVLDGDNROHNFMRELHNWyZParameter. Ta metoda VáX*\GRGRGDQLDQRZHJRRELHNWXGRWHMNROHNFML:LFHMLQIRrmacji na ten temat ]QDMG]LHV]ZWDEHOLJG]LH]RVWDáDSU]HGVWDZLRQDNROHNFMD Parameters. Podstawowa metoda obiektu Command. Powoduje ona wykonanie polecenia wrsduflxrgrvwduf]\flhodlqirupdfml0hwrgdwdpr*h]zuyflürelhnww\sx Recordset.

&]öè,, 7DEHOD Kolekcje obiektu Command Kolekcja Properties Parameters Opis -DNZND*G\PRELHNFLH$'2WDN*HLWXWDMNROHNFMDProperties zawiera ZV]\VWNLHZáDFLZRFLRELHNWXRUD]RGSRZLDGDMFHLPZDUWoFL Jest to kolekcja obiektów Parameter2GSRZLDGDMRQHSDUDPHWURP LVWQLHMF\PZSROHFHQLX64/EG(ZSURFHGXU]HRVDG]RQHMUHSUH]HQWowanej przez dany obiekt Command. 2JyOQLHU]HF]ELRUFRELHNW CommandX*\ZDQ\MHVWGRZ\NRQ\ZDQLD EDUG]LHM ]ár*r nych operafmlqded]dfkgdq\fksurvwh]ds\wdqldrud]rshudfmhqduhnrugdfkv]dzwy- F]DMUHDOL]RZDQHSU]\X*\FLXRSLVDQHJRZQDVWSQHMVHNFMLRELHNWXRecordset. 2ELHNW5HFRUGVHW.D*GDJUXSDUHNRUGyZ±QLH]DOH*QLHRGWHJRF]\MHVWRQDZ\QLNLHPZ\NRQDQLD]DS\ta- QLDF]\WH*VWDQRZLFDá]DZDUWRüWDEHOL±MHVWUHSUH]HQWRZDQDSU]H]RELHNWRecordset7HJRRELHNWXEG]LHV]X*\ZDáQLHPDOGRZV]\VWNLFKRSHUDFMLQDED]DFKGDQ\FK MHVWWRWDN*HQDMEDUG]LHM]áR*RQ\RELHNW$'2-HGQDNZZLNV]RFLZ\SDGNyZMHVWRQ wykorzystywany w bardzo prosty sposób. Listing 11.2 demonstruje popularne wykorzystanie obiektu Recordset±SRELHUDQLHLZ\ZLetlanie wyników zapytania. /LVWLQJStosowane zbiorów rekordów i obiektu Recordset 1. <% 2. Dim Conn 3. Dim RSAutorzy 4. Dim SQL 5. 6. Set Conn = Server.CreateObject( "ADODB.Connection" ) 7. Set RSAutorzy = Server.CreateObject( "ADODB.Recordset" ) 8. Conn.Open "WEBSQL;UID=sa;PWD=;" 9. SQL = "SELECT * FROM Autorzy" 10. RSAutorzy.Open SQL, Conn 11. 12. Do While Not RSAutorzy.EOF 13. Response.Write "<P>" & RSAutorzy("Au_Imie") & "</P>" 14. Response.Write vbcrlf 15. RSAutorzy.MoveNext 16. Loop 17. 18. RSAutorzy.Close 19. Conn.Close 20. %> : SU]HGVWDZLRQ\P SRZ\*HM IUDJPHQFLH NRGX Z OLQLDFK ± GHILQLRZDQH V Z\ NRU]\VW\ZDQH ]PLHQQH -HV]F]H UD] SRZWyU] *H QLH MHVW WR NRQLHF]QH OHF] VWDQRZL dobry zwyczaj programistyczny. W linii 6. jest tworzony egzemplarz obiektu Connection, a w linii 7. egzemplarz obiektu RecordsetREDWHRELHNW\EGZ\NRrzysty-

5R]G]LDä 7ZRU]HQLHDSOLNDFMLED]GDQ\FKSU]\X\FLXRELHNWÑZGDQ\FK$FWLYH; ZDQHZGDOV]HMF]FLNRGX1DVWSQLHZOLQLLMHVWRWZLHUDQ\RELHNWConnection, NWyU\ EG]LH SRWU]HEQ\ GR RWZDUFLD RELHNWX Recordset. W linii 9. polecenie SQL ]RVWDMH]DSLVDQHZ]PLHQQHMNWyUDMHVWQDVWSQLHX*\WDZOLQLLZZ\ZRáDQLXPH tody Open : Z\ZRáDQLX WHM PHWRG\ V SRGDZDQH GZD DUJXPHQW\ ± SROHFHQLH 64/ oraz obiekt Connection. Po otworzeniu zbioru rekordów, w liniach 12. 16. jest przedstawiony najbardziej popularny sposób operowania na nim. Do przetworzenia FDáHM]aZDUWRFL]ELRUXUHNRUGyZZ\VWDUF]\MHGQDSURVWDSWOD:W\PZ\SDGNXZOLQLL XPLHV]F]RQ\ ]RVWDá ZDUXQHN SWOL ± RSAutorzy.EOF±ZDUWRü WHM ZáDFLZRFL SU]\MPLHZDUWRüTRUE (prawda) gdy zostanie pobrany ostatni rekord zbioru rekordów. /LQLHLWZRU]OLQLNRGX+70/]DZLHUDMFZDUWRüSRODAu_Imie zbioru re- NRUGyZ 1D VDP\P NRFX ]QDMGXMH VL QLeVá\FKDQLH ZD*QD OLQLD ± RSAutorzy.MoveNext±NWyUDSU]HVXZDZVND(QLNUHNRUGyZQDNROHjny rekord, zapobiegamf W\PVDP\PSRZVWDQLXQLHVNRF]RQHMSWOL 2SUyF] NLONX SURVW\FK ZáDFLZRFL L PHWRG SU]HGVWDZLRQ\FK Z SRZ\*V]\P SU]\NáD dzie, obiekt Recordset]DZLHUD ZLHOH LQQ\FK X*\WHF]Q\FK ZáDFLZRFL L PHWRG R któ- U\FKSRZLQLHQHZLeG]LHü0HWRG\ZáDFLZRFLLNROHNFMHRELHNWXRecordset zostaá\ przedstawione w tabelach 11.7, 11.8 oraz 11.9. 7DEHOD Metody obiektu Recordset 0HWRGD Open Close AddNew Update CancelUpdate UpdateBatch CancelBatch 2SLV -HVWWRPHWRGDNWyU]D]Z\F]DMEG]LHV]Z\ZRá\ZDáZSLHUZV]HMNROHjQRFL SR]ZDODRQDQD]DLQLFMDOL]RZDQLHRELHNWXLZ\SHáQLHQLHJRSRV] ukiwanymi ZDUWRFLDPL0R*HV]SRGDüRELHNWConnection, który bdzie Z\NRU]\VW\ZDQ\]W\P]ELRUHPUHNRUGyZOXESDUDPHWU\SRáF]eQLD-HOLQLH SRGDV]RELHNWX&RQQHFWLRQWRGODND*GHJRQRZRRWZRU]onego zbioru rekordów EG]LHWZRU]RQHQRZHSRáF]HQLH -HVWWRPHWRGDNWyU]D]Z\F]DMEG]LHV]Z\ZRá\ZDáQDVDP\PNRFXQLV]F]\ ona wszystkie dane przechowywane w obiekcie i pozwala na ponowne Z\ZRáDQLHPHWRG\Open. Tworzy nowy, pusty rekord. =DSLVXMHZED]LHGDQ\FK]PLDQ\MDNLHZSURZDG]LáHZDNWXDOQ\PUekordzie. 8VXZD]PLDQ\MDNLH]RVWDá\ZSURZDG]RQHZDNWXDOQ\PUHNRUG]LHMH OLQLH ]RVWDáDZF]HQLHMZ\ZRáDQDPHWRGDUpdate. 1LHNWyU]\GRVWDUF]\FLHOHGDQ\FKSR]ZDODMQDZ\NRU]\VWDQLH]ELRUyZUHNRUGyZ Z\NRQXMF\FKZLHOHRSHUDFMLDNWXDOL]DFMLZW\PVDP\PF] avlh]dslvxmf poszczególne modyfikacje dokonane do momentu wywoádqldwhmphwrg\ 8VXZDRF]HNXMFHQDREVáXJZVDGRZH]DGDQLDDNWXDOL]DFML'RP\OQLHV XVXZDQHZV]\VWNLHRF]HNXMFH]DGDQLDDNWXDOL]DFMLMHGQDNPR*HV]SRGDü argument, który ograniczy usuwanie do aktualnego rekordu lub rekordów zgodnych z podanym filtrem.

&]öè,, 7DEHOD Metody obiektu 5HFRUGVHW±FLJGDOV]\ 0HWRGD Move MoveNext MovePrevious MoveLast MoveFirst NextRecordset Save Requery Resync Delete GetRows 2SLV 7DPHWRGDSR]ZDODQDSU]HVXQLFLHVLRRNUHORQLORüUHNRUGyZGRSU]RGX OXEGRW\áXZ]ELRU]HUHNRUGyZ3U]HVXQLFLHPR*HRGE\ZDüVLZ]JOGHP DNWXDOQHJRUHNRUGXMHOLQLH]RVWDQLHSRGDQ\GUXJLSDUDPHWUZ\ZRáDQLD PHWRG\OXEZ]JOGHPGRZROQHJRLQQHJRUHNRUGX]ELRUXUHNRUGyZ 0HWRGDSRZRGXMHSU]HMFLHGRNROHMQHJRUHNRUGXZ]ELRU]HUHNRUGyZ WPRPHQFLHJG\Z\ZRáDV]WPHWRG]QDMGXMFVLSR]DRVWDWQLPUHNRUGHP ]ELRUXJG\ZDUWRüZáDFLZRFLEOF wynosi true), jest generozdq\eág 3U]HFLZLHVWZRPHWRG\MoveNextSRZRGXMHSU]HMFLHGRUHNRUGX SRSU]HG]DMFHJRDNWXDOQ\UHNRUG-HOLDNWXDOQ\PUHNRUGHPMHVWSLHUwszy UHNRUG]ELRUXJG\ZDUWRüZáDFLZRFLBOF wynosi true), generowany jest EáG 7DPHWRGDSRZRGXMHSU]HMFLHGRRVWDWQLHJRUHNRUGX]ELRUX-HOLDNWualnym UHNRUGHPMHVWZáDQLHRVWDWQLUHNRUG]ELRUXWRZ\NRQDQLHWHMPHWRG\QLHGDMH *DGQHJRUH]XOWDWX Jest to metoda podobna do metody MoveLastSRZRGXMHRQDSU]HMFLHGR SLHUZV]HJRUHNRUGX]ELRUXMHGQDNQLHGDMH*DGQ\FKHIHNWyZMHOLDNWXDOQ\P rekordem jest pierwszy rekord zbioru. 0R*OLZHMHVWZ\GDQLHSROHFHQLDNWyUHEG]LH]ZUDFDáRZLFHMQL*MHGHQ]ELyU UHNRUGyZ0R*HVLWR]GDU]\üSU]\Z\ZRá\ZDQLXSURFHGXURVadzonych lub SU]\NRU]\VWDQLX]H]áR*RQ\FKSROHFH64/WDNLFKMDNWRSU]HGVWDZLRQH SRQL*HM SELECT ID FROM Goscie; SELECT * FROM KartaZakupowa 7DPHWRGDSRZRGXMHZ\NRQDQLHQDVWSQHJRSROHFHQLDZJUXSLHL]ZUDFDMHJR wyniki. 7DPHWRGDSRELHUDMDNRDUJXPHQWQD]ZSOLNXDQDVWSQLH]DSLVXMHZQLP DNWXDOQ\]ELyUUHNRUGyZ5HNRUG\WHPRJ]RVWDü]DáDGRZDQHZSU]\V]áRFL SRSU]H]Z\ZRáDQLHPHWRG\OpenLSRGDQLHSOLNXMDNR(UóGáDGDQ\FK 7DPHWRGDMHVWHNZLZDOHQWHP]DPNQLFLDLSRQRZQHJRRWZRU]HQLD]ELoru UHNRUGyZ±SRZRGXMHRQDSRQRZQHZ\NRQDQLHSROHFHQLD-H OLDNWualnie SRGDQHNU\WHULDVSHáQLDMZLFHMUHNRUGyZQL*SRSU]HGQLRWRQRZHUHNRUG\ WDN*HEGGRVWSQHZ]ELRU]H 1LHQDOH*\P\OLüWHMPHWRG\]PHWRGRequery. Ta metoda jedynie porównuje GDQH]QDMGXMFHVLZUHNRUGDFK]GDQ\PLSU]HFKRZ\ZDQ\PLQDVHUZHU]H ixdnwxdoqldzduwrflz]elru]huhnrugyz$ujxphqwrsfmonalny pozwala na V\QFKURQL]DFMZ\áF]QLHDNWXDOQHJRUHNRUGXOXEUHNRUGyZVSHáQLDMF\FK podane kryteria. Ta metoda usuwa aktualny rekord. 7DPHWRGD]ZUDFDGZXZ\PLDURZWDEOLFZDUWRFLW\SXYDULDQW]DZLeUDMF SDU\SROHZDUWRü'RGDWNRZHDUJXPHQW\SR]ZDODMQDRNUHOHQLHLOHUHNRUGyZ PD]RVWDüSREUDQ\FKZWDNLVSRVyERUD]RGNWyUHJRUHNRrGXQDOH*\UR]SRF]ü SRELHUDQLH'RP\OQLHVSRELHUDQHZV]\VWNLHUekordy z aktualnego zbioru.

5R]G]LDä 7ZRU]HQLHDSOLNDFMLED]GDQ\FKSU]\X\FLXRELHNWÑZGDQ\FK$FWLYH; 7DEHOD Metody obiektu 5HFRUGVHW±FLJGDOV]\ 0HWRGD Clone Supports 2SLV 7DPHWRGDWZRU]\]ELyUUHNRUGyZ]DZLHUDMF\NRSLDNWXDOQ\FKGDQ\FK 7DPHWRGDSR]ZDOD&LQDRNUHOHQLHMDNLHPR*OLZRFLIXQNFMRQDOQHV XGRVWSQLDQHSU]H]]ELyUUHNRUGyZFKRG]LWXRPR*OLZRFLWDNLHMDN dodawanie nowego rekordu, przechodzenie do poprzedniego rekordu, itp. 7DEHOD :ádflzrflrelhnwxrecordset :ädflzrè EOF BOF MaxRecords AbsolutePosition PageSize PageCount AbsolutePage CursorType 2SLV.RQLHFSOLNXSR]ZDODQDRNUHOHQLHF]\DNWXDOQ\UHNRUG]QDMGXMHVLSR]D RVWDWQLPUHNRUGHP]ELRUXUHNRUGyZ7DZáDFLZRüMHVWSowszechnie VWRVRZDQDGRRNUHOHQLDNLHG\QDOH*\]DNRF]\üSWOREVáXJXMFUHNRUG\ zbioru rekordów. 3RF]WHNSOLNXZáDFLZRüSRGREQDGR(2)]ZUDFDMHGQDNZDUWRütrue, MHOLDNWXDOQ\UHNRUG]QDMGXMHVLSU]HGSLHUZV]\PUHNRUGHP]ELRUX-HOLRELH ZáDFLZRFL±EOF i BOF±PDMZDUWRütrue, to oznaf]dwr*h]elyu rekordów jest pusty. 7DZáDFLZRüNRQWUROXMHLOHUHNRUGyZMHVW]ZUDFDQ\FKMDNRZ\QLN ]DS\WDQLD-HMZDUWRüPR*QDRNUHOLüZ\áF]QLHSU]HGZ\ZRáDQLHPPHWRG\ OpenNLHG\]ELyUUHNRUGyZMHVW]DPNQLW\ 7ZáDFLZRüPR*QDZ\NRU]\VWDüGRRNUHOHQLDSR]\FMLDNWXDOQHJRUHNRUGX Z]JOGHPSRF]WNXSOLNX 7DZáDFLZRüZVSyáSUDFXMH]ZáDFLZRFLDPLAbsolutePage oraz PageCountLZUD]]QLPLXPR*OLZLDSRG]LHOHQLH]ELRUXUHNRUGyZQD ORJLF]QHVWURQ\7DZáDFLZRü]ZUDFDEG(XVWDZLDLORüUHNRUGyZ PLHV]F]F\FKVLZMHGQHMORJLF]QHMVWURQLH 7DZáDFLZRü]ZUDFDLORüORJLF]Q\FKVWURQZ]ELRU]HUHNRUGyZ-HVWRQD SU]H]QDF]RQDW\ONRGRRGF]\WXOHF]MHMZDUWRü]PLHQLDVLZUD]]H]PLDQ ZDUWRFLZáDFLZRFLPageSize. 7DZáDFLZRüRNUHODORJLF]QVWURQQDNWyUHM]QDMGXMHVLDNWXDOQ\UHNRUG :ádflzrüwpr*qdxvwdzlüfrsrzrgxmhsu]hqlhvlhqlhdktualnego rekordu QDSR]\FMSLHUZV]HJRUHNRUGXSRGDQHMVWURQ\ 7DZáDFLZRü]ZUDFDMHGQ]NLONXZDUWRFLForward Only (0), Keyset (1), Dynamic (2EG(Static (3-HMZDUWRüPR*QDRNUHOLüZ\áF]QLH ZPRPHQFLHJG\]ELyUUHNRUGyZMHVW]DPNQLW\DVáX*\RQDGRRNUHODQLD VSRVREXZMDNL]ELyUUHNRUGyZPD]RVWDüRWZRU]RQ\-HMZDUWR üpr*qd WDN*HSRGDüMDNRDUJXPHQWZ\ZRáDQLDPHWRG\Open2SLVND*GHJRW\SX NXUVRUDRUD]MHJR]QDF]HQLH]RVWDáRZ\MDQLRQHZGDOV]HMF]FLUR]G]LDáX

&]öè,, 7DEHOD :ádflzrflrelhnwx5hfrugvhw±fljgdov]\ :ädflzrè CacheSize Recordcount Source EditMode ActiveConnection LockType Bookmark Filter Status 2SLV 7DZáDFLZRüRNUHODLORüUHNRUGyZNWyUDMHVWMHGQRUD]RZRSRELHUana od GRVWDUF]\FLHODGDQ\FK-HMGRP\OQDZDUWRüZ\QRVL1, co oznaf]d*hw\onr DNWXDOQ\UHNRUGMHVWSU]HFKRZ\ZDQ\ZSDPLFLSRGUFzQHM-HOLZDUWRü ZáDFLZRFLEG]LHZ\*V]DWRUHNRUG\SU]HFKRZyZDQHZSDPLFLSRGUF]QHM QLHNRQLHF]QLHPXV]RGSRZLDGDüU]HF]ywistym danym przechowywanym wed]lhpr*qdmhmhgqdnrgzlh*\ü]dsrprfphwrg\resync. 7DZáDFLZRüMHVWSRZV]HFKQLHZ\NRU]\VW\ZDQDMHGQDNQLH]DZV]HMHM ZDUWRüMHVWSRSUDZQDOXEZRJyOHGRVWSQD-HOL]ELyUUHNRUGyZÄQLHZLH LOHUHNRUGyZZQLP]QDMGXMHVLOXEQLHMHVWZVWDQLHRNUeOLüLFKLORFLWR ZDUWRüWHMZáDFLZRFLZ\QRVL 12JyOQLHU]HF]ELRUFZDUWRFLWHM ZáDFLZRFLQLHPR*QDX]QDü]DSHZQD*GRPRPHQWXJG\]RVWDQLH odwiedzony ostatni rekord zbioru (MoveLast). 7DZáDFLZRü]DZLHUDWHNVWSROHFHQLD64/MDNLHPD]RVWDüZ\NRQDQHOXE QD]ZSURFHGXU\RVDG]RQHMMHMZDUWRüPR*QDSRGDüEH]SRUHdnio przed RWZRU]HQLHP]ELRUXUHNRUGyZOXEMDNRDUJXPHQWZ\ZRáDQLDPHWRG\ Open. 2NUHODVWDQDNWXDOQHJRUHNRUGXLPR*HSU]\MPRZDüMHGQ]QDVWSXMcych ZDUWRFLNone (0) (brak), Edit In Progress (1) (edycja w toku), Add In Progress (2GRGDZDQLHZWRNXEG(Deleted (3XVXQLW\ 7DZáDFLZRüVáX*\RG]ZUDFDQLDOXEXVWDZLDQLDRELHNWXConnection wykorzystywanego przez aktualny zbiór rekordów. 2NUHODMDNLURG]DMEORNRZDQLD]RVWDáQDU]XFRQ\QDDNWXDOQLHHG\W owany UHNRUG:DUWRüPR*HSRVLDGDüMHGQ]QDVWSXMF\FKZDUWRFLRead-Only (1) (tylko do odczytu), Pessimistic (2) (pesymistyczna), Optimistic (3) (optymistyczna), Batch Optimistic (4) (wsadowa optymistyczna). Znaczenia poszczególnych typów blondg]rvwdá\srgdqhzgdov]hmf]fl UR]G]LDáX -HOL]ELyUUHNRUGyZXPR*OLZLDZ\NRU]\VW\ZDQLH]DNáDGHNFRPR*HV] VSUDZG]Lü]DSRPRFPHWRG\SupportsWREG]LHV]PyJá]DSLVDüZDUWRü WHMZáDFLZRFLZ]PLHQQHM:SU]\V]áRFLEG]LHV]PyJáZUyFLü EH]SRUHGQLRGRWHJRVDPHJRUHNRUGXSU]\SLVXMFWHMZáDFiZRFLZDUWRü ]DSLVDQZ]PLHQQHM:DUWRüZáDFLZRFLMHVWXQLNDOQDGODGDQHJR]ELRUX UHNRUGyZ'ZDLGHQW\F]QHUHNRUG\ZUy*Q\FK]ELoUDFKQLHPRJPLHüWHM VDPHMZDUWRFLZáDFLZRFLBookmark, jednak wszystkie rekordy obiektu RecordsetVWZRU]RQHJR]DSRPRFPetody CloneEGPLDá\WDNVDP ZDUWRüWHMZáDFLZRFLMDNLFKRU\JLQDá\ 7DZáDFLZRüRNUHODZDUXQHNMDNLEG]LHVSUDZG]DQ\GODZV]\Vtkich UHNRUGyZDNWXDOQLH]QDMGXMF\FKVLZ]ELRU]H:VNáDG]ELRUXUHNRUGyZ ZHMGW\ONRWHUHNRUG\NWyUHVSHáQLSRGDQHNU\WHULD.U\WeULDWHPRJ SU]\ELHUDüSRVWDüQD]ZD3ROD ZDUWRü, np.: ("IDGoscia = 123"). =ZUDFDDNWXDOQ\VWDQUHNRUGX]XZ]JOGQLHQLHPZV]HONLFKSURFHGXU masowych oraz procedur osadzonych.

5R]G]LDä 7ZRU]HQLHDSOLNDFMLED]GDQ\FKSU]\X\FLXRELHNWÑZGDQ\FK$FWLYH; 7DEHOD :ádflzrflrelhnwx5hfrugvhw±fljgdov]\ :ädflzrè CursorLocation MarshalOptions 2SLV 7DZDUWRüQLHPD]DVWRVRZDQLDZ$63JG\*RNUHODRQDF]\NXUVRU]RVWDá VWZRU]RQ\QDVHUZHU]HF]\WH*QDNRPSXWHU]HX*\WNRZQLND3U]\ wykorzystaniu ADO w ASP kursor zawsze jest tworzony na serwerze. 3RGREQLHMDNZSU]\SDGNXZáDFLZRFL&XUVRU/RFDWLRQWDN*HLWDZáDFLZRü PDZSá\ZQDVSRVyEZMDNL]ELyUUHNRUGyZMHVWSU]HQoV]RQ\SRPLG]\ VHUZHUHPDNRPSXWHUHPX*\WNRZQLND:SU]\SDGNX$63QLHMHVWRQD wykorzystywana. 7DEHOD Kolekcje obiektu Recordset.ROHNFMD Properties Fields 2SLV -DNZND*G\PRELHNFLH$'2WDN*HLWXWDMNROHNFMDProperties zawiera ZV]\VWNLHZáDFLZRFLRELHNWXRUD]RGSRZLDGDMFHLPZDUWoFL =DZLHUDJUXSRELHNWyZFieldSRMHGQ\PGODND*GHMNROXPQ\]ELRUXUHNRUGyZ 7DNROHNFMDMHVWSU]\GDWQDGRRNUHODQLDZV]\VWNLFKNROXPQ]ELRUXUHNRUGyZJG\ QLHV]QDQHLFKQD]Z\LSRáR*HQLH :\NRU]\VWDQLH$'2GRVWZRU]HQLD DSOLNDFML)RUXP8\WNRZQLNÑZ $E\SRND]DüZMDNLVSRVyEQDOH*\X*\ZDüRELHNWyZRPyZLRQ\FKZSRSU]HGQLHMF] ci rozdziaáxzwhmvhnfml]rvwdqlhsu]hgvwdzlrq\nrpsohwq\nrgiruxpx*\tkowników. 7HQV\VWHPEG]LHZ\NRU]\VW\ZDüED]GDQ\FK0LFURVRIW$FFHVVMHGQDN]HZ]JOGX QD WR L* SRáF]HQLH ] GDQ\PL MHVW UHDOL]RZDQH SRSU]H] 2'%& Z\NRU]\VWDQLH LQQHM ED]\GDQ\FKMDNQDSU]\NáDG64/6HUYHU]DMPXMHMHG\QLHNLONDPLQXW6\VWHP]RVWD nie stworzony w sposób jak najprostszy, bez wykorzyvwdqld *DGQ\FK REUD]NyZ DQL Z\P\OQ\FKVSRVREyZIRUPDWRZDQLD7DNLSURMHNWV\VWHPX]RVWDáSRG\NWRZDQ\FKFL ]DSHZQLHQLDMDNQDMZLNV]HMSURVWRW\NRGXDQLHGODWHJR*HQLHMHVWRQZymagany. %D]öGDQ\FKRUD]FDä\NRG$63PRHV]]QDOHèQDZLWU\QLH::::\ GDZQLFWZD+(/,21SRGDGUHVHP ftp://ftp.helion.com.pl/przyklady/asp.zip. 3RVNRSLRZDQLXSOLNXDUFKLZXPUR]SDNXMJRDQDVWöSQLHXPLHèQD VHUZHU]HFDäñ]DZDUWRèNDUWRWHNLRozdzial-11

&]öè,, 3UH]HQWDFMDV\VWHPX $SOLNDFMHIRUXPX*\WNRZQLNyZVGRVWSQHMX*RGGDZQD±LVWQLHMGáX*HMQL*,QWHUQHW 3RF]WNoZRLVWQLDá\SRGSRVWDFL%%6yZ±Bulletin Boards Services miejsc, do których PRJáHSU]HVyáDüS\WDQLDF]\WDüLQQHS\WDQLDDQDZHWF]DVDPLRWU]\P\ZDüRGSRwie- G]L%%6\LVWQLHMFDá\F]DVMHGQDNQLHPDOZFDáRFL]RVWDá\]DVWSLRQHRGSRZLHdnikami internetowymi grupami dysnxv\mq\pl7hv\vwhp\nwyu\fksu]\nádg]rvwdásu]hgvwd wioq\ QD U\VXQNX V QLHPDO LGHnW\F]QH 8*\WNRZQLF\ ]D SRPRF VSHFMDOQHJR oprogramowania takiego jak Outlook Express, przejogdmzlagrprfllwzru]zádvqh 5\VXQHN *UXS\G\VNXV\MQHV SRSXODUQF]FL Internetu *UXSDG\VNXV\MQDSU]HGVWDZLRQDQDU\VXQNXLVWQLHMHZU]HF]\ZL VWRFLLMHVWEDUG]RSU]\GDWQDGODSURJUDPLVWÑZ$630RQDMñ]QDOHè QD VHUZHU]H msnews.microsoft.com D XF]HVWQLFWZR Z QLHM QLH Z\ PDJDSRGDZDQLDMDNLHJRNROZLHNKDVäDDQLLGHQW\ILNDWRUDX\WNRZQLND 6\VWHP NWyU\ VWZRU]\V] ]D SRPRF$63EG]LH PXVLDá G\VSRQRZDü W\PL VDP\PL PR*OLZRFLDPLFRLVWQLHMFHJUXS\G\VNXV\MQH/LVWDIXQNFMLV\VWHPXSRPR*H&L]Dpro- MHNWRZDüNRQLHF]QHVWURQ\RUD]VWUXNWXUED]\GDQ\FK X 8*\WNRZQLF\PXV]E\üZVWDQLHWZRU]\üQRZHZLDGRPRFL X 8*\WNRZQLF\ PXV] E\ü Z VWDQLH SU]HJOGDü ZLDGRPRFL XWZRU]RQH SU]H] QLFKVDP\FKRUD]SU]H]LQQ\FKX*\WNRZQLNyZ X 8*\WNRZQLF\PXV]E\üZVWDQLHRGSRZLDGDüQDZLDGRPRFLDLFKRGpowie- G]L SRZLQQ\ E\ü SUH]HQWRZDQH Z WDNL VSRVyE DE\ E\áR ZLDGRPR L*V RQH ]ZL]DQH]RU\JLQDOQZLDGRPoFL

5R]G]LDä 7ZRU]HQLHDSOLNDFMLED]GDQ\FKSU]\X\FLXRELHNWÑZGDQ\FK$FWLYH; X 8*\WNRZQLF\SRZLQQLE\üZVWDQLHXVXQüZLDGRPRüNWyUVWZRU]\OLMHGQDN QLHPRJG\VSRQRZDüPR*OLZRFLXVXZDQLDZLDGRPRFLVWZRU]RQ\FKSU]H] LQQ\FKX*\WNRZQLNyZ X 8*\WNRZQLF\PXV]E\üZMDNLVSRVyELGHQW\ILNRZDQLDE\LFKZLDGRPRFL PRJá\E\üR]QDF]DQH 7HIXQNFMHQLHPDOEH]SRUHGQLRUHSUH]HQWXMWRFRV\VWHPPXVLURELüMHGQDNGRGDWNR wo stwau]dmnlondqlhmdzq\fkz\pdjd0ldqrzlflhv\vwhppxvlsu]hfkrz\zdüzld GRPRFLRUD]OLVWX*\WNRZQLNyZLLFKLQIRUPDFMLLGHQW\ILNDF\MQ\FK %D]DGDQ\FK 7DEHOD Tabela User 3LHUZV]\PHWDSHPEG]LHVWZRU]HQLHED]\GDQ\FKVSHáQLDMFHMSRGDQHZ\PDJDQLD.R nief]qh EG]LH Z\NRU]\VWDQLH MHGynie dwóch tabel: jednej do przechowywania listy X*\WNRZQLNyZLGUuJLHMGRSU]HFKRZ\ZDQLDZLDGRPRFL3RODWDEHORUD]LFKW\S\]R VWDá\SU]HGVWDZLRQHZWDEHODFKRUD] 1D]ZDSROD 7\SSROD 'äxjrèsrod ID AutoNumer QLHGRVWSQD FirstName Tekst 30 LastName Tekst 50 Email Tekst 50 LastVisit Data/Godzina QLGRVWSQD UserID Tekst 20 Password Tekst 20 7DEHOD Tabela Message 1D]ZDSROD 7\SSROD 'äxjrèsrod ID AutoNumer QLHGRVWSQD UserID Liczba /LF]EDFDáNRZLWDGáXJD Parent Liczba /LF]EDFDáNRZLWDGáXJD Subject Tekst 50 Date Data/Godzina QLHGRVWSQD Message Memo QLHGRVWSQD

&]öè,, $E\XPR*OLZLüDSOLNDFML$63NRU]\VWDQLH]WHMED]\GDQ\FKEG]LHV]PXVLDáXPLHFLü MQDVHrZHU]H :::LVWZRU]\üGODQLHMQD]Z (UyGáDGDQ\FK2'%&SOLNRZOXE V\VWHPRZ : SU]HdVWDZLRQ\FK GDOHM SU]\NáDGDFK ]DáR*\áHP *H WR ]URELáHRUD]*H QDGDáHQD]ZLH(UyGáDGDQ\FKQD]ZÄ)RUXP :LFHMLQIRUPDFMLGRW\F]F\FKWZRrze- QLDQD]Z(UyGHáGDQ\FK]QDMG]LHV]ZSoprzednim rozdziale.,ghqw\ilndfmdx\wnrzqlnñz 5\VXQHN 8*\WNRZQLF\V identyfikowani za SRPRFWHMVWURQ\ logowania =SXQNWXZLG]HQLDX*\WNRZQLNyZSLHUZV]\PNURNLHPSU]\NRU]\VWDQLX]IRUXPEG]LH zalogowaqlhvlgrv\vwhpx:w\pzádqlhplhmvfxsrzlqlhq]df]\qdüvl7zymnrg.rg SU]HGVWDZLRQ\ QD OLVWLQJX WZRU]\ VWURQ ORJRZDQLD NWyU SRND]DQR QD U\ sunku 11.2. /LVWLQJ7DVWURQD:::SR]ZDODX*\WNRZQLNRPQD]DORJRZDQLHVLGRV\VWHPX/RJowanie.htm) 1. <HTML> 2. <HEAD> 3. 7,7/(!/RJRZDQLHGR)RUXP8*\WNRZQLNyZ7,7/(! 4. </HEAD> 5. 6. <BODY BACKGROUND=""> 7. 8. +$/,*1 &(17(5!)RUXP8*\WNRZQLNyZ%5!=DORJXMVL+! 9. 10. <FORM ACTION="ObslugaLogowania.asp" METHOD="POST" TARGET="_parent"> 11. <DIV ALIGN="CENTER"> 12. <CENTER> 13. <TABLE BORDER="0"> 14. <TR> 15. 7'!67521*!,'X*\WNRZQLND67521*! 16. <INPUT TYPE="TEXT" SIZE="20" NAME="UserName"></TD> 17. </TR> 18. <TR> 19. 7'!67521*!+DVáR67521*! 20. <INPUT TYPE="PASSWORD" SIZE="20" NAME="Password"</TD> 21. </TR>

5R]G]LDä 7ZRU]HQLHDSOLNDFMLED]GDQ\FKSU]\X\FLXRELHNWÑZGDQ\FK$FWLYH; 22. <TR> 23. </TR> 24. <TR> 25. <TD> 26.,13877<3( 68%0,71$0( /RJLQ9$/8( =DORJXMVLGR ÖREV]DUXX*\WNRZQLNyZ! 27.,13877<3( 5(6(71$0( &]\ü9$/8( :\F]\üIRUPXODU]! 28. </TD> 29. </TR> 30. </TABLE> 31. </CENTER> 32. </DIV> 33. <DIV ALIGN="CENTER"> 34. <CENTER> 35. +!-HOL]DSRPQLDáHOXE(OHSRGDáHVZRMHKDVáRWR 36. <A HREF="ZapomnianeHaslo.asp" TARGET="_parent">kliknij Ötutaj</A> 37..</H6> 38. </CENTER> 39. </DIV> 40. <DIV ALIGN="CENTER"> 41. <CENTER> 42. +!%,*!1RZ\X*\WNRZQLNXD+5() 1RZ\8]\WNRZQLNDVS!NOLNQLM Ötutaj</A> 43..</BIG></H6> 44. </CENTER> 45. </DIV> 46. </FORM> 47. </BODY> 48. </HTML> :LNV]RüVWURQ\SU]HGVWDZLRQHMQDOLVWLQJXMHVWEDUG]RSURVW\PNRGHP+70/±QLH MHVW WR VWURQD $63 3RQL*HM Z\MDQLRQH ]RVWDá\ OLQL NWyUH PRJ ]DLQWHUHVRZDü &LHELH MDNRSURJUDPLVW/LQLD]DZLHUDMFD]QDF]QLNRWZLHUDMF\IRUPXODU]+70/RNUH la plik, jaki zostanie wykonaq\srnolnqlflx QD SU]\FLVNX 6XEPLW Z FHOX REVáX*HQLH daq\fk ZSLVDQ\FK Z IRUPXODU]X : W\P SU]\SDGNX GR REVáXJL GDQ\FK VáX*\ SOLN ObslugaLogowania.aspSRGDZDQLHFLH*NLQLHMHVWNRQLHF]QHJG\*SOLNMHVWSU]H FKRZ\ZDQ\ZWHMVDPHMNDUWRWHFHFRIRUPXODU]:OLQLDFKL]RVWDá\XPLHV]F]RQH SROD VáX*FH RGSRZLHGQLR GR SRGDQLD QD]Z\ X*\WNRZQLND L KDVáD :D*Q\P V]F]HgóáHPQDMDNLQDOH*\]ZUyFLüXZDJZW\FKOLQLDFKVQD]Z\QDGDQHREXSRORPJG\* pováx*rqhgrsreudqldzduwrflw\fksyo]nrohnfmlrequest.form w programie ob- VáXJXMF\PIRrmularz. Kod przedstawiony na listingu 11.3 tworzy prosty formularz. Strona, która w rzeczywi- VWRFLáF]\VL]ED]GDQ\FKLVSUDZG]DSRSUDZQRüLQIRUPDFMLRWR*VDPRFLX*\WNR wnind MHVW RNUHORQD MDNR ÄFHO IRUPXODU]D MHVW WR VWURQD ObslugaLogowania.asp. Inne formularze HTML i odsrzldgdmfhlpvnu\sw\$63]rvwdá\vwzru]rqhgodreváxjl UHMHVWUDFMLQRZ\FKX*\WNRZQLNyZRUD]SoPRF\X*\WNRZQLNRPNWyU]\]DSRPQLHOLVZR MHJRKDVáD 0LHMVFHPZNWyU\PVVSUDZG]DQHLQIRUPDFMHSRGDQHSU]H]X*\WNRZQLNDMHVWSURce- GXUDREVáXJLVWURQ\ORJRZDQLDSU]HGVWDZLRQDQDOLVWLQJX%D]XMFQDSRSUDZQRFL SRGDQHJR LGHQW\ILNDWRUD X*\WNRZQLND RUD] KDVáD WD VWURQD PXVL ]GHF\GRZDü MDN RE VáXJLZDüSRSUDZQHRUD]QLHSRSUDZQHSUyE\ORJRZDQLD

&]öè,, /LVWLQJWeryfikacja formularza logowania z listingu 11.3 1. <HTML> 2. <HEAD> 3. 7,7/(!/RJRZDQLHX*\WNRZQLNDGRV\VWHPX)RUXP Ö8*\WNRZQLNyZ7,7/(! 4. </HEAD> 5. <BODY BGCOLOR="#FFFFFF"> 6. <% 7. Dim Conn 8. Dim RSUser 9. Dim SQL 10. 11. Set Conn = Server.CreateObject("ADODB.Connection") 12. Set RSUser = Server.CreateObject("ADODB.Recordset") 13. 14. Conn.Open "Forum" 15. 16. SQL = "SELECT * FROM User WHERE UserID='" & _ 17. Request.Form("UserName") & "'" 18. RSuser.Open SQL,Conn,1,2 19. 20. If RSUser.EOF Then 21. %> 22. +$/,*1 &(17(5!8*\WNRZQLNQLHLVWQLHMH+! 23. <H3 ALIGN="CENTER"><%= Request.Form("UserName") %></H3> 24. <H3 ALIGN="CENTER"><A HREF="Logowanie.htm" TARGET="_parent">Kliknij ÖWXWDMDE\]DORJRZDüVLSRQRZQLH$!+! 25. <P> </P> 26. <H3 ALIGN="CENTER"> LUB </H3> 27. <P> </P> 28. <H3 ALIGN="CENTER"><A HREF="NowyUzytkownik.asp" Ö7$5*(7 BSDUHQW!.OLNQLMWXWDMDE\GRáF]\üGR)RUXP$!+! 29. <% 30. Else 31. If RSUser("Password") <> Request.Form("Password") Then 32. %> 33. +$/,*1 &(17(5!3RGDQRQLHSUDZLGáRZHKDVáRGOD+! 34. <H3 ALIGN="CENTER"><%= Request.Form("UserName") %></H3> 35. <H3 ALIGN="CENTER"><A HREF="Logowanie.htm" TARGET="_parent">Kliknij ÖWXWDMDE\]DORJRZDüVLSRQRZQLH$!+! 36. <P> </P> 37. <H3 ALIGN="CENTER"> LUB </H3> 38. <P> </P> 39. <H3 ALIGN="CENTER"><A HREF="ZapomnianeHaslo.asp">Kliknij tutaj, aby 40. SU]HVáDü&LKDVáR]DSRPRFSRF]W\HOHNWURQLF]QHM$!+! 41. <% 42. Else 43. Session("User") = "Yes" 44. Session("User_ID") = RSUser("ID") 45. Session("UserName") = RSUser("FirstName") & " " & ÖRSUser("LastName") 46. %> 47. +$/,*1 &(17(5!/RJRZDQLHSRP\OQH+! 48. <H3 ALIGN="CENTER">Witamy ponownie <%= RSUser("FirstName") %></H3> 49. +$/,*1 &(17(5!2VWDWQLRRGZLHG]LáHV\VWHP ÖRSUser("LastVisit") %></H3> 50. <H3 ALIGN="CENTER"> 51. $+5() )RUXPDVS7$5*(7 BSDUHQW!.OLNQLMWXWDMDE\ZHMüQD Ö)RUXP8*\WNRZQLNyZ$!

5R]G]LDä 7ZRU]HQLHDSOLNDFMLED]GDQ\FKSU]\X\FLXRELHNWÑZGDQ\FK$FWLYH; 52. </H3> 53. <% 54. RSUser("LastVisit") = Now 55. RSUser.Update 56. End If 57. End If 58. 59. %> 60. </BODY> 61. </HTML> 3U]HGVWDZLRQ\SRZ\*HMVNU\SWSUyEXMHSREUDüUHNRUGED]\GDQ\FKGODSRGDQHJRLGHQ tyilndwrudx*\wnrzqlndolqlhgr-holwdnluhnrugqlhlvwqlhmhr]qdf]dwr*hqlh SRGDQRSRSUDZQHJRLGHQW\ILNDWRUDLVNU\SWZ\ZLHWODRGSRZLHGQLNRPXQLNDWOLQLH ±-HOLUHNRUGLVWQLHMHWRNROHMQ\IUDJPHQWNRGXOLQLH±VSUDZG]DF]\SR GDQRSRSUDZQHKDVáR-HOLQLHWRZyZLHWODQ\MHVWNROHMQ\NRPXQLNDW:SU]\SDGNX JG\ SRGDQR SRSUDZQH KDVáR MHVW Z\NRQ\ZDQ\ NRG OLQLH ± NWyU\ ]DSLVXMH Z\EUDQHZDUWRFLZRELHNFLHSessionG]LNLF]HPXEG]LHPR*QD]QLFKVNRU]\VWDü ZSU]\V]áRFL1DVWSQLHMHVWZ\ZLHWODQ\NRPXQLNDWZLWDMF\X*\WNRwnika (linie 43. ±1DNRFXMHVWXDNWXDOQLDQDZDUWRüSRODLastVisit, w której jest zapisywaqdgdwddnwxdoqhm ZL]\W\ -HVW WR RVWDWQLD F]\QQRü SR NWyUHM Z\NRQ\ZDQLH VWURQ\ zostaqlh]dnrf]one. 3RZ\*V]\NRGSU]HGVWDZLDNLONDIXQNFML$'2ND*GD]QLFK]RVWDáDEDUG]LHMV]F]HgóáR ZRRSLVDQDZQDVWSQ\FKVHkFMDFKUR]G]LDáX 2WZLHUDQLHSRäñF]HQLD /LQLHLOLVWLQJXWZRU]LRWZLHUDMSRáF]HQLH]ED]GDQ\FK1RZ\SRF] tkozr]dpnqlw\relhnw&rqqhfwlrqmhvwwzru]rq\]dsrprfphwrg\server.createobject,ghqw\ilndwru NODV\ &ODVV,' $'2'%&RQQHFWLRQ MHVW NRQLHF]Q\ JG\* LQIRUPXMH RQ PHWRG R W\P MDNL RELHNW QDOH*\ VWZRU]\ü 1DVWSQLH Z OLQLL MHVW Z\ZRá\ZDQD PHWRGD Open QRZHJR SRáF]HQLD MDNR DUJXPHQW MHM Z\ZRáDQLD MHVW SRGDZDQDQD]ZD(UyGáDGDQ\FKZ\NRU]\VW\ZDQHMED]\GDQ\FK-HMSLHUZV]\SDUDPHWU MHVW RGSRZLHGQLNLHP ZáDFLZRFL ConnectionString obiektu Connection i mo*h ]RVWDü RNUHORQ\ SU]HG Z\ZRáDQLHP PHWRG\ Open, jak pokazano na poni*szym SU]\NáDG]LH Set Conn = Server.CreateObject("ADODB.Connection") Conn.ConnectionString = "Forum" Conn.Open 3RZ\*V]\NRGMHVWFDáNRZLFLHUyZQRZD*Q\NRGRZLSU]HGVWDZLRQHPXQDOLVWLQJX± Z\NRQXMHWHVDPHF]\QQRFLFKRüZQLHFRLQQ\VSRVyE:W\PSU]\SDGNXZáDFLZRü ConnectionString ]DZLHUD SR SURVWX QD]Z (UyGáD GDQ\FK MHGQDN PR*H RQD ]DZLHUDüWDN*HLQQHLQIRUPDFMHWDNLHMDNLGHQW\ILNDWRUX*\WNRZQLNDLKDVáRGRVWSXGR ED]\GDQ\FK-HOLGODSU]\NáDGXGRVWSGRED]\GDQ\FKZ\PDJDáE\X*\FLDLGHQW\fi- NDWRUDX*\WNRZQLNDRZDUWRFL"sa"RUD]SXVWHJRKDVáDWRPyJáE\X*\üZáDFLZRü ConnectionStringRZDUWRFL "DSN=Forum;userid=sa;pwd=;"

&]öè,, 3DPLWDM*HPHWRGD2SHQSRELHUDWDN*HGZDRSFMRQDOQHSDUDPHWU\RSUyF] ConnectionString±LGHQW\ILNDWRUX*\WNRZQLNDRUD]KDVáR-HOLFKFHV]WRPR*HV]SRGDüWH ZDUWRFLMDNRRGG]LHOQHDUJXPHQW\ Conn.Open "Forum", "sa", "" 1LH]DOH*QLH RG PHWRG\ MDNLHM X*\MHV] SU]HG Z\NRU]\VWDQLHP RELHNWX Connection, EG]LHV]JRPXVLDáVWZRU]\üLRWZRU]\ü 7ZRU]HQLHLRWZLHUDQLH]ELRUXUHNRUGÑZ /LQLH L OLVWLQJX WZRU] L RWZLHUDM ]ELyU UHNRUGyZ RELHNW Recordset). WZ\ZRáaniu metody Open]RVWDáDX*\WDJUXSDSDUDPHWUyZ3RGREQLHMDNZSU]\padku omówionej wczeqlhm PHWRG\ Open obiektu Connection WDN*H L WHUD] ND*G\ zdujxphqwyzpr*h]rvwdürnueorq\su]\z\nru]\vwdqlxzádflzrflnwyuhmzduwrü MHVW SRGDZDQD SU]HG Z\ZRáDQLHP PHWRG\ Open.RG SU]HGVWDZLRQ\ SRQL*HM ] IXQ kcjonalnego punktu widzenia, odpowiada kodowi z listingu 11.4. RSUser.Source = SQL Set RSUser.ActiveConnection = Conn RSUser.CursorType = 1 'Keyset RSUser.LockType = 2 'Pesymistyczny RSUser.Open 0XVLV]SDPLWDüRSRGDQLXW\FKZDUWRFLQLH]DOH*QLHRGPHWRG\MDNGRWHJRZ\korzy- VWDV]JG\*ZSU]HFLZQ\PZ\SDGNX]RVWDQ]DVWRVRZDQHZDUWRFLGRP\OQH-HOLQLH dysponujesz stworzonym i otworzonym obiektem Connection, jednak pomimo tego FKFHV]RWZRU]\ü]ELyUUHNRrGyZWRPR*HV]]DVWSLüDUJXPHQW ConnIDNW\F]Q\PáD FXFKHP]QDNyZX*\ZDQ\PGRQDZL]aQLDSRáF]HQLD]ED]GDQ\FK RSUser.Open SQL, "Forum", 1,2 :\GDMHVL*HWDNDPHWRGDGDMHGRNáDGQLHLGHQW\F]QHUH]XOWDW\MDNSRSU]HGQLDWDNMH GQDNQLHMHVW=DND*G\PUD]HPJG\]ELyUUHNRUGyZMHVWWZRU]RQ\SU]\Z\NRU]\VWDQLX WHM PHWRG\ RNUHODQLD SRáF]HQLD MHVW WZRU]RQ\ QRZ\ RELHNW Connection. Przedsta- ZLRQ\SRQL*HMNRGSRZRGXMHVWZorzenie trzech obiektów Connection: Set RSPrzykalad1 = Server.CreateObject("ADODB.Recordset") Set RSPrzykalad2 = Server.CreateObject("ADODB.Recordset") Set RSPrzykalad3 = Server.CreateObject("ADODB.Recordset") RSPrzyklad1.Open SQL, "Forum", 1, 2 RSPrzyklad2.Open SQL, "Forum", 1, 2 RSPrzyklad3.Open SQL, "Forum", 1, 2 -HGQDNNRGSU]HGVWDZLRQ\SRQL*HMZ\NRU]\VWXMHW\ONRMHGHQRELHNWConnectionFKRü jego wykonanie daje identyczne rezultaty): Set RSPrzykalad1 = Server.CreateObject("ADODB.Recordset") Set RSPrzykalad2 = Server.CreateObject("ADODB.Recordset") Set RSPrzykalad3 = Server.CreateObject("ADODB.Recordset") Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "Forum" RSPrzyklad1.Open SQL, Conn, 1, 2 RSPrzyklad2.Open SQL, Conn, 1, 2 RSPrzyklad3.Open SQL, Conn, 1, 2

5R]G]LDä 7ZRU]HQLHDSOLNDFMLED]GDQ\FKSU]\X\FLXRELHNWÑZGDQ\FK$FWLYH; :\NRU]\VWDQLH W\ONR MHGQHJR RELHNWX &RQQHFWLRQ RJUDQLF]D REFL*HQLH VHUZHUD ED]\ daq\fkgrmhgqhjrsráf]hqldqdnd*g\z\nrq\zdq\zvsyáelh*qlhvnu\sw3r]zdodwr na otrzymanie makv\pdoqhmolf]e\uyzqrf]hvq\fksráf]hjg\*mhgqrsráf]hqlhmhvw PLQLPDOQOLF]ESRáF]HMDNPR*QDVWZRU]\üQDMHGQHMVWURQLH:QDVWSQHMVHNFML ]RVWDQLHSU]HGVWDZLRQDPHWRGRNUHOania czy zbiór rekordów zawiera jakiekolwiek da- QHQLH]DOH*QLHRGPHWRG\MDND]RVWDáDZ\NRU]ystana do jego stworzenia. 6SUDZG]DQLHF]\]ELÑUUHNRUGÑZMHVWSXVW\ Zanim zrobisz cokolwiek ze zbiorem rekordów otworzonym w linii 18. listingu 11.4, QDOH*\VSUDZG]LüF]\QLHMHVWRQSXVW\'RWHJRZáDQLHVáX*\NRGXPLHV]F]RQ\ZOLQLL -HOL]ELyUUHNRUGyZQLHMHVWSXVW\WRSRMHJRRWZRU]HQLXZVND(QLNUHNRUGXEG]LH umieszczony na pierwv]\puhnrug]lhdzádflzrüeofeg]lhpldádzduwrüfalse. :ádflzrüwdqlh]zárf]qlhsrrwzru]hqlx]elruxuhnrugyzeg]lhpldádzduwrütrue W\ONR L Z\áF]QLH ZWHG\ JG\ ]ELyU UeNRUGyZ EG]LH SXVW\ -HOL VSUyEXMHV] Z\ZRáDü MDNNROZLHNPHWRGRELHNWXRecordsetMHOLZVND(QLNUHNRUGyZQLH]QDMGXMHVLQD SRSUDZQ\PUHNRUG]LHQDSU]\NáDGJG\ZáDFLZRüBOF lub EOFPDZDUWRütrue), to ]RVWDQLHZ\JHQHURZDQ\EáG 6SUDZG]HQLH Z\äñF]QLH ZäDFLZRFL EOF EöG]LH Z\VWDUF]DMñFH W\ONR ZWHG\ JG\ ]RVWDQLH Z\NRQDQH WX SR RWZRU]HQLX ]ELRUX UHNRUGÑZ -HOLLVWQLHMHPROLZRèHSU]HGZ\NRQDQLHPWHVWXE\ä\UHDOL]RZDQH MDNLH RSHUDFMH QD ]ELRU]H UHNRUGÑZ WR SRZLQLHQH VSUDZG]Dè ]DUÑ ZQRZäDFLZRèEOFMDNLBOF 3RELHUDQLHZDUWRFL]H]ELRUXUHNRUGÑZ -HOL]ELyUUHNRUGyZQLHMHVWSXVW\WRSURJUDPEG]LHPyJáVNRU]\VWDü]SyO]ELRUX3R QL*HM]oVWDáDSRGDQDVNáDGQLDX*\ZDQDGRSRELHUDQLDZDUWRFLSyO]ELRUXUHNRUGyZ <NazwaZbioruRekordów>("<NazwaPola>") 7RSROHFHQLHPR*H]RVWDüZ\NRU]\VWDQHGRSREUDQLDOXERNUHOHQLDZDUWRFLGRZROQHJR SROD:U]HF]\ZLVWRFLMHVWRQRRGSRZLHGQLNLHPSRQL*V]HJRSROHFHQLD RSUser.Fields.Item("UserID").Value ']LHMHVLWDNJG\*NROHNFMDFieldsMHVWGRP\OQZáDFLZRFLRELHNWXRecordset, ZáDFiZRü Item±GRP\OQZáDFLZRFL NROHNFML Fields D ZáDFLZRü Value GRP\OQ ZáaFLZRFL RELHNWX Field :ádqlh GODWHJR RED SROHFHQLD V VRELH UyZQRZD*QH 7R ZD*QD LQIRrPDFMD NWyU ZDUWR ]DSDPLWDü ± SR FR ERZLHP X*\ZDü EDUG]LHMVNRPSOLNRZDQHMVNáDGQL 0RG\ILNRZDQLHZDUWRFLZ]ELRU]HUHNRUGÑZ -HOLQLHRWZRU]\áH]ELRUXUHNRUGyZMDNRSU]H]QDF]RQHJRW\ONRGRRGF]\WXSDWU]RPywione ZF]HQLHMZáDFLZRFLCursorType oraz LockTypeWREG]LHV]PyJáPRdyfiko- ZDü ZDUWRFL SyO X*\ZDMF GR WHJR GZXHWDSRZHJR SURFHVX : SLHUZV]HM NROHMQRFL

&]öè,, SU]\X*\FLXQRUPDOQHJRRSHUDWRUDSU]\SLVDQLDXPLHFLV]ZDUWRFLZZ\EUDQ\FKSRODFK SDWU]OLQLDOLVWLQJXDQDVWSQLHZ\ZRáDV]PHWRGUpadate-HOL]PRdyfiku- MHV] ZDUWRFL SyO D QDVWSQLH ]DPNQLHV] ]ELyU UHNRUGyZ OXE SU]HMG]LHV] GR LQQHJR UHNRUGX WR ZSURZDG]RQH PRG\ILNDFMH ]RVWDQ XWUDFRQH =ELRU\ UHNRUGyZ X*\ZDQH wqlhnwyu\fklqq\fkprghodfkgdq\fkwdnlfkmdn'$2z\pdjdmde\su]hgprg\ ILNDFM ZDUWRFL SyO ]RVWDáD Z\ZRáDQD PHWRGD Edit. Metoda ta nie istnieje jednak w$'2d]dwhpmhmx*\flhvsrzrgxmhz\jhqhurzdqlheágxä2emhfwgrhvqrwvxssruw this method ). 7ZRU]HQLHQRZHJRX\WNRZQLND 5\VXQHN Formularz rejestracji nowych X*\WNRZQLNyZ pozwala X*\WNRZQLNRPQD podanie informacji, NWyUH]RVWDQ zapisane w bazie danych :SRSU]HGQLHMVHNFML]RVWDáDSU]HGVWDZLRQDVWURQDVáX*FDGRSRGDZDQLDLGHQW\ILNDWRUD X*\WNRwQLNDRUD]KDVáDMHGQDNVNGELRUVLWHZDUWRFL":V\VWHPLHPXVL]QDMGRZDü VLVWURQDSR]ZaODMFDQDUHMHVWUDFMQRZ\FKX*\WNRZQLNyZFRSR]ZROLLPQDNRrzystanie ]IRUXP7DVWURQD]RVWDáDMX*SRáF]RQD]HVWURQVáX*FGRORJRZDQLDX*\WNRwni- NyZMHMNRG]RVWDáSU]HGVWDZLRQ\QDOLVWLQJX5\VXQHNSU]HGVWDZLDIRUPXODU] UHMHVWUDF\MQ\QRZ\FKX*\WNRZQLNyZWZorzony przez kod z listingu 11.5. /LVWLQJ7HQIRUPXODU]+70/SURVLX*\WNRZQLNDRSRGDQLHLQIRUPDFMLNRQLHF]Q\FKGRVWZRU]HQLD nowego rekordu w tabeli User (NowyUzytkownik.asp) 1. <HTML> 2. <HEAD> 3. 4. 7,7/(!5HMHVWUDFMDQRZ\FKX*\WNRZQLNyZ7,7/(! 5. </HEAD> 6. 7. <BODY BGCOLOR="#FFFFFF" TEXT="#000000"> 8. 9. +$/,*1 &(17(5!)RUPXODU]UHMHVWUDFMLQRZ\FKX*\WNRZQLNyZ+! 10. 11. <FORM METHOD="POST" ACTION="StworzUzytkownika.asp"> 12. <DIV ALIGN="CENTER"><CENTER><TABLE BORDER="1"> 13. <TR>

5R]G]LDä 7ZRU]HQLHDSOLNDFMLED]GDQ\FKSU]\X\FLXRELHNWÑZGDQ\FK$FWLYH; 14. 7'!67521*!,PL67521*!7'! 15. <TD><INPUT TYPE="TEXT" NAME="txtFirstName" SIZE="30"></TD> 16. </TR> 17. <TR> 18. <TD><STRONG>Nazwisko:</STRONG></TD> 19. <TD><INPUT TYPE="TEXT" NAME="txtLastName" SIZE="30"></TD> 20. </TR> 21. <TR> 22. <TD><STRONG>Adres Email:</STRONG></TD> 23. <TD><INPUT TYPE="TEXT" NAME="txtEmailAddress" SIZE="50"></TD> 24. </TR> 25. <TR> 26. <TD><STRONG> </STRONG></TD> 27. <TD> </TD> 28. </TR> 29. <TR> 30. 7'!67521*!,GHQW\ILNDWRUX*\WNRZQLND67521*!7'! 31. <TD><INPUT TYPE="TEXT" NAME="txtUserID" SIZE="20"></TD> 32. </TR> 33. <TR> 34. 7'!67521*!+DVáR67521*!7'! 35. <TD><INPUT TYPE="PASSWORD" NAME="txtPassword" SIZE="20"></TD> 36. </TR> 37. </TABLE> 38. </CENTER></DIV> 39. <DIV ALIGN="CENTER"> 40. <CENTER> 41. 3!,13877<3( 68%0,79$/8( 6WZyU]QRZHJRX*\WNRZQLND ÖNAME="B1"> 42.,13877<3( 5(6(79$/8( :\F]\üZV]\VWNLHSROD1$0( %!3! 43. </CENTER> 44. </DIV> 45. </FORM> 46. </BODY> 47. </HTML> Listing 11.5 przedstawia kod formularza HTML. Sam formularz zawiera kod, którego Z ZLNV]oFL QLH PXVLV] SLVDü VDP 3U]HGVWDZLRQ\ IRUPXODU] PR*QD VWZRU]\ü Z GR ZROQ\PHG\WRU]H+70/MHGQ\P]OHSV]\FKFKRüQLHMHG\Q\PPR*HE\ü)URQW3DJH : U]HF]\ZLVWRFL VDP XNáDG IRrPXODU]D QLH MHVW ZD*Q\ GOD SURJUDPLVW\ ]QDF]HQLH posiada jedynie fakt istnienia pól i przycisków formularza oraz ich nazwy. Nazwy pól RUD]SU]\FLVNyZIRUPXODU]D]GHILQLRZDQH]RVWDá\ZOLQLDFKLV RQHZ\NRU]\VW\ZDQHZVNU\SFLHNWyU\REVáXJXMHZ\QLNLZ\NRQDQLDWHMVWURQ\1D]ZD VNU\SWXREVáXJXMFHJRIRUPXODU]]RVWDáDSRGDQDZOLQLLDMHJRNRGPR*QD]QDOH(ü na listingu 11.6. /LVWLQJ7HQVNU\SWSU]HWZDU]DZDUWRFLZSURZDG]RQHGRIRUPXODU]DQDVWURQLH1RZyUzytkownik.asp LWZRU]\QRZHJRX*\WNRZQLNDZWDEHOLUser (StworzUzytkownika.asp) 1. <HTML> 2. <HEAD> 3. 7,7/(!6WZyU]QRZHJRX*\WNRZQLND7,7/(! 4. </HEAD> 5. 6. <BODY BGCOLOR="#FFFFFF"> 7. <% 8. Dim Conn

&]öè,, 9. Dim RSUser 10. Dim SQL 11. 12. Set Conn = Server.CreateObject("ADODB.Connection") 13. Set RSUser = Server.CreateObject("ADODB.Recordset") 14. 15. Conn.Open "Forum" 16. 17. SQL = "SELECT * FROM User WHERE UserID='" & ÖRequest.Form("txtUserid") & "'" 18. 19. RSUser.Open SQL,Conn,1,2 20. 21. If Not RSUser.EOF Then 22. %> 23. 24. +$/,*1 &(17(5!8*\WNRZQLNMX*LVWQLHMH+! 25. 26. <H3 ALIGN="CENTER"> <%= Request.Form("txtUserId") %></H3> 27. 28. <H3 ALIGN="CENTER"><A HREF="NowyUzytkownik.asp" TARGET="_parent"> 29..OLNQLXWXWDMDE\SRGDüLQQ\LGHQW\ILNDWRUX*\WNRZQLND$!+! 30. 31. <P> </P> 32. 33. <H3 ALIGN="CENTER">LUB</H3> 34. 35. <P> </P> 36. 37. <H3 ALIGN="CENTER"><A HREF="ZapomnianeHaslo.asp" TARGET="_parent"> 38..OLNQLMWXWDMMHOLFKFHV]DE\SU]HVáDü&LKDVáRSRF]W 39. HOHNWURQLF]QMHOL]DSRPQLDáHJRDZF]HQLHM]DUHMHVWURZDáHVL ÖSU]\X*\FLXWHJRLGHQW\ILNDWRUD$!+! 40. <% 41. Else 42. 43. RSUser.AddNew 44. RSUser("FirstName") = Request.Form("txtFirstName") 45. RSUser("LastName") = Request.Form("txtLastName") 46. RSUser("UserID") = Request.Form("txtUserID") 47. RSUser("Password") = Request.Form("txtPassword") 48. RSUser("Email") = Request.Form("txtEmail") 49. RSUser("LastVisit") = Now() 50. RSUser.Update 51. %> 52. 53. +$/,*1 &(17(5!6WZRU]RQRQRZHJRX*\WNRZQLND+! 54. 55. <H3 ALIGN="CENTER"> 56. :LWDP\QD)RUXP8*\WNRZQLNyZ 5HTXHVW)RUPW[W)LUVW1DPH! 57. </H3> 58. 59. <H3 ALIGN="CENTER"> 60. $+5() /RJRZDQLHKWP7$5*(7 BSDUHQW!.OLNQLMWXWDMDE\VL Ö]DORJRZDü$!+! 61. <% 62. End If 63. %> 64. </BODY> 65. </HTML>

5R]G]LDä 7ZRU]HQLHDSOLNDFMLED]GDQ\FKSU]\X\FLXRELHNWÑZGDQ\FK$FWLYH; 7HQ VNU\SW SU]HSURZDG]D W\ONR MHGQ NRQWURO SRSUDZQRFL GDQ\FK XPLHV]F]RQH wolqldfk ± VSUDZG]DMF F]\ SRGDQ\ LGHQW\ILNDWRU X*\WNRZQLND MX* LVWQLHMH ZuSHáQLHSXVWHZDUWRFL]RVWDá\E\]DDNFHSWRZDQHMHGQDNMHVWWRGRSU]\MFLDZSU]\ padku testowego systemu ADO. ZaGDQLHPMDNLHPLDáLOXVWURZDüWHQNRQNUHWQ\VNU\SW MHVWGRGDZDQLHQRZHJRUHNRUGXGR]ELRUXUHNRUGyZ]DGDQLHWR]RVWDáRV]F]HJyáRZLHM omówione w kolejnych sekcjach. 'RGDZDQLHUHNRUGÑZGR]ELRUXUHNRUGÑZ 3RVSUDZG]HQLX*HZSURZDG]RQ\LGHQW\ILNDWRUX*\WNRZQLNDQLHZ\VWSXMHMX*ZED]LH GDQ\FKOLQLDOLVWLQJXQDGV]HGáF]DVDE\GRGDüX*\WNRZQLNDGRWDEHOL=ELyU renrugyzpxvl]rvwdüzf]hqlhmrwzru]rq\qdwdeholgrnwyuhmfkfhv]grgdzdüuhkordy. :SRZ\*V]\PVNU\SFLH]ELyUUHNRUGyZ]RVWDáRWZRU]RQ\QDWDEHOL UserSU]\X*\ciu krywhulyz NWyUH QLH ]RVWDá\ VSHáQLoQH 'R RWZDUFLD ]ELRUX UHNRUGyZ SRVáX*\áR SROH cenie SQL umieszczone w linii 17. Nawet pomiprwhjr*hqlh]rvwdá\]zuyfrqh*dgqh UHNRUG\]ELyUUHNRUGyZFDá\F]DVZVND]XMHQDWDEHO8VHUD]DWHPGRGDZDQHUHNRUG\ EGXPLHV]F]DQHZáDQLHZQLHM-HOLEG]LHV]SRWU]HERZDáRWZRU]\ü]ELyUUHNRUGyZ Z\áF]QLHZFHOXGRGDZDQLDQRZ\FKUHNRUGyZWRZSROHFHQLX64/SRZLQLHQHSRGDü WDNLHNU\WHULDNWyUHVSRZRGXM*H QLH ]RVWDQ ]ZUyFRQH*DGQH UHNRUG\7DNLP SROH FHQLHPPR*HE\ü SELECT * FROM User WHERE 1=2 1LH PD *DGQHJR VHQVX Z ]X*\ZDQLX SDPLFL L ]DVREyZ SURFHVRUD QD SHáQ\ ]ELyU UH NRUGyZMHOLQLHMHVWRQGRQLF]HJRSRWU]HEQ\.LHG\EG]LHV]MX*G\VSRQRZDá]ELRUHPUHNRUGyZWRGRGDQLHIDNW\F]QHJRUHNRUGXMHVW ádwz\pwuymhwdsrz\psurfhvhp 1. :\ZRáDMPHWRGAddNew (linia 43.). 2. 3U]\SLV]SRORPRGSRZLHGQLHZDUWRFLOLQLH± 3. :\ZRáDMPHWRGUpdate (linia 50.). =DXZD**HQLHPXVLV]RNUHODüZDUWRFLSROD,'LGHQW\ILNDWRUDJG\*MHVWRQDRNUH lana autopdw\f]qlhsrsu]h] LQNUHPHQWDFM ZDUWRFL WHJR VDPHJR SROD SRSU]HGQLHJR UHNRUGXMHVWWRSROHDXWRLQNUHPHQWXMFH:V]HONDZHU\ILNDFMDQDSR]LRPLHUHNRUGX ZW\PZHU\ILNDFMDLQGHNVyZMHVWZ\NRQ\ZDQDZPRPHQFLHZ\ZRáDQLDPHWRG\UpdateD]DWHP]D]Z\F]DMZáDQLHZW\PPLHMVFXSRMDZLDMVLEáG\%áG\SRZRdowane SU]H] QLH]JRGQRü W\SyZ OXE ZLHONRFL SyO V JHQerowane w liniach, w których ]QDMGXMHVLSU]\SLVDQLHZDUWRFLGRSROD :\ZLHWODQLH)RUXP *áyzq VWURQ WZRU]RQHJR V\VWHPX MHVW Forum.asp przedstawiona na listingu 11.7. 6áX*\ RQD GR Z\ZLHWODQLD ZLDGRPRFL SRJUXSRZDQ\FK ZHGáXJ SURZDG]RQ\FK UR] PyZ1DWHMVWURQLHX*\tNRZQLNPR*HNOLNQüQDGRZROQHMZLDGRPRFLFRVSRZRGXMH Z\ZLHWOHQLHMHMWHNVWXOXEGRGDüQRZZLDGRPRü1DU\VXQNX]RVWDáDSU]HGsta-

&]öè,, 5\VXQHN Wyniki wykonania Forum.asp SU]HGVWDZLDMOLVW wszystkich ZLDGRPRFL zapisanych w bazie danych ZLRQDNRPSOHWQDVWURQDZ\ZLHWORQDZSU]eJOGDUFH)XQNFMDRGSRZLDGDQLDQDZLDdo- PRFLMHVWGRVWSQDW\ONRQDVWURQLHSUH]HQWXMFHMWUHüZLDGRPRFL /LVWLQJ7DVWURQDZ\ZLHWODZV]\VWNLHZLDGRPRFLSU]HFKRZ\ZDQHZWDEHOL0HVVDJHV)RUXPDVS 1. <HTML> 2. <SCRIPT LANGUAGE="VBSCRIPT" RUNAT="SERVER"> 3. Sub WyswietlWiadomosciPotomne( Parent, Level ) 4. 5. Dim RSMessages 6. Dim SQL 7. Dim i 8. 9. Set RSMessages = Server.CreateObject("ADODB.Recordset") 10. 11. SQL = "SELECT Message.ID, " & _ 12. "Message.Subject, Message.Date, " & _ 13. "User.UserID FROM Message, User " & _ 14. "WHERE Message.UserID = User.ID AND " & _ 15. "Message.Parent=" & Parent 16. 17. RSMessages.Open SQL,Conn,1,2 18. 19. Do While Not RSMessages.EOF 20. 21. Response.Write "<TR>" 22. Response.Write "<TD>" 23. 24. For i = 1 to level 25. Respnse.Write " " 26. Next 27. 28. Response.Write "<A HREF='Wiadomosc.asp?id=" 29. Response.Write RSMessages("ID") & "'>" 30. Response.Write RSMessages("Subject") 31. Response.Write "</A>" 32. Response.Write "</TD><TD>" 33. Response.Write RSMessages("UserID") 34. Response.Write "</TD><TD>" 35. Response.Write FormatDateTime( RSMessages("Date"),2) 36. Response.Write "</TD></TR>" 37. 38. WyswietlWiadomosciPotomne RSMessages("ID"), Level+1 39. RSMessages.MoveNext 40.

5R]G]LDä 7ZRU]HQLHDSOLNDFMLED]GDQ\FKSU]\X\FLXRELHNWÑZGDQ\FK$FWLYH; 41. Loop 42. 43. End Sub 44. </SCRIPT> 45. 46. <HEAD> 47. 7,7/(!)RUXP8*\WNRZQLNyZ7,7/(! 48. </HEAD> 49. <BODY> 50. 51. <TABLE BORDER="1" WIDTH="100%"> 52. <TR> 53. 7':,'7+!67521*!:LDGRPRFL67521*!7'! 54. 7':,'7+!67521*!:\VáDQ\SU]H]67521*!7'! 55. 7':,'7+!67521*!'DWDZ\VáDQLD67521*!7'! 56. </TR> 57. 58. <% 59. 60. Dim Conn 61. Set Conn = Server.CreateObject("ADODB.Connection") 62. 63. Conn.Open "Forum" 64. 65. WyswietlWiadomosciPotomne 0,1 66. 67. %> 68. </TABLE> 69. 70. +$/,*1 &(17(5!$+5() 1RZD:LDGRPRVFDVS!'RGDMQRZ ÖZLDGRPRü$!+! 71. </BODY> 72. </HTML> 6WURQDSU]HGVWDZLRQDQDOLVWLQJXG]LDáDG]LNLZ\NRU]\VWDQLXprocedury rekurencyjnej FR R]QDF]D *H SURFHGXUD WD Z\ZRáXMH VDPD VLHELH 3URFHGXUD WD QRVL QD]Z WyswietlWiadomosciPotomne L ]RVWDáD ]DSLVDQD Z OLQLDFK ± 'R VWZRrzenia FDáHMVWURQ\NRQLHF]QHMHVWSRGDQLHW\ONRGZyFKSDUDPHWUyZ3LHUZV]\]QLFKRNUHOD dla jakiej wiadoprfl JáyZQHM SRZLQQ\ ]RVWDü Z\ZLHWORQH ZLDGRPRFL SRWRPQH ZDUWRüWHJRSDUDPHWUXR]QDF]D*HSRZLQLHQ]RVWDüZ\ZLHWORQ\QDMZ\*szy poziom ZLDGRPRFL F]\OL WH NWyUH QLH PDM ZLDGRPRFL QDGU]GQ\FK 7HQ DUJXment jest Z\NRU]\VW\ZDQ\MDNRF]üSROHFHQLD64/X*\ZaQHJRGRSRELHUDQLDZLDGRPRFL]ED ]\ SDU] OLQLH ± 'OD ND*GHM ZLDGRPRFL RGQDOH]LRQHM ÄSRQL*HM GDQHM ZLDGRPRFL QDGU]GQHM IXQNFMD WyswietlWiadomosciPotomne jest wyzrá\zdqd SRQRZQLH MHGQDN W\P UD]HP Z MHM Z\ZRáDQLX MDNR ZLDGRPRü QDGU]dna jest podazdq\ LGHQW\ILNDWRU DNWXDOQHM ZLDGRPRFL OLQLD : WHQ VSRVyE SRZVWDMH baug]rqlhzlhonliudjphqwnrgxnwyu\mhvwzvwdqlhreváx*\ügrzroqlorüzldgrprci. Drugi argument funkcji WyswietlWiadomosciPotomne VáX*\ GR NRQWURORZDQLD ZFLQDQLD ZLDGRPRFLLRNUHOD QD MDNLP SR]LRPLH RJyOQHJR GU]HZD DNWXDOQD ZLDdo- PRüMHVWZ\ZLHWODQD 3U]HFKRG]HQLHSRPLöG]\UHNRUGDPL Procedura podana na listingu 11.7 przedstawia sposób wykorzystania metod obiektu ReFRUGVHW VáX*F\FK GR SRUXV]DQLD VL SRPLG]\ UHNRUGDPL 0HWRG\ WH SR]ZDODMQD

&]öè,, pobranie po kolei ka*ghjruhnrugx]qdmgxmfhjrvlz]elru]huhnrugyzlzykonanie na QLPVHULLRSHUDFML:OLQLDFK±MHVWXPLHV]F]RQDSWODNWyUDEG]LHZ\NRnywana D*GRRVLJQLFLDNRFD]ELRUXUHNRrdów (EOF:ND*GHMLWHUDFMLSWOLZ\ZRá\wana, jest metoda MoveNext obiektu Recordset FR SRZRGXMH SU]HVXQLFLH ZVND(nika do QDVWSQHJRUHNRUGX-HOLWRSROHFHQLH]RVWDáRE\]DSoPQLDQHSRZVWDáDE\QLHVNRF]RQD SWODJG\*QLJG\QLH]RVWDáE\RVLJQLW\NRQLHF]ELRUXUHNRrdów. 7ZRU]HQLH85/LQDSRGVWDZLHLQIRUPDFML]ED]\GDQ\FK )XQNFMRQDOQD PR*OLZRü NOLNQLFLD QD NRQNUHWQHM ZLDGRPRFL MHVW LPSOHPHQWRZDQD przez stwou]hqlhgodnd*ghmzldgrprfl85/dsu]hnd]xmfhjrmhmlghqw\ilndwrugrsol ku Wiadomosc.asp =DGDQLH WR MHVW Z\NRQ\ZDQH G]LNL X*\FLX podstawienia, ZVWDZLDMFHPXZDUWRü]H]ELRUXUHNRrGyZGRNRGX+70/ND*GHJRSRáF]HQLD=DOHFD VL ]DFKRZ\ZDQLH MDN QDMSURVWV]HM SRVWDFL 85/OL L SU]HND]\ZDQLH GR QLFK MHG\QLH LGHQW\ILNDWRUDOXEVáRZDNOXF]RZHJR3U]HGVWDZLRQDSRZ\*HMVWURQDZFDáRFLED]XMH QDZLDGRPRFLDFK]DSLVDQ\FKZED]LHGDQ\FKV\VWHPXMHGQDNPXVLLVtQLHüMDNDPHto- GDGRGDZDQLDZLDGRPRFLGRWHMED]\0HWRGDWDMHVWGRVWDUF]DQDSU]H]VWURQNowa- Wiadomosc.asp RSLVDQZQDVWSQHM VHNFML NRG WHM VWURQ\ SU]HGVWDZLRQ\ ]RVWDá QD listingu 11.8. /LVWLQJ6WURQDVáX*FDGRWZRU]HQLDQRZ\FKZLDGRPRFL1RZD:LDGRPRVFDVS 1. <HTML> 2. <HEAD> 3. 7,7/(!6WZyU]QRZZLDGRPRVü7,7/(! 4. </HEAD> 5. <BODY BGCOLOR="#FFFFFF" TEXT="#000000"> 6. 7. <% If Request.QueryString("Type") = "Reply" Then %> 8. +$/,*1 &(17(5!2GSRZLHG]QDZLDGRPRü+! 9. 10. <FORM ACTION="DodajNowaWiadomosc.asp?ID=<%= ÖRequest.QueryString('ID')%>" 11. METHOD="POST" TARGET="_parent"> 12. <% Else %> 13. ',9$/,*1 &(17(5!&(17(5!+!1RZDZLDGRPRü+! 14. </CENTER></DIV> 15. 16. 17. <FORM ACTION="DodajNowaWiadomosc.asp" METHOD="POST" ÖTARGET="_parent"> 18. <% End If %> 19. <TABLE BORDER="0"> 20. <TR> 21. <TD>Temat:</TD> 22. <TD><INPUT ID="txtSubject" NAME="txtSubject" SIZE="50" 23. VALUE="<%= Request.QueryString("Subject") %>" ></TD> 24. </TR> 25. <TR> 26. 7'9$/,*1 723!:LDGRPRü7'! 27. <TD><TEXTAREA ID="txtMessage" NAME="txtMessage" ROWS="4" ÖCOLS="50"> 28. 29. </TEXTAREA></TD> 30. </TR>

5R]G]LDä 7ZRU]HQLHDSOLNDFMLED]GDQ\FKSU]\X\FLXRELHNWÑZGDQ\FK$FWLYH; 31. <P><INPUT NAME="cmdSubmit" TYPE="SUBMIT" Ö9$/8( :\OLM! QEVS QEVS 32.,13871$0( FPG5HVHW7<3( 5(6(79$/8( :\F]\ü Öformularz"></P> 33. </TABLE> 34. </FORM> 35. </BODY> 36. </HTML> 5\VXQHN Ten formularz HTML gromadzi informacje, które SRVáX*GR stworzenia nowej ZLDGRPRFLIRUXP X*\WNRZQLNyZ.RG SU]HGVWDZLRQ\ QD OLVWLQJX WZRU]\ SURVW\ IRUPXODU] +70/ NWyU\ PR*QD ]REDF]\ü QD U\VXQNX 3RZ\*V]D VWURQD ]DZLHUD WDN*H QLHZLHONL IUDJPHQW NRGX $63 NWyU\ SR]ZDOD MHM IXQNFMRQRZDü ]DUyZQR MDNR IRUPXODU] VáX*F\ GR WZRU]HQLD QRZ\FKZLDGRPRFLMDNLIRUPXODU]VáX*F\GRRGSRZLDGDQLDQDZLDGRPRFLSU]HVáDQH do forum. Podczas odpowiadania na wiadoprüolqlh±prg\ilnxm85/xplh szczony w parametrze actionirupxodu]dgrgdmfgrqlhjrlghqw\ilndwruzldgrprci. 7HQ SDUDPHWU ZUD] ] ]DZDUWRFL VDPHJR IRUPXODU]D SU]HV\áDQ\ MHVW GR SURJUDPX REVáXJLDodajNowaWiadomosc.asp), którego kod przedstawiono na listingu 11.9. 6NU\SW REVáXJXMF\ RWU]\PXMH Z\QLNL ] IRUPXODU]D SU]HGVWDZLRQHJR QD U\VXQNX i musi zapivdü MH Z ED]LH GDQ\FK &]\QQRFL Z\NRQ\ZDQH SU]\ GRGDZDQLX QRZ\FK wiagrprfl]rvwdá\rsivdqhzqdvwsqhmvhnfmlur]g]ldáx 3U]HWZDU]DQLHIRUPXODU]DQRZHMZLDGRPRFL Strona DodajNowaWiadomosc.asp NWyUHM NRG ]RVWDá SU]HGVWDZLRQ\ QD OLVWLQJX GRGDMHQRZZLDGRPRüGRV\VWHPX]DFKRZXMFVLSU]\W\PZUy*Q\VSRVyE w]doh*qrflrgwhjrf]\]dslv\zdqdzldgrprümhvw]xsháqlhqrzdf]\wh* VWDQRZL RGSRZLHG(/LVWLQJ]DZLHUDNRGX*\ZDQ\GRSU]HWZRU]HQLDZLDGRPRFL±F]\OLGR dodania nowego rekordu do bazy danych.

&]öè,, /LVWLQJ6WZRU]HQLHQRZHMZLDGRPRFLOXERGSRZLHG]LQDSRGVWDZLHZDUWRFLSU]HND]anych parametrów (DodajNowaWiadomosc.asp) 1. <%@ LANGUAGE=VBScript %> 2. <HTML> 3. <% 4. Dim Conn 5. Dim RSAddMessage 6. Dim SQL 7. 8. Set Conn = Server.CreateObject("ADODB.Connection") 9. Set RSAddMessage = Server.CreateObject("ADODB.Recordset") 10. 11. Conn.Open "Forum" 12. 13. SQL = "SELECT * FROM Message Where 1=2" 14. 15. RSAddMessage.Open SQL, Conn, 1, 2 16. 17. RSAddMessage.AddNew 18. RSAddMessage("Subject") = Request.Form("txtSubject") 19. RSAddMessage("UserID") = Session("User_ID") 20. RSAddMessage("Date") = Now() 21. If Request.QueryString("ID") > 0 Then 22. RSAddMessage("Parent") = Request.QueryString("ID") 23. Else 24. RSAddMessage("Parent") = 0 25. End If 26. 27. RSAddMessage("Message") = Request.Form("txtMessages") 28. RSAddMessage.Update 29. 30. %> 31. 32. <HEAD> 33. 7,7/(!'RGDMZLDGRPRü7,7/(! 34. </HEAD> 35. 36. <BODY BGCOLOR="#FFFFFF" TEXT="#000000"> 37. 38. +$/,*1 &(17(5!7ZRMDZLDGRPRü]RVWDáDGRGDQD+! 39. 40. <P ALIGN="CENTER"><A HREF="Forum.asp"> 41..OLNQLMWXWDMDE\SRZUyFLüQD)RUXPX*\WNRZQLNyZ$! 42. </BODY> 43. </HTML> 1DMZD*QLHMV]\ VNU\SW WHM VWURQ\ ]QDMGXMH VL Z OLQLDFK ± 7HQ VNU\SW WZRU]\ QRZ\ UHNRUG SR NROHL ]DSLVXMH ZDUWRFL MHJR SyO D QDVWSQLH Z ]DOH*QRFL F]\ ZLDGRPRü MHVW RGSRZLHG]L F]\ QLH SROX ZLDGRPRFL QDGU]GQHM MHVW SU]\SLV\ZDQ\ LGHQW\ILNDWRU ZLDGRPRFL QD NWyU RGSRZLaGDP\ OXE ZDUWRü 0. Po zapisaniu wszy- VWNLFKZLDGRPRFLMHVWZ\ZRá\ZDQDPHWRGDUpdateZOLQLL'RGDQDZLDGRPRü SRMDZLVLQDOLFLHZ\ZLHWODQHMSU]H]VWURQForum.asp]DUD]SRMHMRGZLH*HQLX 7HUD] G\VSRQXMHP\ MX*ZLNV]RFLPR*OLZRFL IXQNFMRQDOQ\FK WZRU]RQHJR IRUXP 8*\WNRZQLN PR*H VL]DORJRZDü GRGDü ZLDGRPRü L Z\ZLHWOLü OLVW ZV]\VWNLFK GR VWSQ\FKZLDGRPRFLFDá\F]DVEUDNXMHMHGQDNNLONXHOHPHQWyZ3RGVWDZRZ\P]QLFK

5R]G]LDä 7ZRU]HQLHDSOLNDFMLED]GDQ\FKSU]\X\FLXRELHNWÑZGDQ\FK$FWLYH; MHVWPR*OLZRüZ\ZLHWOHQLDSRMHG\nF]HMZLDGRPRFL'ROLVW\ZLDGRPRFLGRGDOLP\ MX*85/HNWyUHPDMXPR*OLZLüZ\ZLHWOHQLHZLDGRPRFLSDWU]OLQLH±OLstin- JXMHGQDNMDNQDUD]LHQLH]RVWDáVWZRU]RQ\*DGHQNRGNWyU\E\MHREVáXJLZDá 7HNNRGMHVWVWRVXQNRZRZD*Q\GODWHJRWH*]RVWDQLHRPyZLRQ\ZQDVWpnej sekcji. 3U]HJOñGDQLHSRMHG\QF]\FKZLDGRPRFL 1D OLVWLQJX ]RVWDá SU]HGVWDZLRQ\ VNU\SW VáX*F\ GR Z\ZLHWODQLD SRMHG\QF]\FK wiadomofl&]\qqrfluhdol]rzdqh]dsrprf$'2qdwhmvwurqlhvwdnlhvdphmdn na poprzednich stroqdfk %H] $'2 FDá\ V\VWHP QLH PyJáE\ ZLHOH ]G]LDáDü /LVWLQJ 11.10 zawiera kod strony Wiadomosc.aspX*\ZDQHMGRZ\ZLHWODQLDND*GHMZ\EUDQHM ZLDGRPRFL /LVWLQJ7DVWURQDZ\ZLHWODZLDGRPRFL]DSLVDQHZV\VWHPLHQDSRGVWDZLHSU]HND]DQego do niej identyfikatora (Wiadomosc.asp) 1. <HTML> 2. <% 3. Dim Conn 4. Dim RSMessage 5. Dim TheSubject 6. Dim TheMessage 7. Dim SQL 8. 9. Set Conn = Server.CreateObject("ADODB.Connection") 10. Set RSMessage = Server.CreateObject("ADODB.Recordset") 11. 12. Conn.Open "Forum" 13. 14. SQL = "SELECT Message.ID, " & _ 15. "Message.Subject, Message.Date, Message.Message, " & _ 16. "User.UserID, User.FirstName, User.LastName, FROM Message, User " & _ 17. "WHERE Message.UserID = User.ID AND " & _ 18. "Message.ID =" & Request.QueryString("ID") 19. 20. RSMessage.Open SQL, Conn, 1, 2 21. 22. If Not RSMessage.EOF Then 23. 24. TheSubject = Server.HTMLEncode(RSMessage("Subject")) 25. TheMessage = Server.HTMLEncode(RSMessage("Message")) 26. ThePoster = RSMessage("FirstName") & " " & RSMessage("LastName") 27. QueryString = "Type=Reply&ID=" & RSMessage("ID") & "&Subject=" & _ 28. Server.URLEncode(RSMessage("Subject")) 29. 30. End If 31. %> 32. <HEAD> 33. <TITLE><%= TheSubject %></TITLE> 34. </HEAD> 35. 36. <BODY> 37. 38. <TABLE BORDER="0" WIDTH="100%" CELLSPACING="4" CELLPADDING="4"> 39. <TR> 40. <TD WIDTH="100%"><STRONG><FONT FACE="ARIAL">

&]öè,, 41. Temat: <%= TheSubject %></FONT></STRONG></TD> 42. </TR> 43. <TR> 44. <TD WIDTH="100%"><STRONG><FONT FACE="ARIAL"> 45. <%= TheMessage %></FONT></STRONG></TD> 46. </TR> 47. <TR> 48. <TD WIDTH="100%"><STRONG><FONT FACE="ARIAL"> 49. :\VáDQDSU]H] 7KH3RVWHU!)217!67521*!7'! 50. </TR> 51. <TR> 52. <TD WIDTH="100%"><STRONG><FONT FACE="ARIAL"> 53. $+5() 1RZD:LDGRPRVFDVS" 4XHU\6WULQJ!2GSRZLHG]QDW ÖZLDGRPRü!$! 54. </FONT></STRONG></TD> 55. </TR> 56. </TABLE> 57. 58. <P> </P> 59. </BODY> 60. </HTML> 5\VXQHN Skrypt Wiadomosc.asp Z\ZLHWODZ\EUDQ ZLDGRPRü i pozwala X*\WNRZQLNRZLQD odpowiedzenie na QL.RGZ\ZLHWODMF\ZLDGRPRüMHVWSURVW\SUH]HQWXMHRQZLDGRPRüZVSRVyEF]\WHOQ\ SDWU]U\VXQHNL]DSHZQLD*H*DGQH]QDNLVSHFMDOQHQLH]DEXU]MHMZ\JOGXOLQLH ±=PLHQQHSRUHGQLHVX*\ZDQHZ\áF]QLHGRXSURV]F]HQLDNRGXVWURQ\LQLH V NRQLHF]QH : OLQLL QD VDP\P NRFX WDEHOL VáX*FHM GR SU]HGVWDZLHQLD ZLDdo- PRFLMHVWXPLHV]F]DQ\85/GRVWURQ\NowaWiadomosc.aspRPyZLRQHMZHZF]H QLHMV]HMF]FLUR]G]LDáX:W\PZ\SDGNX]HZ]JOGXQDWR*HFKFHV]RGSRwieG]LHü QDRJOGDQZLDGRPRüGRDGUHVX85/MHVWGRGDZDQDJUXSDSDUDPHWUyZ3U]HsyáDQ\ MHVW LGHQW\ILNDWRU ZLDGRPRFL QD NWyU RGSRZLDGDP\ MHM WHPDW RUD] SDUDPHWU Type X*\ZDQ\ SU]H] VNU\SW NowaWiadomosc.asp OLVWLQJ GR RNUHOHQLD VSRsobu ]DSLVDQLDQRZHMZLDGRPRFL 3RGVXPRZDQLHV\VWHPX)RUXP8\WNRZQLNÑZ 6WZRU]\áHMX*]QDF]QZLNV]RüDSOLNDFMLIRUXPX*\WNRZQLNyZ6\VWHPMHVWMX*SUD wie komsohwq\qlholf]fnlonxpqlhm]qdf]f\fkv]f]hjyáyznwyuh]rvwdqsu]hgsta- ZLRQHMDNRüZLF]HQLDSRGNRQLHFWHJRUR]G]LDáX