Dezvoltarea componentelor db-aware

Structura componentelor DB-Aware
Clasa TDataLink
Alegerea unei modalități de a organiza un canal de date.
Dezvoltarea componentelor care afișează setul de date
Dezvoltarea de componente care modifică setul de date






Dezvoltarea componentelor db-aware

Structura componentelor DB-Aware

Pentru a implementa această transformare, trebuie doar să includeți un câmp suplimentar în clasa de componente existentă și să scrieți mai multe metode care oferă o legătură între componentă și setul de date.

Cu alte cuvinte, pentru a crea un DB-A, trebuie să selectăm componenta cea mai potrivită pentru cerințele noastre și apoi să descriem modelul comportamental al pachetului de date componente. Trebuie remarcat faptul că nu există cerințe speciale pentru componenta existentă, poate fi un control grafic sau de fereastră, o componentă non-vizuală, un dialog și așa mai departe.

  • componente care afișează numai date
  • componente care pot modifica seturile de date.

În mod firesc, primul tip de componente este mai simplu decât cel de-al doilea.

În general, schema de construire a componentelor care lucrează cu date poate fi reprezentată după cum urmează (Figura 1):

Să trecem la punerea în aplicare a DataLink. Există o clasă corespunzătoare TDataLink pentru aceasta, următoarea secțiune este dedicată acesteia.

Clasa TDataLink

Clasa TDataLink este clasa de bază pentru ierarhia claselor de comunicare cu baza de date. Clasa oferă un canal de comunicare pentru citire / scriere în baza de date.

Această clasă este descrisă în modulul DB și partea sa de interfață arată astfel (secțiunea privată este omisă):

Comunicarea pentru gestionarea seturilor de date, relațiile înrudite este principalul - subordonat.

Alegerea unei modalități de a organiza un canal de date.

După cum sa menționat mai sus, există mai multe canale de comunicare gata pentru diferite scopuri. Astfel, pentru a organiza conectarea componentei dvs. cu un set de date, puteți lua întotdeauna o clasă gata făcută. În acest caz, atunci când creați o componentă, trebuie să atribuiți procesatori de evenimente dinamice pentru canalul de date selectat.

Să ne uităm la modul în care acest concept este implementat într-una din clasele cele mai frecvent utilizate - TDEdit, o versiune "trunchiată" a cărei versiune este dată mai jos:

Așa cum am menționat mai sus, canalul de comunicare este creat în designer. Metodele de întreținere a evenimentelor din setul de date sunt implementate sub formă de agenți de procesare a evenimentelor.

După cum puteți vedea din descrierea designerului, utilizarea dinamică a evenimentelor este utilizată activ în componentă, care în principiu nu este un ton bun în programarea componentelor. Cu toate acestea, în acest caz, câmpul FDataLink este privat și nu puteți să îl realocați utilizatorilor.

Lista evenimentelor TFieldDataLink este prezentată în tabel:

modificări de date cauzate de unul dintre următoarele motive: - Trecerea la un nou record sau stolbtsu- introduceți edita a seta modul de a datelor DataSource modificări de proprietate sau DataField -Recovers valori AplVechi Anulare

Conectați-vă sau ieșiți la / din modul de editare al setului de date

Scrierea modificărilor în baza de date

Schimbați proprietatea activă a unui set de date conectat







Datorită simplității sale, această modalitate de organizare a componentelor DB-AWARE este optimă pentru a crea soluții destul de simple, dar are câteva dezavantaje, printre care:

  • În clasele moștenite, comportamentul componentei este dificil de modificat;
  • În cazul proiectării componentelor complexe, se obține un cod destul de greu de citit, deoarece codul asociat prelucrării datelor și codul componentei se află direct în interiorul unei entități.

A doua abordare comună este să vă scrieți canalul de comunicare pentru componente. Aceasta este o procedură mult mai consumatoare de timp, dar merită. Exemple suplimentare ale acestui capitol demonstrează dezvoltarea în acest mod a componentelor DB-Aware.

Dezvoltarea componentelor care afișează setul de date

Componentele acestui tip de gen sunt cele mai simple de înțeles, totuși dezvoltarea lor necesită o înțelegere clară a detaliilor funcționării canalului de comunicare între setul de date și componenta.

Biblioteca standard a componentelor Delphi are un control interesant - DBRadioGroup, ca valori pentru butoanele radio le utilizează lista de TStrings de tip, care pot fi inițializate atât în ​​etapa de proiectare și în etapa de dezvoltare. Cu toate acestea, destul de des (de exemplu, atunci când dezvoltăm sisteme de testare), este necesar să inițializăm această listă din baza de date, pe care această componentă nu o poate face.

Vom scrie o componentă RadioGroup care va putea completa o listă de butoane radio în conformitate cu datele din câmpul tabelului.

Acum, ia în considerare punerea în aplicare a clasei de conexiune de date:

Componenta noastră ar trebui să funcționeze în două moduri - actualizarea listei butoanelor radio și interacțiunea directă a utilizatorului cu componenta. De aceea trebuie să definiți în mod clar când vom actualiza lista de butoane. În exemplul nostru, facem acest lucru numai când setul de date este deschis / închis, iar atunci când câmpul este modificat, valorile din care sunt luate ca valori ale butoanelor radio.

Metoda RecordChanged necesită o manipulare destul de precisă - se numește foarte des (atunci când se trece de la o înregistrare la alta, se schimbă starea setului de date etc.). Într-un sens, această metodă seamănă cu un controler al serviciului de gestionare a evenimentelor mouse-ului, deoarece ambele trebuie să servească un număr mare de evenimente și, firește, ar trebui să funcționeze foarte repede.

Acum este momentul sa te uiti la componenta care va afisa datele:

Note privind codul:

  1. Proprietatea DataSource a componentei este de fapt proprietatea TDataLink cu același nume
  2. Componenta DB-Aware acționează ca părinte pentru clasa de pachete și, prin urmare, creează și o distruge.
  3. Pentru a dezactiva / activa TDataLink, trebuie să apelați metodele DisableControls / EnableControls din setul de date.

Observații privind regulile de ton bun:

  • Clasa derivată TDataLink trebuie să conțină numele componentei în care este utilizată, precum și funcția sa principală.
  • Pentru numele sursei de date, precum și proprietățile care conțin numele câmpurilor de date, ar trebui să încercați să utilizați nume care au devenit de - facto, dar acest lucru ar trebui să fie văzută relația dintre sursele de date și câmpuri. (DataSource - DataField, ListSource - ListField).

Dezvoltarea de componente care modifică setul de date

Anterior, am analizat o componentă care poate afișa date dintr-un set, acum vom încerca să creăm o altă componentă care poate modifica setul de date.

Când setul de date nu se află în modul de editare, componenta nu poate fi activă, dar trebuie să sincronizeze poziția butonului selectat cu valoarea câmpului de date setat:

Când setul de date intră în modul de editare sau de adăugare a noii înregistrări a componentelor, aceasta are următoarea formă și vă permite să introduceți automat valoarea selectată în câmpul de date:

Pentru a face acest lucru, trebuie să introduceți un alt canal de date, care este deja axat pe modificarea datelor.

Ca clasă de bază pentru component, să luăm clasa, dezvoltată în exemplul anterior, care oferă funcționalitatea de bază a cartografierii datelor.

Să analizăm implementarea canalului de comunicare pentru modificarea datelor:

Următoarele metode merită o atenție deosebită:

Procedura TmmRGWriteDataLink.EditingChanged - răspunde la activarea / dezactivarea setului de date modul (insert editare) componenta iperevodit în modul de modificare a setului de date.

Acum puteți merge la componenta în sine:

În acest caz, a existat o singură dificultate - TCustomRadioGroup la prima vedere nu are o metodă care ar fi controlorul evenimentului de intrare al utilizatorului.

Pentru a rezolva această problemă, a ajutat studiul codurilor sursă TCustomRadioGroup. Acordați o atenție deosebită implementării metodei Click, care efectuează efectiv acțiunile de care avem nevoie.







Articole similare

Trimiteți-le prietenilor: