SQL (Structured Query Language) är ett standardiserat språk för att definiera och manipulera data i en relationsdatabas. I enlighet med den relationella datamodellen uppfattas databasen som en uppsättning tabeller, relationer är representeras av värden i tabeller, och data hämtas genom att specificera en resultattabell som kan härledas från en eller flera basbord. Frågor har formen av ett kommandospråk som låter dig välja, infoga, uppdatera, hitta ut platsen för data, och så vidare.
I Delphi: TQuery
Om du ska använda SQL i dina applikationer blir du mycket bekant med TQuery komponent. Delphi gör det möjligt för dina applikationer att använda SQL-syntax direkt genom TQuery-komponent för att få åtkomst till data från Paradox- och dBase-tabeller (med lokal SQL - delmängd av ANSI-standard SQL), databaser på den lokala InterBase-servern och databaser i fjärrdatabasen servrar.
Delphi stöder också heterogena frågor mot mer än en server- eller tabelltyp (till exempel data från en Oracle-tabell och en Paradox-tabell) .TQuery har en egenskap som heter
TQuery kapslar in ett eller flera SQL-uttalanden, kör dem och tillhandahåller metoder för att vi kan manipulera resultaten. Frågor kan delas in i två kategorier: de som producerar resultatuppsättningar (t.ex. VÄLJ uttalande), och de som inte gör det (som en UPPDATERINGeller FÖRA IN påstående). Använd TQuery. Öppen för att utföra en fråga som producerar en resultatset; använd TQuery. ExecSQL för att köra frågor som inte ger resultatuppsättningar.
SQL-satserna kan vara antingen statisk eller dynamisk, det vill säga, de kan ställas in vid designtid eller inkludera parametrar (TQuery. params) som varierar vid körning. Att använda parametriserade frågor är mycket flexibelt eftersom du kan ändra användarens syn på och få tillgång till data i farten vid körning.
Alla körbara SQL-satser måste vara förberedda innan de kan köras. Resultatet av förberedelserna är den körbara eller operativa formen av uttalandet. Metoden för att förbereda ett SQL-uttalande och beständigheten i dess operativa form skiljer statisk SQL från dynamisk SQL. Vid designtid förbereds en fråga automatiskt när du ställer in fråga komponentens aktiva egenskap till True. Vid körtid förbereds en fråga med ett samtal för att förbereda och köras när applikationen anropar komponentens Open eller ExecSQL-metoder.
En TQuery kan returnera två slags resultatuppsättningar: "leva"som med TTable-komponenten (användare kan redigera data med datakontroller, och när ett samtal till Post inträffar skickas ändringar till databasen),"Skrivskyddad"endast för visningsändamål. För att begära en live-resultatuppsättning, ställ in en frågekomponentens RequestLive-egenskap till True och vara medveten om att SQL-sats måste uppfylla vissa specifika krav (inga ORDER BY, SUM, AVG, etc.)
En fråga uppför sig på många sätt mycket som ett tabellfilter, och på vissa sätt är en fråga ännu kraftigare än ett filter eftersom den ger dig åtkomst till:
- mer än en tabell åt gången ("gå med" i SQL)
- en specificerad delmängd av rader och kolumner från dess underliggande tabell (er), istället för att alltid returnera alla
Enkelt exempel
Låt oss nu se några SQL i aktion. Även om vi kunde använda databasformulärguiden för att skapa några SQL-exempel för detta exempel kommer vi att göra det manuellt, steg för steg:
1. Placera en TQuery, TDataSource, TDBGrid, TEdit och en TButton-komponent på huvudformuläret.
2. Ställ in TDataSource-komponentens DataSet-egenskap till Query1.
3. Ställ in TDBGrid-komponentens DataSource-egenskap till DataSource1.
4. Ställ in TQuery-komponentens databasnamn-egenskap till DBDEMOS.
5. Dubbelklicka på SQL-egenskapen för en TQuery för att tilldela SQL-uttalandet till det.
6. Ändra TQuery-komponentens aktiva egenskap till True för att göra rutnätets visning vid designtid.
Rutnätet visar data från medarbetaren.db-tabellen i tre kolumner (Förnamn, Efternamn, Lön) även om Employee.db har 7 fält, och resultatuppsättningen är begränsad till de poster där FirstName börjar med 'R'.
7. Tilldela nu följande kod till OnClick-händelsen på knappen1.
procedur TForm1.Button1Click (avsändare: TObject); Börja Query1.Close;{stäng frågan}// tilldela nytt SQL-uttryck Query1.SQL.Clear; Query1.SQL.Add ('Välj EmpNo, FirstName, LastName'); Fråga1.SQL.Lägg till ('FRA Employee.db'); Fråga1.SQL.Tillfoga ('VAR Lön>' + Edit1.Text); Fråga1.RequestLive: = true; Query1.Open; {öppen fråga + visningsdata}slutet;
8. Kör din ansökan. När du klickar på knappen (så länge Edit 1 har ett giltigt valutavärde i det) kommer rutnätet att visa EmpNo, FirstName och LastName fält för alla poster där lönen är större än den angivna valutan värde.
I det här exemplet skapade vi ett enkelt statiskt SQL-uttalande med live-resultatuppsättning (vi har inte ändrat några visade poster) bara för visning.