
A mellékelt példaprogram futtatása előtt az Oracle szerver SQLPlus WorkSheet programjával futtassa le a data.sql állományban található SQL szkriptet.
A data.sql állományban található szkript lefuttatása után létrejön a DEMO.CITY adattábla a következő mezőkkel:
| Mező |
Jelentése |
| TAZON |
Rekordazonosító. |
| IRSZ |
Irányítószám. |
| MEGYE |
Megye. |
| TELEPULES |
Település. |
Az adatokhoz egy ADOQuery komponens segítségével csatlakozunk. Kezdésként a következő SQL parancsot használjuk.
Query.SQL.Add('SELECT * FROM demo.city WHERE LOWER(megye)=' + #39+LowerCase(cbCounty.Text)+#39);
Query.SQL.Add(' ORDER BY telepules');
A cbCounty ComboBox segítségével biztosítjuk a szűrés lehetőségét.
A használható parancsgombok állapotát a Query adatforrás tartalmának megfelelően módosítjuk.
if Query.RecordCount>0 then begin
bModify.Enabled:=True;
bDelete.Enabled:=True;
RefreshFields;
end {if}
else begin
bModify.Enabled:=False;
bDelete.Enabled:=False;
end; {else}
A használható gombok beállítását el kell végeznünk a Form létrehozásánál, új rekord felvitelénél, és rekord törlésénél.
Új adat felvitelénél és egy rekord módosításánál az adatokat ugyanazzal az OK gombbal rögzíthetjük. Azért, hogy a módosítást meg tudjuk különböztetni az új adat felvitelétől, egy logikai változóra van szükségünk (FModify), melynek értékét akkor állítjuk igazra, ha módosítást végzünk.
Alapértelmezett esetben le kell tiltanunk azokat az adatmegjelenítő mezőket, amelyeket felvitelre és módosításra használunk. Edit mezők esetében használhatjuk a ReadOnly property-t, ListBox-ok, ComboBox-ok és Button-ok esetében pedig az Enabled property-t.
A DBGrid komponensben letiltjuk a szerkesztést és a CTRL + DEL billentyűkombinációk használatát.
Amikor a felhasználó a Grid-ben kiválaszt egy rekordot, az alatta elhelyezkedő mezőkben meg kell jelenítenünk a mezők tartalmát. A RefreshFields metódust használjuk arra, hogy az adatmezők tartalmát megjelenítsük.
A mezőket csak módosítás vagy új adat felvitele esetén tesszük aktívvá.
Adatrögzítés előtt ellenőriznünk kell a mezők kitöltését. Ha egy adat hiányzik, hibaüzenetet adunk, majd a fókuszt a megfelelő kontrolra irányítjuk.
if Trim(eCity.Text)='' then begin
ShowMessage('Nincs megadva település!');
eCity.SetFocus;
Exit;
end;
A rekordazonosítónak egyedinek kell lennie. A következő lehetséges rekordazonosító meghatározásához használhatjuk a következő algoritmust.
Query2.SQL.Add('SELECT MAX(tazon) FROM demo.city');
Query2.Open;
try
if (Query2.RecordCount>0) and (Query2.Fields[0].AsString<>'') then
Kod:=Query2.Fields[0].Value+1
else
Kod:=1;
except
Kod:=1;
end;
Ha több ember visz fel adatokat a hálózatban egyszerre, előfordulhat, hogy kulcsütközés jön létre. A következő lehetséges kulcs meghatározását célszerű egy repeat – until szerkezetbe, és egy try – except blokkba tenni. Ezáltal a program újra meg újra megpróbálja felvinni az adott rekordot.
Új adatfelvitelt az Append, adatmódosítást az Edit paranccsal kezdeményezünk.
Query.Append;
Query.FieldByName('TAZON').Value:=Kod;
A Grid-ben látható rendezettséget az „ORDER BY” SQL paranccsal befolyásolhatjuk.
Ha azt akarjuk, hogy az újonnan felvitt adat az aktuális rendezettségnek megfelelő helyen jelenjen meg, az alábbi kód szükséges.
Query.DisableControls;
s:=Query.FieldByName('TAZON').AsString;
Query.Close;
Query.Open;
Query.Locate('TAZON',s,[]);
Query.EnableControls;
RefreshFields;