|
Proprietatile sunt asemenatoare cu cele cele ale obiectului TQueryTable
|
səhifə | 9/16 | tarix | 03.01.2019 | ölçüsü | 1,42 Mb. | | #89992 |
| Proprietatile sunt asemenatoare cu cele cele ale obiectului TQueryTable
Producer si sunt destinate pentru reformatarea datelor preluate:Columns,
Footer,Header,MaxRows,RowAttributes si TableAttributes.Dintre metode,
cea mai importanta este Content,care returneaza rezultatul conversiei
datelor din text in HTML.Obiectul contine si trei evenimente care pot fi
utilizate pentru controlul actiunilor executate.Astfel OnCreateContent
se poate utiliza pentru a returna un raspuns nul,OnFormatCell se poate
utiliza pentru a schimba formatul unei singure celule(de exemplu efect
de clipire automata) iar OnTableCaption se poate utiliza pentru a schimba
dinamic titlul tabelului returnat.
EXEMPLU: vezi Prj53
Salvati o fila noua si proiectul in Prj53.Adaugati din Data Access un
component TDataSource si un component TTable.Apoi adaugati un component
TDataSetTableProducer iar din Standard adaugati un camp TMemo si un
buton.
Selectati DataSource1 si setati DataSet la valoarea Table1,apoi alegeti
Table1 si setati DatabaseName la valoarea DBDEMOS,alegeti pentru TableName
o valoare oarecare(De exemplu: COUNTRY.DB) si apoi setati Active la va-
loarea TRUE.Apoi selectati DataSetTableProducer1 si setati DataSet la
valoareaTable1.
In acest moment,in Columns trebuie sa fie afisate datele din tabelul
selectat.Utilizati obiectul Editing DataSetTableProducer1.Columns pentru
a schimba aspectul datelor dupa bunul plac.Modificati Border,BgColor,
Cellpadding si Cellspacing apoi puteti selecta AddAllFields si puteti
modifica fiecare coloana in parte.
Pentru a vizualiza textul rezultat in urma conversiei,atribuiti buto-
nului urmatoarea procedura OnClick:
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Lines.Add(DataSetTableProducer1.Content);
end;
Tastati F9 si executati aplicatia.In Memo1 se va afisa textul rezultat.
Pentru a salva datele produse intr-o fila locala,adaugati in Prj o fila
goala denumita Fila1.htm (vezi Prj54).Apoi modificati procedura OnClick
atribuita butonului astfel:
procedure TForm1,Button1Click(Sender: TObject);
var F1:TextFile;
begin
Memo1.Lines.Add(DataSetTableProducer1.Content);
AssignFile(F1,'Fila1.htm');
Rewrite(F1);
Write(F1,Memo1.Lines.Text);
CloseFile(F1);
end;
Puteti deschide Fila1.htm cu Internet Explorer pentru a vedea rezultatul.
-63- Internet - TWebDispatcher
Dupa cum se preconizeaza si din denumire,TWebDispatcer este un dispe-
cer de comenzi.Este proiectat pentru a selecta un anumit raspuns posibil,
dintre mai multe raspunsuri alternative,in cadrul unei aplicatii de Web.
Practic functioneaza ca o mini centrala telefonica,implementata la nivel
de software.Impreuna cu un obiect de tip DataModule este exchivalent cu
un obiect TWebModule.Se utilizeaza pentru a transforma o aplicatie lo-
cala,intr-o aplicatie de tip WebServer(Exemplu: pentru a permite accesul
din retea la un tabel arhivat intr-o baza de date locala).
Nu poate fi utilizat impreuna cu TWebModule,deoarece o aplicatie de
tip Web poate avea un singur dispecer(TWebModule are un TWebDispatcher
inclus).Cele doua componente se exclud reciproc.Dispecerul administreaza
o colectie intreaga de elemente,care pot avea alocate actiuni proprii.
Pentru editarea acestor elemente si a procedurilor atribuite lor se poate
utiliza proprietatea Actions,respectiv editorul Editing WebDispatcher.
Utilizati butonul Add,apoi alegeti actiunea si utilizati Object Inspector
pentru a seta proprietatile si evenimentele OnAction.
Un astfel de dispecer poate fi utilizat si in aplicatiile locale,nu doar
in cele din retea.
EXEMPLU: (vezi si Prj55)
Salvati o fila noua si proiectul in Prj55.Adaugati un camp TMemo si un
buton.Apoi alegeti din meniul File optiunea New DataModule.Adaugati in
modulul de date un obiect TWebDispatcher.Selectati dispecerul si alegeti
din Object Inspector Actions.In fereastra de editare,utilizati butonul Add
pentru a adauga cinci elemente (Items).Denumiti aceste elemente:
Actiunea 1...Actiunea 5 (selectati elementul si apoi setati proprietatea
Name la denumirea dorita).Inchideti fereastra de editare si apoi compilati
unitatea Unit1.Apoi selectati din nou fila initiala (cea care contine
butonul) si alegeti din Meniul File optiunea Use Unit.Utilizati optiunea
pentru a adauga unitatea in lista de unitati.In acest moment,datele din
modul si respectiv din componentul TWebDispatcer pot fi accesibile si din
fila Form1.Selectati butonul si adaugati urmatoarea procedura OnClick:
procedure TForm1.Button1Click(Sender: TObject);
var nr:integer;
begin
Memo1.Clear;
for nr:=0 to 4 do
Memo1.Lines.Add(DataModule1.WebDispatcher1.Actions.Items[nr].Name);
end;
Tastati F9 si executati aplicatia.
La apasarea butonului,in campul TMemo se va afisa lista elementelor din
dispecer.In situatia in care un astfel de dispatcher este amplasat in
server-ul WEB,din retea se va putea apela unul dintre aceste elemente,sau
procedura care este atribuita elementului respectiv (asemanator cu modul
in care o aplicatie locala poate accesa elementele si procedurile dispe-
cerului).
Dispecerul poate fi utilizat si pentru a executa selectiv o serie
intreaga de proceduri locale,sau in retea.Se realizeaza astfel un modul
executabil,care poate fi apelat atat local,cat si din retea.Pentru acest
scop,se arhiveaza in dispecer un numar oarecare de elemente si apoi se
atribuie cate o procedura pentru fiecare element.Din retea se va utiliza
o solicitare de tip Request,iar local se va apela direct procedura.
-64-
EXEMPLU: (vezi Prj56)
Salvati o fila noua si proiectul in Prj56.Adaugati in fila un camp TMemo
si doua butoane (denumite Actiune 1 si Actiune 2).Apoi adaugati un modul
de date (cu New DataModule) si adaugati in acest modul un obiect de tip
TWebDispatcher.Utilizati Actions si adaugati doua elemente denumite
Actiune1 si Actiune2.Selectati pe rand cele doua elemente si atribuiti
pentru fiecare dintre ele un eveniment OnAction:
procedure TDataModule1.WebDispatcher1Actiune1Action(Sender: TObject;
Request: TWebRequest;Response: TWebResponse; var Handled: Boolean);
begin
beep;
end;
si respectiv:
procedure TDataModule1.WebDispatcher1Actiune2Action(Sender: TObject;
Request: TWebRequest;response: TWebResponse; var Handled: Boolean);
begin
beep;
sleep(500);
beep;
end;
Compilati si salvati unitatea,apoi utilizati File si Use Unit pentru a
adauga acest modul in lista de unitati pentru Form1.Apoi selectati pe
rand cele doua butoane si atribuiti urmatoarele proceduri OnClick:
procedure TForm1.Button1Click(Sender: TObject);
var a1: TWebrequest;
b1: TWebresponse;
c1: boolean;
begin
a1:=DataModule1.WebDispatcher1.Request;
b1:=DataModule1.WebDispatcher1.Response;
Memo1.Clear;
Memo1.Lines.Add('Executa comanda Actiune 1 !');
Memo1.Lines.Add('(beep)');
DataModule1.WebDispatcher1Actiune1Action(Sender,a1,b1,c1);
end;
si respectiv pentru cel de al doilea buton:
procedure TForm1.Button2Click(Sender: TObject);
var a2: TWebRequest;
b2: TWebResponse;
c2: Boolean;
begin
a2:=DataModule1.WebDispatcher1.Request;
b2:=DataModule1.WebDispatcher1.Response;
Memo1.Clear;
Memo1.Lines.Add('Executa comanda Actiune 2 !');
Memo1.Lines.Add('(beep...beep)');
DataModule1.WebDispatcherActiune2Action(Sender,a2,b2,c2);
end;
Tastati F9 si executati aplicatia.Cele doua butoane vor executa alternativ
cele doua proceduri (un beep sau doua beep-uri).Daca se amplaseaza apli-
catia intr-un server,cele doua proceduri vor putea fi apelate din retea.
-65-
Pentru a putea prelua un tabel dintr-o baza de date si a trimite acest
tabel in retea,sub forma de fila HTML,se va putea realiza o aplicatie
care combina o serie dintre componentele prezentate pana acum:
EXEMPLU: (vezi si Prj57)
Salvati un modul de date si proiectul in Prj57.Adaugati un TWebDispatcher,
un TDataSetTableProducer si din Data Access adaugati un obiect DataSource
si un obiect TTable.
Setati proprietatea DataSet din DataSource la valoarea Table1.Apoi selec-
tati Table1 si setati DatabaseName la valoarea DBDEMOS,respectiv proprie-
tatea TableName la valoarea EVENTS.DB (sau orice alt tabel din baza de
date) si apoi proprietatea Active la valoarea True.
Selectati DataSetTableProducer1 si setati proprietatea DataSet la valoarea
Table1,apoi utilizati Columns pentru a selecta aspectul HTML al tabelului
preluat (vezi TDataSetTableProducer).
In final,alegeti obiectul WebDispatcher,utilizati Actions pentru a
adauga o proprietate (Exemplu: Evenimente).Selectati elementul si apoi
setati pentru acest element proprietatea Default la valoarea True.
Adaugati si o cale de acces prin setarea proprietatii PathInfo (Exemplu
la valoarea "act1").Apoi alegeti Events si atribuiti urmatoarea procedura
OnAction:
procedure TDataModule1.WebDispatcher1EvenimenteAction(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
Response.Content:=DataSetTableProducer1.Content;
end;
Compilati aplicatia (modulul nu executa nimic).
In aplicatia realizata,dispecerul are ca metoda implicita(default) pro-
cedura atribuita elementului "Evenimente",care formuleaza raspunsul
aplicatiei atribuind valoarea returnata de obiectul TDataSetTableProducer.
Practic,daca aplicatia este arhivata intr-un server,poate fi apelata din
retea cu o solicitare (Request) in care se va specifica adresa serverului,
si numele aplicatiei.In cazul in care dispecerul contine mai multe ele-
mente solicitarea se va face cu o formula de genul:
URL + numele aplicatiei + elementul + calea de acces
( EXEMPLU: URL + Prj56.dll + Evenimente + act1 )
La primirea unei astfel de solicitari,serverul va returna catre client
un mesaj de raspuns care contine tabelul in format HTML,asa cum poate fi
vazut in TDataSetTableProducer.Columns.
Teoretic,aceste elemente sunt suficiente pentru a putea crea o aplicatie
de tip WebServer.Practic,pentru a exclude orice eroare sau disfunctionali-
tate este bine sa va consultati cu administratorul de retea,inainte de a
incerca sa realizati si sa aplicati acest gen de aplicatii.Pentru publi-
carea aplicatiilor de tip WEB,este bine sa utilizati doar servere specia-
lizate.Bineinteles ca este posibil sa transformati calculatorul personal
intr-un server WEB,dar acest fapt este nepractic si nerecomandabil,din
urmatoarele motive:
-serverul WEB trebuie sa functioneze nonstop (cu consum mare de energie)
-serverul WEB trebuie sa detina mijloace avansate de protectie impotriva
"hack-erilor" si a "virus-urilor accidentale"
-procesorul este ocupat pentru deservirea retelei (asteapta solicitari)
-nu va va ridica nimeni,nici un monument (dimpotriva !).
-66- Web Server Application
Pentru a realiza o aplicatie de tip Web Server,exista si un component
specializat.Acest obiect,nu este localizat impreuna cu celelalte obiecte
din paleta Internet,ci este localizat in meniul File|New.Pentru a utiliza
un astfel de modul,alegeti File,apoi New si selectati Web Server Applica-
tion.Apoi alegeti una dintre cele trei variante posibile (ISAPI/NSAPI DLL,
CGI Stand-alone sau Win-CGI Stand-alone) si confirmati cu OK.In locul
ferestrei Form1 se va afisa un modul denumit WebModule1.Acest obiect este
practic format din: DataModule + WebDispatcher.Se poate utiliza atat
pentru a grupa componentele nonvizuale,necesare pentru implementarea apli-
catiei,cat si pe post de dispecer (la fel ca si WebDispatcher).
Mai mult decat atat,WebModule1 se poate utiliza pentru a crea un link
spre orice alta fila executabila.Se poate realiza astfel un short-cut spre
fila respectiva,sau se poate utiliza pentru ca fila respectiva sa poata
deveni vizibila in retea.
EXEMPLU: (vezi si Prj58)
Deschideti o aplicatie Web Server Application (din File + New).Selectati
modulul WebModule1,apoi alegeti din meniul principal optiunea Run,apoi
Parameters iar in fereastra Run parameters utilizati butonul Browse
pentru a selecta o aplicatie "Host application".De exemplu alegeti fila
Proiect40.exe din Prj40.Confirmati cu OK,apoi tastati F9.Observati ca
aplicatia d-voastra va lansa direct programul din Prj40.Salvati fila si
proiectul in directorul Prj58.In continuare,daca arhivati Prj58 in Server
Prj40 va putea fi executat si din retea (va fi vizibil in retea).
In rest,WebModule este identic cu DataModule+WebDispatcher.Puteti uti-
liza Actions pentru a transforma obiectul in dispecer.
In general,o aplicatie WEB Server este utilizata pentru a realiza un
schimb de date intre doua unitati de lucru din retea.Schimbul de date se
realizeaza sub forma de solicitare (Web Request) si raspunsul selectat
(Web Response).In momentul in care dispecerul primeste un mesaj de soli-
citare,alege din lista sa de elemente,pe cel care corespunde cu datele
de identificare din mesajul de solicitare.In continuare,elementul ales
(Action Item) va apela procedura asociata,pentru a formula raspunsul
aplicatiei.Dupa formulare,raspunsul (Web Response) va fi expediat catre
clientul solicitant.Cu cat dispecerul contine mai multe elemente distincte
cu atat raspunsul formulat va fi mai nuantat.Daca nici unul dintre ele-
mente nu corespunde cu datele solicitate,se va returna raspunsul selectat
cu proprietatea Default=True (se va returna raspunsul implicit).
Acest gen de aplicatii nu poate fi activat pe un calculator izolat,ci
doar pe un server de retea (care are instalat un software special de tip
Personal Server,Windows NT etc.).Nu este recomandabil sa invatati acest
tip de aplicatii pe cont propriu (este preferabil sa urmati un curs
specializat).Aplicatiile de retea,pot afecta un numar nedeterminat de
utilizatori ai retelei si orice eroare mica se transforma in tragedie.
Cele trei tipuri de file realizate,sunt fie de tip DLL,fie de tip .exe
si prezinta unele particularitati.Alegeti tipul de fila dorit,in functie
de tipul de server care va deservi aplicatia si in functie de tipul de
clienti care vor solicita aplicatia.
Pentru aplicatiile de Web,s-a impus tot mai mult standardul "ActiveX
technology" care utilizeaza obiecte de tip OLE si respectiv limbajul HTML
pentru editarea datelor de tip text.Documentele non-HTML si executabilele
in format binar,risca sa fie identificate ca "potentiali virusi".
-67- Data Access - DataSource
Restul obiectelor din paleta Internet(FTP,HTTP,NNTP,POP,SMTP si TCP),
sunt controale invizibile de tip ActiveX,destinate pentru a facilita
schimbul de date,prin protocoale specializate.Fiecare obiect este destinat
pentru un anumit tip de protocol de comunicatie.TCP si UDP,contin cate
un WinSocket atat pentru server cat si pentru client,astfel incat pot
fi utilizate atat pe post de server cat si pe post de client(asincron).
Aceste obiecte au o utilitate mai redusa si prezentarea lor detaliata
nu face obiectul acestui manual.Cei interesati,pot prelua de pe Internet
documentele RFC care descriu fiecare dintre aceste protocoale de comuni-
catie.Pentru activitatile banale si pentru programarea unor aplicatii,
sunt suficiente obiectele descrise anterior.Directorul Demos/Internet
contine cateva exemple functionale.Dintre acestea FTP,poate fi utilizat
cu succes pentru preluarea de file non-HTML,de la un server FTP.
Urmatoarea paleta de obiecte,denumita DataAccess contine componente
special concepute pentru a facilita accesul la datele arhivate in baze
de date sub forma de tabele(grid).Aceste obiecte nu functioneaza inde-
pendent ci doar in sinergism cu obiectele din paleta DataControls,care
vor afisa datele preluate.Doua sau mai multe astfel de obiecte,pot
realiza diverse variante de selectie si prezentare a datelor extrase din
baza de date.Pentru bazele de date mici (tabele izolate) se vor utiliza
obiecte care afiseaza tabelele integral (toate randurile si toate coloane-
le).Pentru baze de date mari si foarte mari,se pot realiza diverse combi-
natii de obiecte si proprietati,astfel incat datele extrase sa reflecte
cat mai fidel necesitatile utilizatorului.Aplicatiile de acest gen,se
proiecteaza astfel incat utilizatorul sa poata controla cat mai usor,
atat modul de selectie,cat si formatul de afisare a datelor preluate.
TDataSource -este componentul care va fi utilizat ca sursa de date,pentru
restul componentelor care prelucreaza datele.Practic este echivalent cu
un tampon de memorie RAM in care datele preluate din baza de date sunt
stocate temporar,inainte de a fi prelucrate de celelalte componente.In
acest tampon de memorie,datele pot fi editare,reformatate etc.TDataSource
nu poate fi utilizat decat impreuna cu un obiect care preia datele din
baza de date cum sunt: TTable sau TQuery,etc. Obiectul contine si cateva
proprietati si metode,destinate pentru editarea sau actualizarea datelor.
Dupa preluarea datelor in DataSource,toate obiectele linkate de acest
obiect opereaza asupra datelor din DataSource (in loc sa opereze asupra
datelor din baza de date).Acest fapt prezinta o serie de avantaje,dintre
care cel mai important este faptul ca datele pot fi prelucrate in diverse
moduri,fara ca sursa de date sa fie modificata de loc.Astfel,intr-o retea,
un numar oarecare de utilizatori pot prelucra aceeasi baza de date,cu
rezultate complet diferite,fara ca baza de date sa sufere modificari.
Fiecare utilizator,va arhiva in calculatorul sau rezultatul obtinut,fara
sa modifice baza de date (Exemplu: analiza actiunilor bancare dintr-o
bursa de actiuni structurata electronic: RASDAQ etc.).
Este importatnt de inteles rolul acestui component,deoarece detine un
rol cheie in executie.In eventualitatea unui volum excesiv de date,este
posibil ca acest obiect sa fie suprasaturat cu informatii.Pentru depanarea
rapida a unei astfel de aplicatii,este suficient sa inlocuiti obiectul
DataSource supradopat,cu un obiect DataSource nou (in cazul in care apli-
catia a functionat un timp oarecare,apoi s-a blocat).
-68-
De exemplu,pentru a prelua si afisa cateva imagini dintr-o baza de
date,este necesar un obiect DataSource(tamponul local),un obiect TTable
(asigura accesul la date) si un obiect TDBImage(afiseaza datele).Optional
se poate adauga si un obiect TDBNavigator(pentru a facilita deplasarea
in baza de date).
EXEMPLU: (vezi si Prj59)
Salvati o fila noua si proiectul in Prj59.Adaugati din DataAccess un
obiect TDataSource si un obiect TTable,apoi adaugati din DataControls un
obiect TDBImage si un obiect TDBNavigator.
Alegeti DataSource1 si setati proprietatea DataSet la valoarea Table1.
Apoi alegeti DBNavigator si setati proprietatea DataSource la valoarea
DataSource1.Selectati Table1 si setati proprietatea DatabaseName la va-
Dostları ilə paylaş: |
|
|