602SQL-┌plnß dokumentace Index   Tisk  

ProgramovΘ ovlßdßnφ obsahu formulß°e

Pokud formulß° obsahuje vφce ne₧ jeden zßznam, pak se p°i pou₧itφ metod a vlastnostφ slo₧ek v₧dy pracuje se slo₧kami ve vybranΘm zßznamu. P°ed manipulacφ se slo₧kou je proto t°eba interaktivn∞ vybrat zßznam nebo p°i°azenφm do vlastnosti Curpos.

Nov² zßznam lze vlo₧it metodou Insert, b∞₧n² zßznam zruÜit metodou DelRec. ZruÜit vÜechny zßznamy (s potvrzovacφm dotazem) umo₧≥uje metoda DelAsk.

V²b∞r zßznamu a slo₧ky ve formulß°i

Vlastnost Curpos obsahuje internφ Φφslo vybranΘho zßznamu ve formulß°i, vlastnost Curextrec externφ Φφslo vybranΘho zßznamu. Ob∞ Φφsla se dajφ p°eΦφst takΘ funkcφ Get_view_pos a nastavit funkcemi Set_int_pos a Set_ext_pos. Uvnit° formulß°e lze na absolutnφ Φφslo b∞₧nΘho zßznamu odkazovat symbolem @ na internφ Φφslo symbolem @@

V obecnΘm formulß°i vlastnost CurItem obsahuje Φφslo vybranΘ slo₧ky a umo₧≥uje tedy vybrat slo₧ku na zßklad∞ Φφsla. ╚φslo vybranΘ slo₧ky vracφ takΘ funkce Current_item. Vybrat slo₧ku lze takΘ pomocφ metody slo₧ky SetFocus.

Pohyb po zßznamech ve formulß°i umo₧≥ujφ metody FirstRec, LastRec, PrevRec, NextRect, PrevPage a NextPage. K pohybu po slo₧kßch v rßmci b∞₧nΘho zßznamu slou₧φ metody FirstItem, LastItem, PrevTab a NextTab. Na nejbli₧Üφ vyÜÜφ resp. ni₧Üφ slo₧ku se lze dostat metodami UpItem a DownItem.

Ka₧dß slo₧ka obecnΘho formulß°e (krom∞ Φßry a rßmu) je z hlediska Windows oknem a mß sv∙j handle. Handle slo₧ky v aktußlnφm zßznamu lze zjistit pomocφ metody slo₧ky Handle.

P°episovßnφ obsahu a ovlßdßnφ slo₧ek

P°episovßnφ obsahu slo₧ek formulß°e je zp∙sobem, jak m∙₧e program paraleln∞ ovlivnit obsah databßze i obsah formulß°e. Zapisovat hodnoty do databßze lze takΘ p°φmo, bez ·Φasti formulß°e. P°epis hodnot slo₧ek se vyu₧φvß zejmΘna tehdy, pokud je t°eba ve formulß°i p°ednastavit n∞kterΘ hodnoty nebo pokud se n∞kterΘ hodnoty majφ zkontrolovat a dopoΦφst na zßklad∞ jin²ch u₧ivatelem zadan²ch hodnot.

Metody a vlastnosti slo₧ek

JednotlivΘ slo₧ky formulß°e jsou oznaΦeny jmΘnem uveden²m v nßvrhu formulß°e. Slo₧ky majφ svΘ metody a vlastnosti, z nich₧ n∞kterΘ jsou spoleΦnΘ zatφmco jinΘ jsou specifickΘ po konkrΘtnφ druh slo₧ky (t°eba combo). P°i dokazovßnφ na vlastnosti a metody slo₧ky uvedete identifikßtor formulß°e, teΦku, jmΘno slo₧ky, teΦku a jmΘno vlastnosti Φi metody.

Obsah slo₧ek lze p°episovat pomocφ jejich vlastnostφ Text a Value. Ob∞ vlastnosti se vztahujφ ke stejn²m dat∙m, ale jsou rozdφlnΘho typu. Zatφmco Text obsahuje textov² zßpis hodnoty tak, jak se objevuje na obrazovce, Value je hodnota stejnΘho typu, jako ve zdroji dat. V p°eklßdanΘm combu obsahuje vlastnost Text text napsan² na obrazovce, zatφmco vlastnost Value obsahuje hodnotu zapisovanou do databßze. Nßpisy a tlaΦφtka majφ vlastnost Text, ale nikoli Value.

P°φklad:

Nech¥ ve formulß°ovΘm objektu evid_list_form je tlaΦφtko jmΘnem STORNO a dv∞ editaΦnφ pole typu datum se jmΘny ZAH┴JEN═ a UKON╚EN═. Pak p°φkazy:

evid_list_form.UKON╚EN═.Value:=evid_list_form.ZAH┴JEN═.Value+20;
evid_list_form.STORNO.Text := 'Konec';

nastavφ datum UKON╚EN═ na 20 dn∙ po datu ZAH┴JEN═ a zm∞nφ nßpis na tlaΦφtku STORNO na ôKonecö. JmΘno vlastnosti Value (a teΦku p°ed nim) lze vypustit a psßt:

evid_list_form.UKON╚EN═ := evid_list_form.ZAH┴JEN═ + 20;

Metoda IsNull zjiÜ¥uje, zda ve slo₧ce je hodnota NULL, metoda SetNull zapisuje NULL do slo₧ky. Hodnot∞ NULL odpovφdß prßzdn² °et∞zec ve vlastnosti Text.

Pro Φtenφ nebo p°epis hodnoty lze takΘ vyu₧φt funkcφ Set_item_value a Get_item_value spolupracujφcφch s prom∞nnou typu Untyped. P°eΦφst nebo p°epsat text ve slo₧ce obecnΘho formulß°e lze takΘ pomocφ zastaral²ch funkcφ Get_view_item resp. Set_view_item, takto provedenß zm∞na se vÜak nezapisuje do databßze a proto mß velmi omezenΘ pou₧itφ.

Zp∙sob zobrazenφ slo₧ek lze °φdit pomocφ vlastnostφ Format a Precision.

Specifika slo₧ek

Stav oznaΦovacφch Φtverc∙ a p°epφnaΦ∙ se °φdφ vlastnostφ Checked. V editaΦnφm poli, editovatelnΘm combu a ve formßtovanΘm textu lze pozici kurzoru nebo zv²razn∞n² ·sek textu nastavit metodou Selection. Pro prßci se slo₧kou Podpis se pou₧φvajφ metody Signature_check, Signature_sign a Signature_state. Ve slo₧ce Seznam (ListBox) lze zjistit nebo nastavit vybran² °ßdek pomocφ vlastnosti SelIndex. Nabφdku ve slo₧ce Combo lze aktualizovat metodou ResetCombo. Ve slo₧ce Zßlo₧ky lze nastavit nebo zjistit Φφslo vybranΘ strßnky pomocφ vlastnosti Page. Nad slo₧kou obsahujφcφ datum lze otev°φt m∞sφΦnφ kalendß° pomocφ metody Calendar.

Hodnoty prom∞nnΘ velikosti

Slo₧ky pracujφcφ s hodnotami prom∞nnΘ dΘlky dovolujφ zjistit nebo p°epsat aktußlnφ dΘlku hodnoty pomocφ vlastnosti Length, naΦφst obsah slo₧ky ze souboru pomocφ metody ReadFile, zapsat obsah slo₧ky do souboru pomocφ metody WriteFile. Obsah slo₧ek Raster, Text a OLE lze otev°φt v samostatnΘm okn∞ pomocφ metody Open.

Pokud slo₧ka obsahuje hodnotu prom∞nnΘ velikosti, pak pomocφ vlastnosti Value lze s nφ pracovat takΘ po Φßstech. Zßpis Value[offset,size] oznaΦuje ·sek hodnoty dΘlky size poΦφnaje bajtem offset. Zßpis Value# oznaΦuje celkovou dΘlku hodnoty.

Zßpis zm∞n do databßze a aktualizace obsahu formulß°e

Po zapsßnφ novΘ hodnoty do formulß°e se zßznamovou synchronizacφ je nutno pomocφ funkce nebo metody Commit_view explicitn∞ zapsat zm∞ny do databßze. Jinak by se snadno mohly ztratit. Zm∞ny provedenΘ programem nebo u₧ivatelem ve formulß°i lze odvolat funkcφ nebo metodou Roll_back_view.

Pokud byl obsah databßze zm∞n∞n jinak ne₧ prost°ednictvφm formulß°e, pak obsah formulß°e lze aktualizovat funkci nebo metodu Reset_view s p°φznakem RESET_CACHE. Obsah jednotliv²ch slo₧ek formulß°e ve vybranΘm zßznamu lze aktualizovat metodou Refresh.

P°φklad: v zßznamov∞ synchronizovanΘm formulß°i je tlaΦφtko volajφcφ proceduru, kterß v databßzi p°epφÜe n∞kterou hodnotu zobrazenou ve formulß°i. V zßznamu provedete n∞jakΘ zm∞ny a stisknete toto tlaΦφtko. Jφm vyvolanß zm∞na se ve formulß°i neprojevφ. P°i p°echodu na jin² zßznam nebo zav°enφ formulß°e se vÜak m∙₧e objevit varovßnφ signalizujφcφ, ₧e se hodnota za dobu otev°enφ formulß°e zm∞nila:

Aby tato matoucφ situace nenastala, je nutno po zm∞n∞ hodnoty programem zavolat na slo₧ku metodu Refresh nebo na formulß° funkci nebo metodu Reset_view s p°φznakem RESET_CACHE, kterß uvede do souladu obsah formulß°e s hodnotami v databßzi.

P°epoΦty Φφsel zßznam∙

Kurzor a tabulka

Absolutnφ Φφslo zßznamu ve formulß°i do editovatelnΘho kurzoru lze p°evΘst na absolutnφ Φφsla zßznam∙ z tabulek, z nich₧ dan² zßznam vznikl, pomocφ funkce serveru Translate.

P°φklad:

function Exists(kod:string[8];var cisloVTab:integer) : boolean;
{**************************************}
// zjistφ, existuje-li kniha s kodem kod
// jestli₧e ano, vrßtφ v cisloVTab cislo zßznamu z tabulky Knihy
var
  ck : cursor;
  podm2 : string[100];
  pocet : integer;
begin
  podm2 := "select * from KNIHY where KOD="""+kod+"""";
  if Open_sql_cursor(ck,podm2) then Exit;
  Rec_cnt(ck,pocet);
  if pocet = 1 then begin
    Translate(ck,0,0,cisloVTab);
    Exists := true              {OK}
  end  
  else begin
    Info_box("Upozorn∞nφ","Zadan² k≤d nebyl nalezen!");
    b := true;
    Exists := false;     
  end;
  Close_cursor(ck);  
end;

Subkurzor a superkurzor

P°edpoklßdejme, ₧e jeden kurzor je subkurzorem jinΘho kurzoru (budeme mu °φkat superkurzor). Absolutnφ Φφslo zßznamu v subkurzoru pak lze p°evΘst na absolutnφ Φφslo tΘho₧ zßznamu v superkurzoru pomocφ funkce Super_recnum. To je pot°eba ud∞lat nap°. v situaci, kdy₧ u₧ivatel stiskem tlaΦφtka ₧ßdß provedenφ akce se zßznamem, na n∞m₧ se prßv∞ nachßzφ. Pokud toti₧ p°edtφm polo₧il dotaz (nap°. QBE set°φd∞nφ), pak jeho formulß° vede do subkurzoru. Program musφ pomocφ funkce Get_fcursor zφskat od formulß°e jeho kurzor, pomocφ funkce Get_view_pos zφskat Φφslo zßznamu v subkurzoru a funkcφ Super_recnum je p°epoΦφst na Φφslo zßznamu v superkurzoru (anebo provΘst po₧adovanou akci s pomocφ zφskanΘho subkurzoru).