TADOQuery-komponentti tarjoaa Delfoi kehittäjät kyky hakea tietoja yhdestä tai useammasta taulukosta ADO-tietokanta käyttämällä SQL: tä.
Nämä SQL-lauseet voivat olla joko DDL (Data Definition Language) -lausekkeita, kuten CREATE TABLE, ALTER INDEKSI ja niin edelleen, tai ne voivat olla DML (Data Manipulation Language) -käskyjä, kuten SELECT, UPDATE ja POISTAA. Yleisin lause on kuitenkin SELECT-käsky, joka tuottaa samanlaisen näkymän kuin mitä on saatavana taulukkomponentin avulla.
Huomaa: vaikka komentojen suorittaminen ADOQuery-komponentilla on mahdollista, ADOCommandkomponentti on sopivampi tähän tarkoitukseen. Sitä käytetään useimmiten DDL-komentojen suorittamiseen tai tallennetun menettelyn suorittamiseen (vaikka sinun pitäisi käyttääTADOStoredProc sellaisille tehtäville), joka ei palauta tulosjoukkoa.
ADOQuery-komponentissa käytetyn SQL: n on oltava hyväksyttävä käytetylle ADO-ohjaimelle. Toisin sanoen sinun pitäisi tuntea esimerkiksi MS Accessin ja MS SQL: n SQL-kirjoituserot.
Kuten ADOTable-komponentin kanssa työskennellessä, tietokannan tietoihin päästään ADOQuery-komponentin muodostaman tietovarastoyhteyden avulla
ConnectionString omaisuutta tai erillisen ADOConnection - komponentin kautta, joka on määritelty yhteysomaisuutta.Jotta Delphi-muoto pystyy noutamaan tietoja Access-tietokannasta ADOQuery-komponentilla, pudota kaikki siihen liittyvät tietojen käyttöoikeudet ja tietoiset komponentit ja muodosta linkki tämän edellisissä luvuissa kuvatulla tavalla kurssi. Tiedonsiirtokomponentit: DataSource, ADOConnection yhdessä ADOQueryn kanssa (ADOTablen sijaan) ja yksi tietoinen komponentti, kuten DBGrid, ovat kaikki mitä tarvitsemme.
Kuten jo selitettiin, aseta objektin tarkastajaa käyttämällä linkki näiden komponenttien välillä seuraavasti:
DBGrid1.DataSource = DataSource1
DataSource1.DataSet = ADOQuery1
ADOQuery1.Connection = ADOConnection1
// rakenna ConnectionString
ADOConnection1.ConnectionString = ...
ADOConnection1.LoginPrompt = Väärä
Suoritetaan SQL-kysely
TADOQuery-komponentilla ei ole tablenameomaisuutta kuten TADOTable. TADOQueryllä on omaisuus (TStrings), jota kutsutaan SQL jota käytetään SQL-lauseen tallentamiseen. Voit asettaa SQL-ominaisuuden arvon Object Inspector -sovelluksella suunnittelun aikana tai koodin avulla suorituksen aikana.
Suunnitteluaikana kutsua ominaisuuseditori SQL-ominaisuuteen napsauttamalla ellipsis-painiketta Object Inspectorissa. Kirjoita seuraava SQL-lause: "VALITSE * kirjoittajilta".
SQL-käsky voidaan suorittaa kahdella tavalla, lauseen tyypistä riippuen. Data Definition Language -käskyt suoritetaan yleensä ExecSQL menetelmä. Voit esimerkiksi poistaa tietyn tietueen tietystä taulukosta kirjoittamalla DELETE DDL-käskyn ja suorittaa kyselyn ExecSQL-menetelmällä.
(Tavalliset) SQL-käskyt suoritetaan asettamalla TADOQuery. aktiivinen omaisuutta Totta tai soittamallaAvata menetelmä (olennaisesti sama). Tämä lähestymistapa on samanlainen kuin taulukkotietojen hakeminen TADOTable-komponentilla.
Ajon aikana SQL-ominaisuuden SQL-käskyä voidaan käyttää missä tahansa StringList-objektissa:
ADOQuery1: n kanssa aloitetaan Sulje;
SQL.Clear;
SQL.Lisä: = 'VALITSE * kirjoittajilta' SQL.Lisä: = 'Tilaaminen tekijänimellä DESC' Avaa;
end;
Yllä oleva koodi suorituksen aikana sulkee tietojoukon, tyhjentää SQL-merkkijonon SQL-ominaisuudessa, antaa uuden SQL-komennon ja aktivoi tietojoukon kutsumalla Open-menetelmää.
Huomaa, että tietysti jatkuvan luettelon luominen kenttäobjekteja ADOQuery-komponentille ei ole järkevää. Seuraavan kerran kun soitat Open-menetelmälle, SQL voi olla niin erilainen, että koko arkistoitujen nimien (ja tyyppien) joukko voi muuttua. Tätä ei tietenkään ole, jos käytämme ADOQueryä rivien noutamiseen vain yhdestä taulukosta vakiokenttijoukolla - ja tuloksena oleva joukko riippuu SQL-lauseen WHERE-osasta.
Dynaamiset kyselyt
Yksi TADOQuery-komponenttien hienoista ominaisuuksista on parametrien omaisuutta. Parametrisoitu kysely on sellainen, joka sallii joustavan rivin / sarakkeen valinnan parametrilla SQL-lauseen WHERE-lauseessa. Parametrit-ominaisuus sallii korvattavien parametrien ennalta määritettyyn SQL-käskyyn. Parametri on WHERE-lauseen arvon paikkamerkki, joka määritetään juuri ennen kyselyn avaamista. Määritä parametri kyselyssä käyttämällä kaksoispistettä (:) ennen parametrin nimeä.
Aseta SQL-ominaisuus suunnittelun aikana Object Inspector -sovelluksella seuraavasti:
ADOQuery1.SQL: = 'VALITSE * sovelluksista, jotka kirjoittavat =: apptype'
Kun suljet SQL-editori-ikkunan, avaa Parametrit-ikkuna napsauttamalla objektiinspektorin ellipsis-painiketta.
Edellisen SQL-käskyn parametri on nimettyapptype. Voimme asettaa parametrien arvot Parame-kokoelmassa suunnitteluaikana Parametrit-valintaikkunan kautta, mutta muutamme suurimman osan ajasta parametreja ajon aikana. Parametrit-valintaikkunassa voidaan määrittää kyselyssä käytettyjen parametrien tietotyypit ja oletusarvot.
Ajon aikana parametreja voidaan muuttaa ja kysely suorittaa uudelleen datan päivittämiseksi. Parametrisoidun kyselyn suorittamiseksi on tarpeen antaa arvo jokaiselle parametrille ennen kyselyn suorittamista. Parametriarvon muuttamiseksi käytämme joko Params-ominaisuutta tai ParamByName-menetelmää. Esimerkiksi, kun otetaan huomioon yllä oleva SQL-käsky, voimme suorituksen aikana käyttää seuraavaa koodia:
ADOQuery1: n kanssa alkavat
Kiinni;
SQL.Clear;
SQL.Add ('SELECT * FROM sovelluksista, joissa type =: apptype');
ParamByName ( 'apptype'). Arvo: = 'multimedia';
Avata;
end;
Kuten työskennellessäsi ADOTable-komponentin kanssa, ADOQuery palauttaa joukon tai tietueita taulukosta (tai kahdesta tai useammasta). Selaa tietojoukkoa käyttämällä samoja menetelmiä, jotka on kuvattu kappaleessa "Tietojen takana tietojoukossa".
Kyselyssä navigointi ja muokkaaminen
Yleensä ADOQuery-komponenttia ei tule käyttää, kun muokkaaminen tapahtuu. SQL-pohjaisia kyselyitä käytetään enimmäkseen raportointitarkoituksiin. Jos kysely palauttaa tulosjoukon, palautettua tietojoukkoa on joskus mahdollista muokata. Tulosjoukon on sisällettävä tietueita yhdestä taulukosta, eikä se saa käyttää mitään SQL-aggregaattitoimintoja. ADOQueryn palauttaman tietojoukon muokkaaminen on sama kuin ADOTAblen tietoaineiston muokkaaminen.
esimerkki
Koodaamme pienen esimerkin nähdäksesi jonkin ADOQuery-toiminnan. Tehdään kysely, jota voidaan käyttää rivien noutamiseen tietokannan eri taulukoista. Voit näyttää luettelon kaikista tietokannan taulukoista käyttämällä GetTableNamesmenetelmä ADOConnection komponentti. Lomakkeen OnCreate-tapahtuman GetTableNames täyttää ComboBox-taulukon nimillä. Painikkeella kysely suljetaan ja uudelleen luodaan tietueiden hakemiseksi valitusta taulukosta. () Tapahtumakäsittelijöiden tulisi näyttää seuraavalta:
menettely TForm1.FormCreate (Lähettäjä: TObject);
alkaa
ADOConnection1.GetTableNames (ComboBox1.Items);
end;
menettely TForm1.Button1Click (Lähettäjä: TObject);
var tblname: merkkijono;
alkaa
jos ComboBox1.ItemIndex sitten Exit;
tblname: = ComboBox1.Items [ComboBox1.ItemIndex];
ADOQuery1: n kanssa alkavat
Kiinni;
SQL.Text: = 'SELECT * FROM' + tblname;
Avata;
end;
end;
Huomaa, että kaikki tämä voidaan tehdä käyttämällä ADOTable-sovellusta ja sen TableName-ominaisuutta.