Lucrul cu ado în delphi

Lucrul cu ado în delphi

Bună, din nou, scriu un articol despre ADO. și, de asemenea, la cererea cititorilor blog-ul meu, care a cerut să spună modul în care baza de date poate lucra cu câmpuri calculate (la valoarea unui câmp calculat schimbat imediat la introducerea unei noi valori), exemplul bazei de date - MS Access. Vă voi spune două modalități de a lucra cu câmpurile calculate și, pentru un exemplu, voi arăta doar o singură cale. Ei bine, prima cale este aceea de a crea toate câmpurile, inclusiv câmpul calculat, în baza de date - MS Access. și tipul de date, câmpul în care va fi modificată valoarea, este specificat în câmpul Calculat.







În ceea ce privește a doua metodă, câmpul calculat, pe care îl vom crea în proiectul nostru, prin componentele TAdoQuery sau TAdoTable.

Ei bine și imediat o voi spune, că nu este așa corect 3 metodă la care este posibil să utilizați TTimer.

Să începem cu baza noastră de date.

Am următoarea structură în baza de date:

Așadar, am creat un DB în MS Access, acum mergem la proiectul propriu-zis în Delphi. pe formularul am următoarele componente:

Acum, facem legatura cu baza noastra de date, cum sa facem, am luat in considerare in articol. așa că nu mă voi concentra asupra acestui lucru. Apoi, trebuie să legăm toate componentele împreună, bine, aici mergem. Selectați componenta TADOQuery și specificați proprietatea Connection - TADOConencție. Apoi, selectați componenta TDataSource și specificați TADOQuery în proprietatea DataSet. Apoi, selectați componenta TDBGrid și specificați TDataSource din proprietatea DataSource.

Toate, acum vom adăuga toate câmpurile noastre. Pentru aceasta, trebuie să activați cererea și conexiunea. În proprietatea componentei TADOConenction-Connected, setați la True. și în proprietatea componentei TADOQuery - SQL. scrieți următoarea interogare

Mulțumesc Andrew53. Un exemplu interesant. Și de îndată ce nu am încercat, nu a mers. Se pare ca totul ingenios. La dvs. pe un site al informațiilor din bazele de date, va fi suficient în manualul de sunet. Și cred că dacă ar putea fi publicat, ar fi popular, cel puțin printre începători (cel puțin). Vă mulțumim că ați ajutat să înțelegeți și să nu lăsați întrebările nesupravegheate.






Am încercat să repet
procedura TForm1.ADOQuery1CalcFields (DataSet: TDataSet);
începe
ADOQuery1Sum.AsInteger: =
ADOQuery1Values.AsInteger * ADOQuery1Count.AsInteger;
se încheie;
au zburat erori, deși sursa este încă scrisă și funcțională.
Am încercat să înregistrez coloane prin câmpuri
începe
AdoQuery1.Fields.FieldByName ("Ost") AsInteger: =
AdNoQuery1.Fields.FieldByName ("Sosire") AsInteger-AdoQuery1.Fields.FieldByName ("Expense") AsInteger;
se încheie;
A câștigat.
Poate că el a blestemat numele rus,
Sau că în loc de Grida obișnuită folosesc DBGridEh?

Nu, că în loc de grila standard folosiți DBGRidEh nu este o problemă, și eroarea, deși ceea ce a decolat?

Bună ziua, vă mulțumesc foarte mult pentru articol.
Ajutați-mă să vă rog. Încă nu sunt foarte bun cu bazele de date și nu înțeleg unde este salvată suma a două câmpuri.
În baza de date Acces, câmpul creat prin Delphi 7 nu există și nici nu există valori. Deschid programul, există o valoare.
Pot să fac valorile calculate în Calc?

da, puteți, trebuie doar să fie salvat, ADOQuery.Post

Nu este destul de înțeles, dar în Delphi puteți determina numărul de zile într-o lună, în funcție de această sumă puteți crea o tabelă în baza de date cu numărul corect de rânduri!

Un alt mod în care DBGrid (DBGridEh) organizează o coloană în care este afișată valoarea calculată sau, în general, orice altă linie.
În lista coloanelor DBGrid este creată încă una care nu este asociată cu niciun câmp din tabela de baze de date.
În procedura de procesare a evenimentului OnDrawColumnCell, grilele procesează date, regăsesc și tipăresc rezultatul:
procedura TForm1.DBGrid1DrawColumnCell (expeditor: TObject; const Rect: TRect;
DataCol: Integer; Coloană: TColumn; Stat: TGridDrawState);
var
D. șir;
R. TRect;
începe
dacă Column.Index = 6, atunci începeți // indexul coloanei suplimentare
// operatori de calcul sau orice alta
R: = Rect;
InflateRect (R, 0, -2);
DrawText (DBGrid1.Canvas.Handle, PChar (D), -1, R, DT_Center);
se încheie;
se încheie;

Dezavantajul este că rezultatul afișat nu poate fi utilizat în altă parte a programului. Dar situațiile în care nu este necesar este suficient.

Și poți să filtrezi câmpul calculat? Încercat, nu a funcționat!
int n;
n = 2500;
ADOTable1-> Filtered = false;
ADOTable1-> Filter = "(Handled = '" + IntToStr (n) + "')";
ADOTable1-> Filtered = true;
DBChart1-> RefreshData ();>

Câmpul "lucrat" este calculat!
Vă mulțumim în avans!







Articole similare

Trimiteți-le prietenilor: