SQL lekérdezések Delphi, Delphi - SQL, cikkek, programozás - programozás C, Delphi, C #

1. Bevezetés

Delphi komponensek dolgozó adatbázisok jöttek létre, munkája alapján a SQL és kliens / szerver architektúra. Ha velük dolgozni akkor a funkciók kibővített támogatása a távoli szerverrel. Delphi biztosítja ezt a támogatást két módon. Először is, a közvetlen irányítása Delphi lehetővé teszi a fejlesztők kezelni asztalok, korlátokat, törlése, beszúrása és szerkesztése meglévő bejegyzések. A második lehetőség, hogy az SQL nyelv lekérdezéseket, ahol a query string jut el a szerverhez az elemzés, optimalizálás, végrehajtása és transzfer vissza eredményt.

2. Az alkatrész TQuery

Ha az alkalmazás a használni kívánt SQL, akkor, ha feltétlenül szükséges, hogy megismerjék a komponens TQuery. A komponensek TQuery és TTable örökölt TDataset. TDataset biztosítja a szükséges funkciókat, hogy hozzáférjen a adatbázisokhoz. Mint ilyen, a komponensei TQuery és TTable sok közös vonás. Elkészítéséhez adatokat kijelző vizuális komponenst használunk mindegy TDatasource. Továbbá, hogy melyik szerver és adatbázis szeretné elérni, meg kell adnia az alias nevet. Ezt meg kell tenni a tulajdonságok beállításával aliasname TQuery objektumot.

Mégis TQuery néhány egyedi funkciót. Például TQuery van egy olyan tulajdonsága nevű SQL. SQL tulajdonság tárolására használt SQL lekérdezés. Itt van az alapvető lépéseket a készítmény a kérelem, ahol minden dolgozó fizetése több mint $ 50,000.

Hozzon létre egy objektumot TQuery

Állítsa be a DatabaseName tulajdona alias. (Ez a példa a alias IBLOCAL, társított demonstrációs adatbázis employee.gdb).

Írja: select * from EMPLOYEE ahol SALARY> 50000 Kattintson az OK gombra.

Jelölje ki az objektumot Inspector Active tulajdon és állítsa IGAZ.

Tegyünk egy alakzatobjektum TDatasource.

Telepítse Adatbázis ingatlan TDatasource a Query1 elemet.

Tedd az űrlap TDBGrid.

Állítsa be a Datasource ingatlan Datasource1.
SQL tulajdonság típusú TStrings. TStrings objektum egy listát a húrok, és némileg hasonlít a tömbben. Adat típus TStrings rendelkezik saját arzenál húrok egy parancsot, akkor töltse le egy szöveges fájlt, és adatcsere egy másik tárgy TStrings. Egy másik összetevője, amely TStrings - TMemo. A demonstrációs projekt ENTRSQL.DPR (elméletileg meg kell elhelyezni egyetlen floppy, de a „Tippek a Delphi” nincs mellékelve - VO), a felhasználónak meg kell adnia az SQL-lekérdezés és kattintson a „Do It” gombot ( „make it „). Keresési találatok jelennek meg egy rács. A „Do It” 1. lista mutatja a kód teljesen gomb kezelő.
1. lista

eljárás TForm1.BitBtn1Click (Sender: TObject);
kezdődik

Ennek elégnek kell lennie a felhasználó számára, tudva SQL. Azonban a legtöbb felhasználó nem tudja ezt a nyelvet. Tehát a munkát, mint a fejlesztő, hogy a felület és megteremti az SQL-lekérdezést. A Delphi, tedd dinamikus lekérdezéseket segítségével hozzon létre egy SQL-lekérdezést a repülni. Dinamikus lekérdezések lehetővé teszik a használatát paramétereket. Annak megállapításához, a paraméteres lekérdezés használ egy kettőspont (:), majd a paraméter nevét. Az alábbiakban példák SQL-lekérdezés segítségével dinamikus paraméterek:

select * from EMPLOYEE
ahol DEPT_NO =: Dept_no

Ha meg kell próbálni, vagy az alapértelmezett, válassza az ingatlan Params Query1 elemet objektumot. Kattintson a gombra”. ”. Látnia kell a beállításokban. Válassza Dept_no. Ezután a legördülő listából válassza ki az adatot Integer. Az alapértelmezett érték, írja be a kívánt értéket a mezőben „érték”.
Módosításához az SQL-lekérdezés futási időben, a kívánt paramétereket társítani (bind). Paraméter módosítható, a kérést újra végre, és az adatok frissítése. Ahhoz, hogy közvetlenül módosítsa a paraméter értékét használják Params tulajdonság vagy ParamByName módszer. Params tulajdonság egy tömb TParams. Ezért ahhoz, hogy hozzáférjen a paraméter, meg kell adnia az index. Például,

Query1.params [0] .asInteger: = 900;

asInteger ingatlan szól Integer (a név magáért beszél). Ez nem feltétlenül jelenti azt, de ez a mező az Integer. Például, ha egy olyan területen típusú VARCHAR (10), Delphi elvégzi az adatok átalakítása. Így a példa lehet a fenti lenne írva a következő:

Query1.params [0] .asString: = '900';

Query1.params [0] .asString: = edit1.text;

Ha szeretne helyett index számot használni a paraméter nevét, majd a módszer ParamByName. Ez a módszer visszaadja TParam tárgyat a megadott néven. Például:

Query1.ParamByName ( 'DEPT_NO') .asInteger: = 900;


2. lista mutatja a teljes kód a példa.

eljárás TForm1.BitBtn1Click (Sender: TObject);
kezdődik


Ügyeljen arra, hogy a folyamat, az első dolog, podgotovlivayuschuyu kérelmet. Hívásakor készít módszer, Delphi küld egy SQL lekérdezés egy távoli szerverre. A kiszolgáló feldolgozza és a lekérdezés optimalizálás. Az előnye, hogy a képzés megkeresés előtti elemzés és optimalizálás. Egy alternatíva itt, hogy a készítmény a kéréseket a szerver minden futtatáskor. Miután a kérelmet elő, a szükséges új paraméterek vannak helyettesítve, és a lekérdezés hajtódik végre.

Az előző példában a felhasználó beléphet a kártya számát, majd futtassa a lekérdezést kijelző a munkavállalók jegyzékét ezen az osztályon. Mi a helyzet a használata a OSZTÁLY asztal, amely lehetővé teszi a felhasználó számára, hogy könnyedén navigálhat a felhasználók és osztályok?

Megjegyzés: A következő példa egy TTable nevű Table1. 1. táblázat Az adatbázis neve IBLOCAL, asztal neve - osztály. DataSource2 TDatasource kapcsolódó Table1. A táblázat azt is mutatja, az aktív és a felvételt TDBGrid.

Módszer TQuery kapcsolat TTable - keresztül TDatasource. Két fő módja, hogy erre a célra. Először is helyezze el a kódot az eseménykezelő TDatasource OnDataChange. Például, a 3. lista ezt a technikát.

eljárás TForm1.DataSource2DataChange (Sender: TObject; Field: TField);
kezdődik

Query1.ParamByName ( 'Dept_no') .asInteger: = Table1Dept_No.asInteger;

On e. EDatabaseError do

messageDlg (e üzenet mtError, [mbOK], 0 ..);

Technikával OnDataChange nagyon rugalmas, de vannak egyszerűbb módja annak, hogy csatlakozzon a Query asztalra. TQuery alkotórész hajlamos adatforrás. Meghatározó TDatasource ingatlan adatforrás, TQuery tárgy le a nevét a paraméterek SQL-lekérdezés mezőnevei TDatasource. Abban az esetben, közhasználatban ezeket a paramétereket automatikusan kitöltésre. Ez lehetővé teszi a fejlesztők számára, hogy elkerüljék kódot írni a 3. listában (*** *** fent).

Tény, hogy a használat Datasource technika nem igényel további kódolás. Ha kérni, hogy a kapcsolatot a táblázatban DEPT_NO leírt eljárással a 4. példában.

4. lista - Binding TQuery c TTable keresztül DataSource tulajdonság

Válasszunk Query1 elemet SQL tulajdon és típusa:

select * from EMPLOYEE
ahol DEPT_NO =: dept_no

Válassza Datasource ingatlan és hozzá a társított adatforrás Table1 (Datasource2 példánkban)
Válasszuk az Aktív tulajdon és állítsa True

Ez minden, ha azt akarjuk, hogy hozzon létre egy ilyen típusú viszonyt. Vannak azonban bizonyos korlátozásokat paraméteres lekérdezések. A paramétereket értékekre korlátozott. Például nem tudja használni nevezett paraméter oszlop vagy tábla. Ahhoz, hogy hozzon létre egy lekérdezést, dinamikusan változik a tábla nevét, akkor használja szövegösszefűzés technikával. Egy másik módszer az, hogy használja a Format parancs.

Format parancs kicseréli formázási lehetőségek (% s,.,% N, stb) Átvitt értékeket. Például,

Formátum ( 'select *% s'. [ 'Alkalmazott'])

Az eredmény a fenti parancs „SELECT * FROM alkalmazott”. Funkció szó teszi a változó formázás tömb értékeit. Ha több formázási lehetőségek, a változás balról jobbra. Például,

tblname: = 'alkalmazott';
fldName: = 'EMP_ID';
fldValue: = 3;
Formátum ( 'select *% s ahol% s =.'. [Tblname, fldName, fldValue])


formázási parancs fogja eredményezni 'Select * from EMPLOYEE ahol EMP_ID = 3'. Ez a funkció nagyfokú rugalmasságot biztosít a dinamikus lekérdezési. Az alábbi példa az 5. lista lehetővé teszi az eredmények levezetni a mező fizetést. A felhasználó adja meg a feltételeket a területen fizetést.

5. lista - A Format paranccsal hozzon létre egy SQL lekérdezés

kezdődik
<Создание каркаса запроса>
sqlString: = 'Select EMP_NO% s a dolgozói, ahol SALARY% s';

Ebben a példában a Clear eljárás és hozzáadása tulajdonságai SQL. Mivel a „felkészült” a hozzáférés iránti kérelmet a szerverre, és nincs garancia arra, hogy az új kérelem akkor használja ugyanazt a táblák és oszlopok, Delphi, amikor módosítja az SQL ingatlan, elvégzi az inverz művelet a „készítmény” (unprepare). Ha TQuery nem készült (azaz az elkészített tulajdonság False), Delphi automatikusan készít egy-egy végrehajtás. Ezért ebben az esetben is, ha ez okozta a Prepare módszer alkalmazása, ez nem lesz semmi haszna.

Nyílt vs. ExecSQL

Az előző példákban végre TQuerie Select-kérelmeket. Delphi tartja az eredményeket Select-lekérdezést egy adathalmazt, mint például a táblák. Ez csak az egyik osztálya érvényes SQL-lekérdezéseket. Például frissítése parancs frissíti a tartalmát a rekordot, de nem tér vissza rekordokat, vagy bármilyen érték. Ha azt szeretnénk, hogy egy lekérdezést, amely nem tér vissza egy adathalmazt, ahelyett, hogy a ExecSQL Nyílt. ExecSQL továbbítja a végrehajtási kérelem a szerveren. Általában, ha azt várod, hogy kapsz a lekérdezési adatokat, majd az Open. Ellenkező esetben használja ExecSQL engedélyezettek, noha alkalmazása Select nem lesz építő. 6. kódrészlet a kódot, hogy ismertesse a fenti példa.

eljárás TForm1.BitBtnClick (feladó: TObject)
kezdődik
Query1.Close;
Query1.Clear;
Query1.SQL.Add (Frissítve fizetést munkavállaló +
„Amennyiben SALARY<:salary values (SALARY*(1+:raise)' );
Query1.paramByName ( 'fizetés') .asString: = edit1.text;
Query1.paramByName ( 'emelni') .asString: = edit2.text;
megpróbál
Query1.ExecSQL;
kivéve
az e: EDatabaseError do
messageDlg (e üzenet mtError, [mbOK], 0 ..);
végén;
végén;

Az összes fenti példák feltételezik az alkalmazás kérést. Úgy adhat egy szilárd alapot, hogy elkezdje használni az alkalmazásait TQuery. De lehetetlen megjósolni a végén a használata az SQL az alkalmazások. Tipikus szerverek is kínál egyéb funkciók, mint például a tárolt eljárások és műveletek. A következő két fejezetben röviden áttekintjük ezeket a forrásokat.

3. Alkatrészek TStoredProc

A tárolt eljárás a parancsok listáját (SQL vagy adott szerveren), tárolható és végrehajtható a szerver oldalon. A tárolt eljárások nem rendelkeznek a fogalmi különbségek más típusú eljárások. TStoredProc örököl TDataset, így részvények több jellemzők TTable és TQuery. Különösen figyelemre méltó hasonlóságot TQuery. Mivel a tárolt eljárások nem igénylik a visszatérést az értékeket, ugyanazok a szabályok vonatkoznak ExecProc módszerek és nyílt. Minden szerver hajtja végre a műveletet, a tárolt eljárások csekély különbségeket. Például, ha a szerver használ Interbase, tárolt eljárások végre Select-lekérdezések. Például, hogy nézd meg az eredményeket a tárolt eljárás, ORG_CHART, a demo alapján alkalmazotti adatbázist használja a következő SQL-lekérdezés:

Select * from ORG_CHART

Amikor dolgozik más szerverek, például, Sybase, akkor TStoredProc komponenst. Ez az összetevő a következő tulajdonságokkal rendelkezik egy adatbázis nevét és tárolt eljárás. Ha az eljárás megköveteli a bemeneti bizonyos paramétereket, használja a Params tulajdonságát a bemenet.
4. TDatabase

TDatabase komponens funkciókat biztosít, ami hiányzik TQuery és TStoredProc. Különösen TDatabase lehetővé teszi, hogy hozzon létre egy helyi BDE alias, hogy az alkalmazás nem igényel álnevek tartalmazott a konfigurációs fájlban BDE. Ezek a helyi álnevek az alkalmazás kihasználhatja az összes TTable, TQuery és TStoredProc. TDatabase is lehetővé teszi a fejlesztő, hogy konfigurálja a csatlakozási folyamat visszaszorításával párbeszéd a felhasználói nevet és jelszót, és töltse ki a szükséges paramétereket. És végül, ami a legfontosabb, TDatabase nyújthat egy adatbázis-kapcsolat összefoglalja az összes adatbázis-műveleteket egyetlen komponens. Ez lehetővé teszi, hogy az ellenőrzések a munka az adatbázis, hogy képes legyen tranzakció kezelésére.

Tranzakciós lehet tekinteni, mint az információk átadását a csomagot. A klasszikus példa a tranzakció a pénzátutalás a bankszámlán. A tranzakció kell állnia működését fizetését az új számla és eltávolítását azonos összeget a folyószámla. Ha ezek közül a lépések valamilyen okból nem került végrehajtásra, a tranzakció is tekinthető kiemelkedő. Abban az esetben, az ilyen hiba, SQL Server lehetővé teszi, hogy végezzen egy rollback parancs (rollback), anélkül, hogy bármilyen változás az adatbázisba. Tranzakció kezelés függ TDatabase komponenst. Mivel a tranzakció általában áll több megkeresés, akkor be kell jelölni az elején egy tranzakciót és annak végén. Ahhoz, hogy kiemelje a kezdete a tranzakciót TDatabase.BeginTransaction. Miután a tranzakciós végrehajtásra kerül, az összes végrehajtott parancsok a hívás előtt vagy TDatabase.Commit TDatabase.Rollback átalakítható ideiglenes mód. Amikor felhívja a Commit minden megváltozott adatokat küld a kiszolgálónak. Amikor felhívja a visszagörgetéssel összes változás lejár. Az alábbiakban a lista 7. példát, amely egy asztal nevű BESZÁMOLÓ. Megmutatja, hogy megpróbálja átadni az összeget egy másik számlára.

eljárás TForm1.BitBtn1Click (Sender: TObject);
<ПРИМЕЧАНИЕ: Поле BALANCE у ACCOUNTS имеет триггер, проверяющий
olyan helyzetben, amikor a levonható összeg meghaladja az egyensúly. Ha igen, UPDATE
törlésre kerül>
kezdődik
megpróbál
database1.StartTransaction;
query1.SQL.Clear;
<Вычитаем сумму из выбранного счета>
query1.SQL.Add (formátum ( 'frissítés számlák' +
'Set egyenleg = Balance -% s)' +
'Amennyiben ACCT_NUM =% s'.
[Edit1.text,
Table1Acct_Num.asString]));
query1.ExecSQL;
query1.SQL.Clear;
<Добавляем сумму к выбранному счету>
query1.SQL.Add (formátum ( 'frissítés számlák' +
'Set egyenleg = egyenleg +% s' +
'Amennyiben ACCT_NUM =% s'.
[Edit1.text,
Table2Acct_Num.asString]));
query1.ExecSQL;
database1.Commit;
table1.Refresh;
table2.Refresh;
kivéve
visszaállítja a tranzakció vissza>
Egy: EDatabaseError do
kezdődik
messageDlg (e üzenet mtError, [mbOK], 0 ..);
database1.rollback;
exit;
végén;
Egy: Kivétel do
kezdődik

Kapcsolódó cikkek