Rularea unui TDBGrid în timpul rulării
Exemplele pe care le veți vedea în acest articol vor demonstra principalele moduri în care majoritatea programatorilor folosesc pentru a afișa tabelele de baze de date către utilizatori. Pentru a înțelege majoritatea materialelor, aveți nevoie de o cunoaștere generală a mediului și a limbii Delphi.
Deschideți caseta combo Selector de obiecte din partea superioară a inspectorului de obiecte - în prezent există două componente: TForm și TQuery.
Faceți clic dreapta pe obiectul TQuery și selectați "Editor de câmpuri" din meniul contextual. Dați clic pe butonul Adăugați - se afișează caseta de dialog Adăugare câmpuri, după cum se arată în figura 1.
Aceste obiecte noi vor fi folosite pentru vizualizarea tabelului CUSTOMER la utilizator.
Iată lista completă a obiectelor care au fost create:
Această convenție poate fi foarte utilă atunci când lucrați cu mai multe mese și doriți să știți imediat ce domeniu se referă la masă.
Cea mai importantă proprietate este Value. Puteți accesa astfel:
procedura TForm1.Button1Click (expeditor: TObject);
În codul prezentat aici, valorile sunt atribuite mai întâi variabilelor d și S. Următoarele două linii modifică aceste valori, iar ultimele două atribuie noi valori obiectelor. Nu are sens să scrieți coduri ca acesta în program, dar acest cod servește doar pentru a demonstra sintaxa utilizată cu descendenții TField.
Proprietatea Value se potrivește întotdeauna cu tipul de câmp la care se aplică. De exemplu, TStringFields are un șir, TCurrencyFields are un dublu. Cu toate acestea, dacă sunt afișate câmp de tip TCurrencyField folosind componenta „date sensibile“ (date conștient: TDBEdit, TDBGrid etc), acesta va fi reprezentat printr-un șir de caractere, cum ar fi: „$ 5.00“.
Asta te poate face să crezi că Delphi a deconectat brusc controlul strict al tipului. Dupa TCurrencyField.Value declarate ca dublă, și dacă încercați să atribuiți un șir de caractere, veți obține o eroare de „nepotrivire de tip“ (nepotrivire de tip). Exemplul de mai sus demonstrează proprietățile obiectelor de vizualizare a datelor, mai degrabă decât slăbirea verificării tipului. (Cu toate acestea, este posibil pentru a obține valoarea câmpului este deja convertit la un alt tip. Pentru aceasta TField și urmașii săi un set AsString sau metode de tip AsFloat. Desigur, transformarea are loc doar atunci când are sens.)
Dacă doriți să obțineți numele câmpurilor în setul curent de date, atunci proprietatea FieldName este utilizată într-unul din cele două moduri de mai jos:
Dacă doriți să obțineți numele obiectului asociat cu câmpul, trebuie să utilizați proprietatea Nume:
Pentru tabela CUSTOMER, primul exemplu returnează șirul "CustNo", iar oricare dintre liniile celui de-al doilea exemplu returnează șirul "Query1CustNo".
- Efectuați calcule pe două sau mai multe câmpuri din DataSet și afișați rezultatul calculelor în al treilea câmp.
- Simulați conexiunea a două mese cu posibilitatea de a edita rezultatul conexiunii.
Programul CALC_SUM.DPR de la exemple la această lecție ilustrează primul caz de utilizare a câmpurilor calculate.
Acest program asociază trei tabele în raport cu unul la multe. În special, ORDERELE și ITEMS sunt legate prin câmpul OrderNo, iar ITEMS și PARTS sunt legate prin câmpul PartNo. (În tabelul ORDERS, toate comenzile sunt stocate, în tabelul ITEMS sunt elementele specificate în comenzi, PARTS este directorul de articole). În program, puteți naviga prin tabelul ORDERS și puteți vedea lista cu elementele incluse în ea în comanda curentă. Programul CALC_SUM este destul de complex, dar ilustrează bine câmpurile computerizate.
Secvența pentru crearea proiectului CALC_SUM:
- Creați un nou proiect (File | New Project) și ștergeți formularul din acesta (în Project Manager Project | Project Manager)
- Selectați expertul formular de bază de date din meniul Ajutor.
- În ecranul inițial, selectați "Creați un formular principal / detaliu" și "Creați un formular folosind obiecte TQuery".
- Faceți clic pe Următorul și selectați tabelul ORDERS.DB din aliasul bazei de date DBDEMOS.
- Faceți clic pe Următorul și selectați câmpurile OrderNo, CustNo, SaleDate, ShipDate și ItemsTotal din tabelul ORDERS.DB.
- Faceți clic pe Următorul și selectați "Orizontal" din plasarea componentelor dbEdit din formular.
- Faceți clic pe Următorul și selectați tabelul ITEMS.DB.
- În următoarele două ecrane, selectați toate câmpurile din tabel și plasați-le în grilă.
- Faceți clic pe Următorul și selectați câmpul OrderNo din lista principală și detaliată, apoi faceți clic pe butonul Adăugați.
- Faceți clic pe Următorul și generați formularul.
Este nevoie de o mulțime de cuvinte pentru a descrie procesul prezentat mai sus, dar, de fapt, executarea comenzilor în Expertul Formular de bază de date este ușor și intuitivă.
Selectați primul dintre cele două obiecte TQuery și setați proprietatea activă la True. Pentru Query2 în proprietatea SQL, scrieți textul interogării:
selectați * din Elementele I, P
unde (I.OrderNo =: OrderNo) și
Procesul simplu descris în paragraful anterior arată cum se creează un câmp calculat. Dacă te uiți la DBGrid, poți vedea că mai există un câmp gol. Pentru a pune o valoare în acest câmp, deschideți pagina Evenimente pentru obiectul Query2 din Inspectorul de obiecte și faceți dublu clic pe OnCalcFields. Completați metoda creată după cum urmează:
procedura TForm2.Query2CalcFields (DataSet: TDataSet);
După pornirea programului, câmpul Total va conține linia de 23.00 USD.
Aceasta arată cât de ușor este să creați un câmp calculat care să prezinte date corect formatate. De fapt, acest câmp trebuie să arate altceva - produsul câmpurilor Cantitate (cantitate) și ListPrice (preț). Pentru aceasta, codul de mai sus pentru evenimentul OnCalcFields trebuie modificat după cum urmează:
procedura TForm1.Query2CalcFields (DataSet: TDataset);
Dacă începeți acum programul, câmpul Total va conține valoarea dorită.
În procesorul de evenimente OnCalcFields, puteți efectua calcule mai complexe (aceasta va fi afișată mai târziu), însă nu uitați că acest lucru determină încetinirea corespunzătoare a performanței programului.
procedura TForm1.Query1CalcFields (DataSet: TDataset);
cu Query2 să înceapă