SQL (Structured Query Language) is een gestandaardiseerde taal voor het definiëren en manipuleren van gegevens in een relationele database. In overeenstemming met het relationele gegevensmodel wordt de database gezien als een set tabellen, relaties worden dat wel weergegeven door waarden in tabellen en gegevens worden opgehaald door een resultatentabel op te geven die kan worden afgeleid van een of meer basistafels. Query's hebben de vorm van een commandotaal waarmee u kunt werken selecteren, invoegen, bijwerken, zoeken de locatie van gegevens, enzovoort.
In Delphi: TQuery
Als u SQL gaat gebruiken in uw applicaties, zult u zeer vertrouwd raken met de TQuery component. Met Delphi kunnen uw toepassingen de SQL-syntaxis rechtstreeks via de TQuery-component gebruiken om toegang te krijgen tot gegevens uit Paradox- en dBase-tabellen (met lokale SQL - subset van ANSI-standaard SQL), databases op de lokale InterBase-server en databases op externe database servers.
Delphi ondersteunt ook heterogene query's op meer dan één server- of tabeltype (bijvoorbeeld gegevens van een Oracle-tabel en een Paradox-tabel) .TQuery heeft een eigenschap genaamd
TQuery kapselt een of meer SQL-instructies in, voert ze uit en biedt methoden waarmee we de resultaten kunnen manipuleren. Query's kunnen worden onderverdeeld in twee categorieën: die welke resultatensets opleveren (zoals een SELECTEER verklaring), en degenen die dat niet doen (zoals een BIJWERKENof INSERT uitspraak). Gebruik TQuery. Openen om een query uit te voeren die een resultatenset oplevert; gebruik TQuery. ExecSQL om queries uit te voeren die geen resultatensets opleveren.
De SQL-instructies kunnen beide zijn statisch of dynamischdat wil zeggen dat ze kunnen worden ingesteld tijdens het ontwerpen of parameters kunnen bevatten (TQuery. Params) die variëren tijdens uitvoering. Het gebruik van geparametriseerde query's is zeer flexibel omdat u de weergave en toegang tot gegevens van een gebruiker tijdens runtime kunt wijzigen.
Alle uitvoerbare SQL-instructies moeten worden voorbereid voordat ze kunnen worden uitgevoerd. Het resultaat van de voorbereiding is de uitvoerbare of operationele vorm van de verklaring. De methode voor het voorbereiden van een SQL-instructie en de persistentie van de operationele vorm onderscheiden statische SQL van dynamische SQL. Tijdens het ontwerpen wordt een query automatisch voorbereid en uitgevoerd wanneer u de instelt vraag Actieve eigenschap van component naar Waar. Tijdens runtime wordt een query voorbereid met een aanroep voor Voorbereiden en uitgevoerd wanneer de toepassing de Open- of ExecSQL-methoden van de component aanroept.
Een TQuery kan twee soorten resultaatsets retourneren: "leven"net als bij TTable-component (gebruikers kunnen gegevens bewerken met gegevenscontroles en wanneer er een oproep naar Post plaatsvindt, worden wijzigingen naar de database verzonden)"alleen lezen"alleen voor weergavedoeleinden. Om een live resultaatset aan te vragen, stelt u de eigenschap RequestLive van een querycomponent in op True en moet u er rekening mee houden dat de SQL-instructie aan een aantal specifieke vereisten moet voldoen (geen ORDER BY, SUM, AVG, enz.)
Een query gedraagt zich op veel manieren net als een tabelfilter, en in sommige opzichten is een query zelfs krachtiger dan een filter, omdat u hiermee toegang krijgt tot:
- meer dan één tafel tegelijk ("join" in SQL)
- een gespecificeerde subset van rijen en kolommen uit de onderliggende tabel (len), in plaats van ze altijd allemaal te retourneren
Eenvoudig voorbeeld
Laten we nu eens wat SQL in actie zien. Hoewel we de Database Form Wizard kunnen gebruiken om enkele SQL-voorbeelden voor dit voorbeeld te maken, zullen we het handmatig stap voor stap doen:
1. Plaats een TQuery-, TDataSource-, TDBGrid-, TEdit- en een TButton-component op het hoofdformulier.
2. Stel de DataSet-eigenschap van de TDataSource-component in op Query1.
3. Stel de DataSource-eigenschap van de TDBGrid-component in op DataSource1.
4. Stel de eigenschap DatabaseName van TQuery-component in op DBDEMOS.
5. Dubbelklik op de SQL-eigenschap van een TQuery om de SQL-instructie eraan toe te wijzen.
6. Om ervoor te zorgen dat het raster gegevens weergeeft tijdens het ontwerp, wijzigt u de actieve eigenschap van de TQuery-component in True.
Het raster geeft gegevens weer uit de tabel Employee.db in drie kolommen (Voornaam, Achternaam, Salaris), zelfs als Employee.db heeft 7 velden en de resultatenset is beperkt tot die records waar de FirstName begint met 'R'.
7. Wijs nu de volgende code toe aan de OnClick-gebeurtenis van de Button1.
procedure TForm1.Button1Click (Afzender: TObject); beginnen Query1.Sluiten;{sluit de zoekopdracht}// wijs een nieuwe SQL-expressie toe Query1.SQL.Clear; Query1.SQL.Add ('Selecteer EmpNo, FirstName, LastName'); Query1.SQL.Add ('FROM Employee.db'); Query1.SQL.Add ('WHERE Salary>' + Edit1.Text); Query1.RequestLive: = waar; Query1.Open; {open query + weergavegegevens}einde;
8. Voer uw applicatie uit. Wanneer u op de knop klikt (zolang bewerken 1 een geldige valutawaarde bevat), zal het raster de De velden EmpNo, FirstName en LastName voor alle records waarin het salaris groter is dan de opgegeven valuta waarde.
In dit voorbeeld hebben we een eenvoudige statische SQL-instructie gemaakt met live resultaatset (we hebben geen van de weergegeven records gewijzigd) alleen voor weergavedoeleinden.