|
![]() | Chyby p°i p°ipojovßnφ se na server | ![]() | Programovßnφ v externφch jazycφch | Zjišovßnφ detail∙ poslednφ chyby | ![]() |
Nejni₧Üφ ·rove≥ nßstroj∙ pro Φtenφ a zßpis dat do databßze p°edstavujφ API funkce. Na vyÜÜφ ·rovni lze pou₧φt p°φkazy jazyka SQL obsahujφcφ prom∞nnΘ klienta pomocφ funkce SQL_host_execute.
Pro Φtenφ a zßpis hodnot sloupc∙ lze pou₧φt n∞kterΘ zát∞chto funkcφ:
(cd_)Read, (cd_)Write - univerzßlnφ funkce pro prßci sáhodnotou sloupce,
(cd_)Read_ind, (cd_)Write_ind - prßce se sloupcem pevnΘ velikosti,
(cd_)Read_var, (cd_)Write_var - prßce se sloupce prom∞nnΘ velikosti,
(cd_)Read_len, (cd_)Write_len - prßce sádΘlkou hodnoty sloupce prom∞nnΘ velikosti,
(cd_)Read_ind_cnt, (cd_)Write_ind_cnt - prßce sápoΦtem slo₧ek multiatributu.
(cd_)Read_record, (cd_)Write_record - prßce sácel²m zßznamem najednou.
Funkcφm se p°edßvajφ tyto parametry:
P°i zßpisu hodnoty se dßle udßvß jejφ dΘlka. P°i prßci sáhodnotou prom∞nnΘ velikosti se udßvß zaΦßtek a dΘlka ·seku, sánim₧ se pracuje.
╚φslo tabulky lze zφskat pomocφ funkce (cd_)Find_object, nap°.:
cd_Find_object(cdp, "MOJETABULKA", CATEG_TABLE, &tablenum);
╚φsla systΘmov²ch tabulek jsou váexternφch jazycφch oznaΦena konstantami TAB_TABLENUM, OBJ_TABLENUM, USR_TABLENUM, SRV_TABLENUM, REPL_TABLENUM a KEY_TABLENUM.
╚φslo kurzoru vznikne p°i otev°enφ kurzoru. Pevn² kurzor vytvo°en² podle dotazu vádatabßzi se otevφrß p°φkazem (cd_)Open_cursor, prom∞nn² kurzor zádynamicky sestrojenΘho dotazu se otevφrß funkcφ (cd_)Open_cursor_direct. Otev°en² kurzor je nutno uzav°φt funkcφ Close_cursor.
JmΘna sloupc∙ databßzov²ch tabulek a kurzor∙ se pou₧φvajφ pouze váSQL a ve vnit°nφm programovacφm jazyce. Ve funkcφch pro externφ jazyky se sloupce oznaΦujφ sv²mi po°adov²mi Φφsly.
Sloupce jsou oΦφslovßny souvisle od nuly. ╚φslo nula mß slu₧ebnφ sloupec, kter² se vátabulkßch jmenuje DELETED a vákurzorech __DELETED a nese informaci o tom, zda zßznam je zruÜen². Za nim nßsledujφ p°φpadnΘ dalÜφ slu₧ebnφ sloupce t²kajφcφ se replikacφ, kolob∞hu dokument∙ a prßv kájednotliv²m zßznam∙m (jejich jmΘna zaΦφnajφ _W5_). Za nimi jsou normßlnφ sloupce vátom po°adφ, ván∞m₧ jsou uvedeny vádefinici tabulky nebo váklauzuli SELECT vádefinici kurzoru.
Nult² sloupec mß typ uns8. Nab²vß t°φ hodnot:
* NOT_DELETED zßznam existuje, nenφ zruÜen
* DELETED zßznam je zruÜen² (lze jej obnovit)
* RECORD_EMPTY zßznam je uvoln∞n² (nelze jej obnovit)
602SQL poskytuje specißlnφ nßstroj, jak kompilßtor∙m jednoduÜe sd∞lit Φφsla vÜech sloupc∙ ve vÜech tabulkßch a dotazech váaplikaci. Tφmto nßstrojem je vytvo°enφ definiΦnφch soubor∙, kterΘ se potΘ vyu₧ijφ p°i p°ekladu aplikaΦnφho programu.
V hlavnφm menu v²vojovΘho prost°edφ 602SQL je vámenu Nßstroje p°φkaz P°ipravit include, kter² dovoluje vytvo°it definiΦnφ soubor pro jazyk C nebo Pascal.
Pro jazyk C bude obsahem souboru °ada direktiv #define, kterΘ definujφ identifikßtor (makro) oznaΦujφcφ sloupec pomocφ jeho Φφsla. Pro Pascal budou identifikßtory definovßny pomocφ deklarace konstant.
Identifikßtory oznaΦujφcφ sloupce tabulek budou mφt tvar:
A_tabulka_sloupec
kde tabulka je jmΘno tabulky a sloupec je jmΘno sloupce tabulky.
Identifikßtory oznaΦujφcφ sloupce kurzor∙ budou jeden zátvar∙:
B_kurzor_sloupec B_kurzor_tabulka_sloupec B_kurzor_alias_sloupec
kde kurzor je jmΘno kurzoru, sloupec je jmΘno sloupce, tabulka je jmΘno tabulky, zánφ₧ sloupec pochßzφ a alias je p°φpadnΘ oznaΦenφ tabulky várßmci kurzoru (tabulka nebo alias se pou₧ije, pokud kurzor obsahuje vφce stejn∞ pojmenovan²ch sloupc∙).
Pro jazyk C mß definiΦnφ soubor standardn∞ p°φponu SIC, pro Pascal p°φponu SIP. Do aplikaΦnφho programu jej vlo₧φte takto:
#include "appl.sic"
resp.
{$I appl.sip}
JmΘna utvo°enß v²Üe popsan²m zp∙sobem a definovanß vádefiniΦnφm souboru lze vyu₧φt vÜude tam, kde je parametrem funkce Φφslo sloupce.
Ke zjiÜt∞nφ Φφsla sloupce na zßklad∞ jeho jmΘna lze takΘ vyu₧φt tyto funkce:
Funkce (cd_)Attribute_info vracφ pro sloupec zadan² jmΘnem jeho Φφslo, typ a dalÜφ ·daje. Funkce (cd_)Enum_attributes a (cd_)Enum_attributes_ex vracejφ p°ehled vÜech sloupc∙. Tyto funkce se dajφ pou₧φt na tabulku nebo na otev°en² kurzor.
PodrobnΘ informace o sloupcφch v tabulce poskytuje systΘmov² informaΦnφ dotaz _iv_table_columns.Pro dynamicky vznikajφcφ kurzory platφ, ₧e jejich sloupce jsou oΦφslovßny zleva doprava vápo°adφ, ván∞m₧ jsou uvedeny váklauzuli SELECT. Prvnφ sloupec uveden² za SELECT mß Φφslo 1, dalÜφ 2 atd.
Nech¥ tabulka T1 obsahuje sloupce A a B, tabulka T2 sloupce C a D. Otev°ete kurzor CU vájazyce C volßnφm funkce:
Open_cursor_direct("select A,D,B+C from T1,T2 where A<C order by D", &CU);
Pak p°eΦφst hodnotu sloupce D ze zßznamu REC vákurzoru CU lze funkcφ:
Read(CU, REC, 2, NULL, &buffer);
zatφmco hodnotu souΦtu B+C p°eΦtete
Read(CU, REC, 3, NULL, &buffer);
Funkce pro zßpis do databßze majφ za poslednφ parametr ·daj datasize. Hodnotou tohoto parametru je dΘlka hodnoty zapisovanΘ do databßze vábajtech. Pokud pφÜete do sloupce pevnΘ dΘlky, pak tato hodnota musφ b²t stejnß jako velikost hodnoty tohoto sloupce, tedy nap°. pro typ Char je to 1, pro Short 2, pro Date, Time, Timestamp, ukazatele a Integer 4, pro Money6, pro Real a BigInt 8, pro znakovΘ a bajtovΘ °et∞zce je to dΘlka °et∞zce uvedenß vádefinici tabulky (nikoli tedy skuteΦnß dΘlka zapisovanΘho °et∞zce).
P°i Φtenφ hodnoty je funkci nutno p°edat adresu dostateΦn∞ velkΘho bufferu. P°eΦten² °et∞zec znak∙ bude ukonΦen nulou.
DΘlky hodnoty sloupce prom∞nnΘ velikosti je 4-bajtov² celoΦφseln² ·daj, p°i jejφm zßpisu mß tedy parametr datasize hodnotu 4. PoΦet slo₧ek multiatributu je 2-bajtov² celoΦφseln² ·daj, p°i jeho zßpisu mß tedy parametr datasize hodnotu 2.
Funkce (cd_)Read a (cd_)Write jsou schopny nahradit vÜechny ostatnφ funkce pro Φtenφ a zßpis dat, jejich volßnφ je vÜak pon∞kud slo₧it∞jÜφ. Do rozhranφ serveru jsou zahrnuty hlavn∞ kv∙li kompatibilit∞ se starÜφmi verzemi. Vzhledem kátomu nenφ nutno studovat zbytek tΘto sekce.
Ob∞ funkce majφ parametr access, kter² popisuje cestu, jak se dostat kápo₧adovan²m dat∙m vádatabßzi.
Pokud pracujete se sloupcem, kter² nenφ multiatributem ani nemß prom∞nnou dΘlku, pak uvßd∞jte hodnotu tohoto parametru rovnou NULL vájazyce C, NULL_ACCESS v Pascalu.
Prßce sámultiatributy, se sloupci prom∞nnΘ dΘlky a p°φpadn∞ i sáukazateli vy₧aduje zadßnφ dalÜφch parametr∙. Váp°φpad∞ multiatribut∙ je to index, tedy po°adovΘ Φφslo slo₧ky multiatributu, sánφ₧ chcete pracovat. Váp°φpad∞ sloupc∙ prom∞nnΘ dΘlky se zadßvß interval, tedy ·sek záhodnoty.
Tyto ·daje poskytuje parametr access. Mimo to umo₧≥uje:
Poslednφ operace mß efekt pouze p°i zmenÜenφ poΦtu slo₧ek multiatributu nebo dΘlky. Zv∞tÜenφ toti₧ nastßvß jedin∞ automaticky p°i zßpisu.
P°i zadßvßnφ kterΘhokoli záv²Üe uveden²ch ·daj∙ parametr access je ukazatel na pole zßznam∙ typu modifrec, kterΘ popisuje cestu vedoucφ káhledan²m hodnotßm (v Pascalu je pole zßznam∙ p°edßvßno referencφ, nikoli p°es ukazatel). Váobou p°φpadech hodnota parametru access musφ p°φsn∞ korespondovat sátypem a dalÜφmi charakteristikami p°φsluÜnΘho sloupce.
Hodnota NULL parametru access se pou₧ije prßv∞ tehdy, kdy₧ p°φsluÜn² sloupec je pevnΘ dΘlky a nenφ to multiatribut. Jinak parametr accesss popisuje p°φstup káhodnot∞ a jednotlivΘ slo₧ky pole po °ad∞ odpovφdajφ jednotliv²m krok∙m na cest∞ ke zvolen²m dat∙m. Cesta zaΦφnß u sloupce zadanΘho jako parametr funkce.
Lze volit tyto kroky:
typedef struct { uns8 modtype; union umoddef { struct smodstop { } modstop; struct smodlen { } modlen; struct smodind { uns16 index; } modind; struct smodint { uns32 start; uns16 size; } modint; struct smodp { uns8 attr; } modptr; struct smodindp { uns16 index; uns8 attr; } modindptr; } moddef; } modifrec;
type modifrec = record modtype : uns8; case integer of MODSTOP : ( ); MODLEN : ( ); MODIND : (index : uns16); MODINT : (start : uns32; size : uns16); MODPTR : (attr : uns8); MODINDPTR : (index2 : uns16; attr2 : uns8) end;
Hodnotou slo₧ky modtype váka₧dΘm zßznamu musφ b²t jedna zát∞chto konstant:
konstanta | Umo₧≥uje |
MODSTOP | tato hodnota je v₧dy váposlednφm zßznamu vápoli |
MODLEN | Pracovat sávelikostφ multiatributu nebo zßznamu prom∞nnΘ dΘlky |
MODIND | Pracovat se slo₧kou multiatributu zadanou indexem |
MODINT | Pracovat sá·sekem hodnoty sloupce prom∞nnΘ dΘlky zadan²m zaΦßtkem a dΘlkou |
MODPTR | p°ejφt do zßznamu, na n∞j₧ odkazuje ukazatel, na zadan² sloupec |
MODINDPTR | p°ejφt do zßznamu, na n∞j₧ odkazuje ukazatel se zadan²m indexem na zadan² sloupec |
╚tete-li funkcφ (cd_)Read obsah sloupce prom∞nnΘ velikosti, pak vápoli, kam obsah sm∞°uje, bude váprvnφch 2 bajtech dΘlka p°eΦtenΘho ·seku a za nφ p°eΦtenß data.
![]() | Chyby p°i p°ipojovßnφ se na server | ![]() | Programovßnφ v externφch jazycφch | Zjišovßnφ detail∙ poslednφ chyby | ![]() |