„Delphi“ užklausų naudojimas naudojant ADO

„TADOQuery“ komponentas teikia Delfi kūrėjams galimybė gauti duomenis iš vienos ar kelių lentelių iš ADO duomenų bazė naudojant SQL.

Šie SQL teiginiai gali būti DDL (duomenų apibrėžimo kalbos) teiginiai, tokie kaip CREATE TABLE, ALTER INDEX ir pan., Arba jie gali būti DML (duomenų manipuliavimo kalba) teiginiai, tokie kaip SELECT, UPDATE ir IŠTRINTI. Tačiau dažniausiai pasitaikantis teiginys yra SELECT, kuriame pateikiamas vaizdas, panašus į turimą naudojant lentelės komponentą.

Pastaba: nors ir įmanoma vykdyti komandas naudojant „ADOQuery“ komponentą, ADOCommandkomponentas yra tinkamesnis šiam tikslui. Dažniausiai jis naudojamas DDL komandoms vykdyti arba saugomai procedūrai vykdyti (net jei turėtumėte naudoti„TADOStoredProc“ tokioms užduotims), kurios negrąžina nustatyto rezultato.

ADOQuery komponente naudojamas SQL turi būti priimtinas naudojamai ADO tvarkyklei. Kitaip tariant, jūs turėtumėte būti susipažinę su SQL rašymo skirtumais, pavyzdžiui, su MS Access ir MS SQL.

Kaip dirbant su ADOTable komponentu, duomenų bazės duomenys pasiekiami naudojant duomenų saugyklos ryšį, kurį sukuria ADOQuery komponentas, naudodamas

instagram viewer
„ConnectionString“ nuosavybė arba per atskirą ADOConnection komponentą, nurodytą Ryšysnuosavybė.

Norėdami sukurti „Delphi“ formą, leidžiančią nuskaityti duomenis iš „Access“ duomenų bazės naudojant „ADOQuery“ komponentą, tiesiog palikite visus susijusius duomenų prieigos ir su ja susijusius duomenis, ir sukurkite nuorodą, kaip aprašyta ankstesniuose šio skyriaus skyriuose žinoma. Prieigos prie duomenų komponentai: „DataSource“, „ADOConnection“ kartu su „ADOQuery“ (vietoj „ADOTable“) ir vieno duomenų suvokimo komponento, pavyzdžiui, „DBGrid“, yra viskas, ko mums reikia.
Kaip jau paaiškinta, naudodamas objektų inspektorių, nustatykite šių komponentų ryšį taip:

DBGrid1.DataSource = DataSource1
„DataSource1.DataSet“ = „ADOQuery1“
ADOQuery1.Connection = ADOConnection1
// sukurkite „ConnectionString“
ADOConnection1.ConnectionString = ...
ADOConnection1.LoginPrompt = klaidinga

Atlieka SQL užklausą

„TADOQuery“ komponentas neturi TableNamenuosavybė, kaip tai daro „TADOTable“. „TADOQuery“ turi savybę (TStrings), vadinamą SQL kuris naudojamas saugoti SQL. Galite nustatyti SQL nuosavybės vertę naudodamiesi objektų inspektoriumi projektavimo metu arba naudodami kodą vykdymo metu.

Projektavimo metu kreipkitės į SQL nuosavybės redaktorių spustelėdami elipsės mygtuką Objekto inspektoriuje. Įveskite šį SQL teiginį: „SELECT * FROM Authors“.

SQL sakinys gali būti vykdomas dviem būdais, atsižvelgiant į sakinio tipą. Duomenų apibrėžimo kalbos teiginiai paprastai vykdomi naudojant „ExecSQL“ metodas. Pavyzdžiui, norėdami ištrinti tam tikrą įrašą iš konkrečios lentelės, galite parašyti DETL DDL teiginį ir paleisti užklausą naudodami „ExecSQL“ metodą.
(Įprasti) SQL teiginiai vykdomi nustatant „TADOQuery“. Aktyvus nuosavybė Tiesa arba paskambinęAtviras metodas (iš esmės tas pats). Šis metodas yra panašus į lentelės duomenų gavimą naudojant „TADOTable“ komponentą.

Vykdymo metu SQL ypatybė SQL gali būti naudojama kaip bet kuris „StringList“ objektas:

su ADOQuery1 pradėti uždaryti; 
„SQL.Clear“;
SQL.Pridėti: = 'PASIRINKTI * IŠ Autorių' SQL.Pridėti: = 'UŽSAKYTI PAGAL autoriaus vardą DESC' Atidaryti;
galas;

Aukščiau pateiktas kodas vykdymo metu uždaro duomenų rinkinį, išvalo SQL ypatybę SQL, priskiria naują SQL komandą ir suaktyvina duomenų rinkinį, iškviesdamas „Open“ metodą.

Atminkite, kad aiškiai sukurti nuolatinį lauko objektų sąrašą ADOQuery komponentui nėra prasmės. Kitą kartą paskambinus „Open“ metodu, SQL gali būti toks skirtingas, kad gali pasikeisti visas pateiktų vardų (ir tipų) rinkinys. Žinoma, tai nėra tas atvejis, jei mes naudojame „ADOQuery“, kad gautume eilutes tik iš vienos lentelės su pastoviu laukų rinkiniu - ir gautas rinkinys priklauso nuo to, kur SQL dalis yra KUR.

Dinaminės užklausos

Viena iš puikių "TADOQuery" komponentų savybių yra Paramos nuosavybė. Parametrizuota užklausa leidžia lanksčiai pasirinkti eilutę / stulpelį naudojant parametrą SQL sakinio WHERE punkte. Savybė „Params“ leidžia pakeisti parametrus iš anksto apibrėžtame SQL. Parametras yra WHERE sakinyje esančios vertės rezervuaras, apibrėžtas prieš pat atidarant užklausą. Norėdami nurodyti parametrą užklausoje, naudokite dvitaškį (:) prieš parametro pavadinimą.
Projektavimo metu naudokite objektų inspektorių, kad nustatytumėte SQL ypatybes taip:

ADOQuery1.SQL: = 'PASIRINKITE * IŠ Programų, kur tipas =: programos tipas'

Kai uždarote SQL redagavimo priemonės langą, atidarykite parametrų langą, spustelėdami elipsės mygtuką Objekto inspektoriuje.

Ankstesniame SQL sakinyje nurodytas parametras yra pavadintasprogramėlė. Parametrų kolekcijos parametrų vertes projektavimo metu galime nustatyti per dialogo langą Parametrai, tačiau dažniausiai parametrus keisime vykdymo metu. Dialogas Parametrai gali būti naudojamas užklausoje naudojamų parametrų duomenų tipams ir numatytosioms reikšmėms nurodyti.

Įvykimo metu parametrus galima pakeisti ir užklausa pakartotinai įvykdyta, norint atnaujinti duomenis. Norint atlikti parametrinę užklausą, prieš pateikiant užklausą būtina pateikti kiekvieno parametro vertę. Norėdami modifikuoti parametro vertę, naudojame „Params“ savybę arba „ParamByName“ metodą. Pavyzdžiui, atsižvelgiant į aukščiau pateiktą SQL sakinį, vykdymo metu galėtume naudoti šį kodą:

su ADOQuery1 prasideda
Uždaryti;
„SQL.Clear“;
SQL.Add ('PASIRINKITE * IŠ Programų, kur tipas =: programos tipas');
„ParamByName“ („programėlė“). Vertė: = „daugialypė terpė“;
Atviras;
galas;

Panašiai kaip dirbant su ADOTable komponentu, ADOQuery grąžina rinkinį arba įrašus iš lentelės (ar dviejų ar daugiau). Naršymas po duomenų rinkinį atliekamas tais pačiais metodais, aprašytais skyriuje „Duomenų rinkinio pagrindas“.

Naršymas ir užklausos redagavimas

Apskritai, „ADOQuery“ komponentas neturėtų būti naudojamas redaguojant. SQL pagrįstos užklausos dažniausiai naudojamos ataskaitų teikimo tikslais. Jei jūsų užklausa grąžina rezultatų rinkinį, kartais įmanoma redaguoti grąžintą duomenų rinkinį. Rezultatų rinkinyje turi būti įrašai iš vienos lentelės ir jame neturi būti naudojamos visos SQL funkcijos. „ADOQuery“ grąžinto duomenų rinkinio redagavimas yra tas pats, kas „ADOTAble“ duomenų rinkinio redagavimas.

Pavyzdys

Norėdami pamatyti kai kuriuos „ADOQuery“ veiksmus, užkoduosime nedidelį pavyzdį. Sudarykime užklausą, kuri gali būti naudojama eilučių rinkimui iš įvairių duomenų bazės lentelių. Norėdami parodyti visų duomenų bazių lentelių sąrašą, galime naudoti „GetTableNames“metodas ADOC jungtis komponentas. Formos „OnCreate“ įvykyje esantys „GetTableNames“ užpildo „ComboBox“ lentelių pavadinimais, o mygtukas naudojamas užklausai uždaryti ir atkurti ją atkurti įrašus iš pasirinktos lentelės. () Renginių vedėjai turėtų atrodyti taip:

procedūra TForm1.FormCreate (Siuntėjas: TObject);
prasideda
ADOConnection1.GetTableNames („ComboBox1.Items“);
galas;
procedūra TForm1.Button1Click (Siuntėjas: TObject);
var tblname: styga;
prasideda
jei „ComboBox1.ItemIndex“, tada išeikite;
tblname: = ComboBox1.Items [ComboBox1.ItemIndex];
su ADOQuery1 prasideda
Uždaryti;
SQL.Text: = 'SELECT * FROM' + tblname;
Atviras;
galas;
galas;

Atminkite, kad visa tai galima padaryti naudojant „ADOTable“ ir jo „TableName“ ypatybes.