SQL (Structured Query Language) er et standardisert språk for å definere og manipulere data i en relasjonsdatabase. I samsvar med den relasjonelle datamodellen oppleves databasen som et sett med tabeller, relasjoner er representert med verdier i tabeller, og data hentes ved å spesifisere en resultattabell som kan avledes fra en eller flere basisbord. Spørsmål har form av et kommandospråk som lar deg velge, sette inn, oppdatere, finne ut plasseringen av data, og så videre.
I Delphi: TQuery
Hvis du skal bruke SQL i applikasjonene dine, blir du veldig kjent med TQuery komponent. Delphi gjør at applikasjonene dine kan bruke SQL-syntaks direkte via TQuery-komponent for å få tilgang til data fra Paradox og dBase-tabeller (ved bruk av lokal SQL - undergruppe av ANSI-standard SQL), databaser på Local InterBase Server og databaser i ekstern database servere.
Delphi støtter også heterogene spørsmål mot mer enn en server eller tabelltype (for eksempel data fra en Oracle-tabell og en Paradox-tabell) .TQuery har en egenskap som heter SQL, som brukes til å lagre SQL-setningen.
TQuery innkapsler en eller flere SQL-setninger, utfører dem og gir metoder som vi kan manipulere resultatene på. Spørsmål kan deles inn i to kategorier: de som produserer resultatsett (for eksempel a PLUKKE UT uttalelse), og de som ikke gjør det (for eksempel en OPPDATEReller SETT INN uttalelse). Bruk TQuery. Åpent for å utføre en spørring som gir et resultatsett; bruk TQuery. ExecSQL for å utføre spørsmål som ikke produserer resultatsett.
SQL-setningene kan være enten statisk eller dynamisk, det vil si at de kan stilles inn på designtidspunktet eller inkludere parametere (TQuery. params) som varierer ved kjøretid. Det er veldig fleksibelt å bruke parameteriserte spørsmål fordi du kan endre brukerens syn på og tilgang til data når du er på flukt.
Alle kjørbare SQL-setninger må være forberedt før de kan kjøres. Resultatet av forberedelsene er utførbar eller operativ form for uttalelsen. Metoden for å utarbeide en SQL-setning og vedvaren av dens operative form skiller statisk SQL fra dynamisk SQL. På designtidspunktet utarbeides og utføres en spørring automatisk når du angir spørsmål komponentens aktive egenskap til True. På kjøretid utarbeides en spørring med et anrop til å forberede og utføres når applikasjonen kaller komponentens Open- eller ExecSQL-metoder.
En TQuery kan returnere to typer resultatsett: "bo"som med TTable-komponent (brukere kan redigere data med datakontroller, og når en samtale til Innlegg oppstår endringer til databasen),"skrivebeskyttet"kun for visningsformål. For å be om et live resultatsett, angir du en spørringskomponentens RequestLive-egenskap til True, og vær klar over at SQL-setningen må oppfylle noen spesifikke krav (ingen BESTILL AV, SUM, AVG, etc.)
En spørring oppfører seg på mange måter veldig som et bordfilter, og på noen måter er et spørsmål enda kraftigere enn et filter fordi det gir deg tilgang til:
- mer enn en tabell om gangen ("bli med" i SQL)
- et spesifisert undergruppe av rader og kolonner fra den eller de underliggende tabellene, i stedet for å alltid returnere alle
Enkelt eksempel
La oss nå se noen SQL i aksjon. Selv om vi kunne bruke databaseformveiviseren til å lage noen SQL-eksempler for dette eksempelet, vil vi gjøre det manuelt, trinn for trinn:
1. Plasser en TQuery, TDataSource, TDBGrid, TEdit og en TButton-komponent på hovedskjemaet.
2. Sett TDataSource-komponentens DataSet-egenskap til Query1.
3. Sett TDBGrid-komponentens DataSource-egenskap til DataSource1.
4. Sett TQuery-komponentens DatabaseName-egenskap til DBDEMOS.
5. Dobbeltklikk på SQL-egenskapen til en TQuery for å tilordne SQL-setningen til den.
6. For å få rutenettet til å vise data på designtidspunktet, endrer du TQuery-komponentens Active-egenskap til True.
Rutenettet viser data fra Employee.db-tabellen i tre kolonner (FirstName, LastName, Salary) selv om Employee.db har 7 felt, og resultatsettet er begrenset til postene der FirstName begynner med 'R'.
7. Nå tilordner du følgende kode til OnClick-hendelsen på knappen1.
fremgangsmåte TForm1.Button1Click (avsender: TObject); begynne Query1.Close;{lukk spørringen}// tilordne nytt SQL-uttrykk Query1.SQL.Clear; Query1.SQL.Add ('Velg EmpNo, FirstName, LastName'); Query1.SQL.Add ('FRA Employee.db'); Query1.SQL.Tillegg ('WHERE Salary>' + Edit1.Text); Spørsmål1.RequestLive: = true; Query1.Open; {åpen spørring + visningsdata}slutt;
8. Kjør søknaden din. Når du klikker på knappen (så lenge Edit 1 har en gyldig valutaverdi i seg), vil rutenettet vise EmpNo, FirstName og LastName felt for alle poster der lønnen er større enn den spesifiserte valutaen verdi.
I dette eksemplet opprettet vi en enkel statisk SQL-setning med live resultatsett (vi har ikke endret noen av viste poster) bare for visningsformål.