PASzSz
Kilencedik témakör: Lazarus-Firebird
Készítette: Dr. Kotsis Domokos
Az SQLdb fülön
IBConnection
Kapcsolat Az SQLdb fülön
A Data Access fülön
...
Select 1. 2. 3. 4.
Az Az Az Az
SQLQuery lezárása. (Active := false, Close) SQLQuery SQL tulajdonságánal törlése. (Clear) SQLQuery SQL tulajdonságánal feltöltése. (Editor, Add(‘…’)) SQLQuery SQL megnyitása. (Active := true, Open)
...
SQL parancs azSQLQuery-ben
Data Controls I.: TDBGrid Egy lekérdezésnél az SQLQuery megnyitása után (Active True) tervezési időben is látható az eredmény.
Lekérdezés futás közben
SQLQuery1.Close; SQLQuery1.SQL.Clear; SQLQuery1.SQL.add(ide jön az SQL utasítás string-ként); SQLQuery1.Open; … Edit1.Text:= SQLQuery1.fieldbyname('szerzo').asstring;
Lekérdezés futás közben
Készítsünk lekérdezést a egy bizonyos ár alatti könyvekről. Készítsünk lekérdezést a egy bizonyos szerző könyveiről.
Lekérdezés futás közben
SQLQuery1.Close; SQLQuery1.SQL.Clear; SQLQuery1.SQL.add('Select szerzo From konyvek Where ar > 1500'); SQLQuery1.Open; SQLQuery1.Close; SQLQuery1.SQL.Clear; SQLQuery1.SQL.add('select cim from konyvek where szerzo =''Arany János'''); SQLQuery1.Open;
Aggregát függvények SQLQuery1.Close; SQLQuery1.SQL.Clear; SQLQuery1.SQL.add('Select count(*) from konyvek '); SQLQuery1.Open; Edit1.Text := IntToStr(SQLQuery1.FieldByName('COUNT').asinteger);
Mezőnév az aggregát függvény neve
Feladat Egy Edit ablakban jelenjen meg az átlagosnál drágább könyvek száma.
Többszörös select SQLQuery1.Close; SQLQuery1.SQL.Clear; SQLQuery1.SQL.add('Select count(*) from konyvek '); SQLQuery1.SQL.add('where ar > (select avg(ar) from konyvek) '); SQLQuery1.Open; Edit1.Text := IntToStr(SQLQuery1.FieldByName('COUNT').asinteger);
TDBGRID II. TDBGrid (táblázat megjelenítésére). Jobb egérgomb:
Data Controls II. TDBNavigator (léptet az eredmény táblán belül) Datasource (kitöltendő) VisibleButtons (milyen gombok legyenek rajta) TDBText (mint a label) Datasource (kitöltendő) TDBEdit (mint az edit) Datasource (kitöltendő)
Paraméterek használata
A Where klauzulában használhatók, :-vel kell kezdődjenek. A megnyitás előtt értéket kell adni a params[i] tömb megfelelő számú elemének. A paraméter neve közömbös, a sorrend számít 0-tól kezdve.
Feladat
Egy Edit ablakban jelenítse meg, egy másik Edit ablakban megadott című könyv szerzőjét.
Paraméterek használata
SQLQuery1.Close; SQLQuery1.SQL.Clear; SQLQuery1.SQL.add('Select szerzo from Konyvek where cim = :p0'); SQLQuery1.Params[0].AsString := Edit1.Text; SQLQuery1.Open; Edit2.Text:= SQLQuery1.FieldByName('szerzo').asstring;
Feladat
Egy Edit megadjuk egy név kezdetét. Egy Dbgridben jelenítse meg az ezekkel a karakterekkel kezdődő nevű szerzőket.
Keresés szó elejére
SQLQuery1.Close; SQLQuery1.SQL.Clear; SQLQuery1.SQL.add('Select * from konyvek where szerzo LIKE :p0'); SQLQuery1.SQL.add(' order by szerzo'); SQLQuery1.Params[0].AsString := Edit2.Text+'%'; SQLQuery1.Open;
DML
1. 2. 3. 4.
Az SQLQuery lezárása. (Active := false, Close) Az SQLQuery SQL tulajdonságánal törlése. (Clear) Az SQLQuery SQL tulajdonságánal feltöltése. (Add(‘…’)) Az parancs végrehajtása. (ExecSQL)
Feladat
Vigyen fel egy új rekordot a ‘konyvek’ táblába: Madách Imre : Az ember tragédiája, ára 3500 Ft. Ellenőrizze, hogy a felvitel sikeres volt-e!
Felvitel SQLQuery1.Close; SQLQuery1.SQL.Clear; SQLQuery1.SQL.add('Insert Into KONYVEK'); SQLQuery1.SQL.add('(szerzo, cim, ar)'); SQLQuery1.SQL.add(' values ( :pszerzo, :pcim, :par)'); SQLQuery1.Params[0].AsString := 'Madách Imre'; SQLQuery1.Params[1].AsString := 'Az ember tragédiája'; SQLQuery1.Params[2].AsInteger := 3500; Try If (MessageDlg('Felvigyem?',mtConfirmation,[mBOK,mBNo],0) = mrOK)) then Begin SQLQuery1.ExecSQL; SQLTransaction1.Commit; MessageDlg('A felvitel kész',mtInformation,[mBOK],0); end else Begin MessageDlg('A felvitel megszakítva',mtError,[mBOK],0); end; except SQLTransaction1.RollBack; MessageDlg('A felvitel sikertelen',mtError,[mBOK],0); End;
Feladat
Módosítsa Madách Imre művének címét Mózes-re. Ellenőrizze, hogy a módosítás sikeres volt-e!
Módosítás SQLQuery1.Close; SQLQuery1.SQL.Clear; SQLQuery1.SQL.add('update konyvek set '); SQLQuery1.SQL.add('cim =:pcim '); SQLQuery1.SQL.add('where szerzo = :psz'); SQLQuery1.Params[0].AsString := 'Mózes'; SQLQuery1.Params[1].AsString := 'Madách Imre'; Try If (MessageDlg('Módosítsak?',mtConfirmation,[mBOK,mBNo],0) = mrOK) then Begin SQLQuery1.ExecSQL; SQLTransaction1.Commit; MessageDlg('A módosítás kész',mtInformation,[mBOK],0); end else Begin MessageDlg('A módosítás megszakítva',mtError,[mBOK],0); end; except SQLTransaction1.RollBack; MessageDlg('A módósítás sikertelen',mtError,[mBOK],0); End;
Feladat
Törölje Madách Imre műveit. Ellenőrizze, hogy a törlés sikeres volt-e!
Törlés SQLQuery1.Close; SQLQuery1.SQL.Clear; SQLQuery1.SQL.add('delete from konyvek '); SQLQuery1.SQL.add('where szerzo = :psz'); SQLQuery1.Params[0].AsString := 'Madách Imre'; Try If (MessageDlg('Töröljem?',mtConfirmation,[mBOK,mBNo],0) = mrOK) then Begin SQLQuery1.ExecSQL; SQLTransaction1.Commit; MessageDlg('A törlés kész',mtInformation,[mBOK],0); end else Begin MessageDlg('A törlés megszakítva',mtError,[mBOK],0); end; except SQLTransaction1.RollBack; MessageDlg('A törlés sikertelen',mtError,[mBOK],0); End;
DDL
1. 2. 3. 4.
Az SQLQuery lezárása. (Active := false, Close) Az SQLQuery SQL tulajdonságánal törlése. (Clear) Az SQLQuery SQL tulajdonságánal feltöltése. (Add(‘…’)) Az parancs végrehajtása. (ExecSQL)
Feladat Készítsen gombnyomásra egy új táblát, melynek neve table2, mezői egyes és kettes, integer, 20 karakteres varchar típussal. Ellenőrizze, hogy sikeres volt-e!
Új tábla SQLQuery1.Close; SQLQuery1.SQL.Clear; SQLQuery1.SQL.add('CREATE TABLE TABLE2 '); SQLQuery1.SQL.add(' (EGYES SMALLINT, KETTES VARCHAR(20))'); Try If (MessageDlg('Csináljam?',mtConfirmation,[mBOK,mBNo],0) = mrOK) then Begin SQLQuery1.ExecSQL; SQLTransaction1.Commit; MessageDlg('Kész',mtInformation,[mBOK],0); end else Begin MessageDlg('Megszakítva',mtError,[mBOK],0); end; except SQLTransaction1.RollBack; MessageDlg('Sikertelen',mtError,[mBOK],0); End;
DCL
1. 2. 3. 4.
Az SQLQuery lezárása. (Active := false, Close) Az SQLQuery SQL tulajdonságánal törlése. (Clear) Az SQLQuery SQL tulajdonságánal feltöltése. (Add(‘…’)) Az parancs végrehajtása. (ExecSQL)
Feladat Adjon lekérdezési jogot a könyvek táblához a Pisti nevű felhasználónak. (A felhasználót vigye fel a utility programmal!)
Grant
SQLQuery1.SQL.add('grant select on table konyvek to Pisti ');
Grant eredménye
Tárolt eljárás
SQLQuery1.Close; SQLQuery1.SQL.Clear; SQLQuery1.SQL.add('create procedure proproc (a integer) returns( res integer)'); SQLQuery1.SQL.add(' as begin'); SQLQuery1.SQL.add('if (a = 0) then res = 1; else res = 0;'); SQLQuery1.SQL.add('suspend;'); SQLQuery1.SQL.add('end'); Try SQLQuery1.ExecSQL SQLTransaction1.Commit; except SQLTransaction1.RollBack; End;
Tárolt eljárás hívása
SQLQuery1.Close; SQLQuery1.SQL.Clear; SQLQuery1.SQL.add('select res from proproc(0) '); SQLQuery1.Open; Edit1.Text := IntToStr(SQLQuery1.fieldbyname('res').asinteger);