SQL lekérdezések Delphi

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.

1. Bevezetés

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.

  1. 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 lemezen, de az „ötletek Delphi” nincs mellékelve - VO), a felhasználónak meg kell adnia az SQL-lekérdezés és kattintson a „Do It” ( „make it „). Keresési találatok jelennek meg egy rács. A „Do It” 1. lista mutatja a kód teljesen gomb kezelő.

    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 egy példa az SQL-lekérdezés segítségével dinamikus paraméterek:

    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,

    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ő:

    Ügyeljen arra, hogy a folyamat első lépése előkészíti a kérést. 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.

    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. Ahhoz, hogy egy kapcsolódási kérést a táblázat 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:

    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,

    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,

    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

    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.

    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:

    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.

    És az utolsó dolog, hogy fontolja meg, amikor az adatbázishoz csatlakozáshoz. A fenti példában, TDatabase használható, mint egy kommunikációs csatorna az adatbázisban, így csak úgy volt lehetséges, hogy végre egy tranzakciót. Hogy ezt, hogy meghatározzuk az alias nevét (aliasname). Alias ​​tartja a vonatkozó információkat a kapcsolat, mint például a Driver Type (meghajtó típusától függően), a kiszolgáló nevét (kiszolgáló név), felhasználói név (felhasználói név) és a többi. Ezt az információt a kapcsolat létrehozásához vonal (connect string). Alias ​​létrehozása, akkor a konfigurációs segédprogram BDE, vagy, amint azt az alábbi példában, töltse ki a paraméterek futás közben.

    Params TDatabase van egy olyan tulajdonsága, amely tárolja kapcsolatos információkért. Minden sor egy külön Params paramétert. A következő példában a felhasználó beállítja a paramétert a felhasználó neve szerkesztőmezőbe Edit1, és a jelszó paraméter Edit2 területen. A kód lista 8. ábra a folyamat az adatbázishoz kapcsolódás:

    Ez a példa azt mutatja, hogyan lehet csatlakoztatni a szerverhez létrehozása nélkül alias. A kulcs itt az, hogy azonosítsa és töltse DriverName Params szükséges információkat a kapcsolatot. Nem kell meghatározni az összes paramétert meg kell adni, csak azokat, amelyek székhelye nem a BDE konfiguráció határozza meg az adatbázis-meghajtót. Lépett az ingatlan Params adatok lefedik az összes szerelési BDE konfigurációt. A felvétel paramétereit, Delphi kitölti a megmaradt értékeket a paraméterek a BDE Config driver. A fenti példa azt is bemutatja fogalmak, mint a munkamenet és GetTableNames módszerrel. Ez túlmutat a téma, elég csak megemlítjük, hogy a munkamenet változót egy leíró adatbázis motor. A példában azt hozzáadjuk csak a „kirakatrendezés”.

    Egy másik téma a használata SQLPASSTHRU MODE. Ez az adatbázis a paraméter felelős, ahogy a natív parancs az adatbázis, mint a TTable.Append vagy TTable.Insert kölcsönhatásban vannak TQuery, csatlakozik ugyanahhoz az adatbázishoz. Három lehetséges értékek: nincs megosztva, közös NOAUTOCOMMIT és közös AUTOCOMMIT. Nincs megosztva azt jelenti, hogy a natív parancs használatához egyetlen kapcsolatot a szerver, míg kérések - több. A szerver oldalon is látható, mint a munka két különböző felhasználók számára. Egy adott időben, míg a tranzakció aktív, a natív parancs nem hajtható végre (lekötött) addig az időpontig, amíg a tranzakció befejeződött. Ha tett TQuery, akkor bármilyen változás benyújtott az adatbázisba, külön futnak a tranzakciót.

    A másik két, közös NOAUTOCOMMIT és közös AUTOCOMMIT, hogy az őshonos parancsokat és lekérdezéseket egy közös kapcsolatot a szerverrel. A különbség a két mód között kerülnek végrehajtásra át a natív parancsot a szerver. Ha a kiválasztott mód KÖZÖS AUTOCOMMIT értelmetlen, hogy hozzon létre egy tranzakciót, amely natív parancs törli a bejegyzést és az azt követő kísérlet végrehajtására rollback (Visszagörgetés). A bejegyzést törölni kell, és meg kell változtatni (lekötött) visszagörgetéssel parancs hívni. Ha át kell natív parancs egy ügyletet, vagy arra, hogy ezek a parancsok a tranzakció maga ellenőrizze, hogy SQLPASSTHRU MODE megosztott NOAUTOCOMMIT vagy nem megosztott.

    Delphi támogatja a különböző funkciók segítségével az SQL nyelv az adatbázis szerver. Ezen a figyelmét, hadd búcsúzni és szeretném, ha gyakran használja az SQL az alkalmazások.

    Kapcsolódó cikkek