6429

Szczegóły
Tytuł 6429
Rozszerzenie: PDF
Jesteś autorem/wydawcą tego dokumentu/książki i zauważyłeś że ktoś wgrał ją bez Twojej zgody? Nie życzysz sobie, aby podgląd był dostępny w naszym serwisie? Napisz na adres [email protected] a my odpowiemy na skargę i usuniemy zabroniony dokument w ciągu 24 godzin.

6429 PDF - Pobierz:

Pobierz PDF

 

Zobacz podgląd pliku o nazwie 6429 PDF poniżej lub pobierz go na swoje urządzenie za darmo bez rejestracji. Możesz również pozostać na naszej stronie i czytać dokument online bez limitów.

6429 - podejrzyj 20 pierwszych stron:

Piotr Neil Gawro�ski InterBase dla �delfin�w� Helion 2001 Wst�p Celem niniejszej ksi��ki jest przybli�enie u�ytkownikom Delphi serwera bazy danych InterBase i biblioteki IBX. Publikacja ta nie jest podr�cznikiem SQL-a, lecz zawiera opis obiekt�w po stronie serwera i sposobu dost�pu do nich z Delphi za pomoc� biblioteki IBX. Rozdzia� 1. Typy danych W niniejszym rozdziale zostan� przedstawione typy danych, z jakich mo�na korzysta� podczas tworzenia bazy danych. Znajomo�� ich jest niezb�dna w fazie projektowania i pisania oprogramowania. Om�wiony tak�e zostanie spos�b korzystania z tych typ�w danych w Delphi. W InterBase wyst�puj� nast�puj�ce typy danych: * znakowe - CHAR i VARCHAR, * zmiennoprzecinkowe - FLOAT i DOUBLE PRECISSION, * ca�kowite - INTEGER i SMALLINT, * sta�oprzecinkowe - NUMERIC i DECIMAL, * dotycz�ce daty i czasu - DATE, TIME i TIMESTAMP, * binarne - BLOB. Wszystkie typy danych, z wyj�tkiem BLOB, mog� tworzy� tablice (arrays) o wymiarach od l do 16. Tabela 1.1 zawiera kr�tk� charakterystyk� ww. typ�w danych. Tabela 1.1. Typy danych w InterBase Nazwa Rozmiar zakres dok�adno�ci Opis BLOB Zmienny (w definicji wiersza 8 bajt�w) Rozmiar segmentu typu BLOB jest ograniczony do 64 kB Rozmiar p�l tego typu mo�e si� zmienia� dynamicznie w zale�no�ci od aktualnych potrzeb. Idealnie nadaje si� do przechowywania grafiki, d�wi�ku czy dokument�w (np. MS Office) CHAR(n) CHARACTER(n) n znak�w n mo�e przyj�� warto�� z zakresu od l do 32767, przy czym n pomno�one przez rozmiar znaku nie mo�e przekroczy� 32767 (w niekt�rych zestawach rozmiar jest wi�kszy od 1) Odpowiednie do przechowywania tekst�w o sta�ej d�ugo�ci DATE 8 bajt�w (64 bity) od l stycznia 100r.n.e. do 29 lutego 32768 r. DECIMAL (precyzja, skala) 2,4 lub 8 bajt�w (l6, 32 lub 64 bity) Precyzja od l do 18; minimalna liczba cyfr do przechowania w polu Skala od O do 18; liczba cyfr do przechowania po przecinku. Warto�� ta musi by� mniejsza lub r�wna precyzji liczby sta�oprzecinkowe DECIMAL(8.2) przechowuje liczby w formacie pppppp.ss DOUBLE PRECISION 8 bajt�w (64 bity1) Od 2,225x10-308 do 1,797x10308 Liczba zmiennoprzecinkowa podw�jnej precyzji - 15 cyfr FLOAT 4 bajty (32 bity) Od 1,175x10-38 do 3,402x1038 Liczba zmiennoprzecinkowa pojedynczej precyzji - 7 cyfr INTEGER 4 bajty (32 bity) 0d �2147483648 do 2147483647 Liczby ca�kowite ze znakiem NCHAR [VARYING](n) NATIONAL CHAR [VARYING] NATIONAL CHARACTER [VARYING] n znak�w n mo�e przyj�� warto�� z zakresu od l do 327672, przy czym n pomno�one przez rozmiar znaku nie mo�e przekroczy� 32767 (w niekt�rych zestawach rozmiar jest wi�kszy od 1) Teksty lub �a�cuchy znak�w o sta�ej (zmiennej dla VARYING) d�ugo�ci. R�ni� si� od CHAR i VARCHAR jedynie zestawem znak�w - ISO 8859-1 NUMERIC (precyzja skala) 2,4 lub 8 bajt�w (16,32 lub 64 bity) Precyzja: 1 do 18; dok�adnie liczba cyfr do przechowania w polu. Skala: 0 do 18; liczba cyfr do przechowania po przecinku. Warto�� ta musi by� mniejsza lub r�wna precyzji Liczby sta�oprzecinkowe, NUMERIC(8,2) przechowuje liczby w formacie pppppp.ss SMALLINT 2 bajty (16 bit�w) od �32768 do 32767 �Kr�tka� (short) liczba ca�kowita ze znakiem TIME 8 bajt�w (64 bity) Czas od godziny 0:00:00.000 do 23:59:59.999 TIMESTAMP 8 bajt�w (64 bity) 1 stycznia 100r.n.e. do 29 lutego 32768r. wraz z godzin� z dok�adno�ci� jak TIME Przechowuje zar�wno dat�, jak i godzin� VARCHAR(n) CHAR VARYING CHARACTER VARYING n znak�w n mo�e przyj�� warto�� z zakresu od 1 do 32765, przy czym n pomno�one przez rozmiar znaku nie mo�e przekroczy� 32765 (w niekt�rych zestawach rozmiar jest wi�kszy od 1) Teksty lub �a�cuchy znak�w o zmiennej d�ugo�ci Typy znakowe W InterBase programista ma do dyspozycji nast�puj�ce typy znakowe: * typ znakowy o sta�ej d�ugo�ci, nazywany CHAR(n)3 lub CHARACTER(n), * typ znakowy o zmiennej d�ugo�ci, nazywany VARCHAR(n), CHAR VARYING(n) lub CHARACTER VARYING(n), * typ o sta�ej d�ugo�ci wykorzystuj�cy zestaw znak�w ISO 8859-1 (CHARSET IS08859_1), o nazwie NCHAR(n), NATIONAL CHAR(n) lub NATIONAL CHARACTER(n), * typ b�d�cy po��czeniem typ�w z dw�ch poprzednich punkt�w, nazywany * NCHAR VARYING(n), NATIONAL CHARACTER VARYING(n) lub NATIONAL CHAR VARYING(n). Typ CHAR Ten typ danych, podobnie jak NCHAR, s�u�y do przechowywania tekst�w o sta�ej d�ugo�ci. Warto pami�ta� o tym, �e deklaruj�c kolumn� CHAR(n), otrzymamy �a�cuch znak�w o d�ugo�ci dok�adnie n. Je�li do bazy zapisano kr�tszy tekst, w miejsce brakuj�cych znak�w zostan� wpisane spacje, kt�re nie b�d� pakowane i przechowywane w tabeli. Pozwala to na pewn� oszcz�dno�� miejsca na dysku. W trakcie tworzenia kolumny tekstowej mo�na zdefiniowa� zestaw znak�w i spos�b por�wnywania, z jakiego mo�na korzysta� w przypadku tej kolumny. Podaj�c zestaw znak�w, nale�y zwr�ci� uwag� na to, aby nie przekroczy� rozmiaru pola 32 767 bajt�w - w niekt�rych wypadkach jeden znak mo�e zaj�� wi�cej ni� jeden bajt4. Zagadnienie to zostanie om�wione nieco dalej. Do utworzenia tabeli zawieraj�cej kolumn� tekstow� mo�na u�y� nast�puj�cej konstrukcji: CREATE TABLE TEST ( TEKST CHAR(8O) CHARACTER SET WIN1250 COLLATE PXW_PLK ) Jak mo�na si� domy�li�, do manipulacji takim polem w Delphi najodpowiedniejszy jest typ STRING. Aby pobra� dane z pola w celu dalszego ich przetwarzania, mo�na u�y� jednej z konstrukcji5: IBTablel.FieldByName(�TEKST�).AsString := 'Ala'; If Length(IBQuery1.FieldByName('TEKST'.AsString) then ... Typ VARCHAR Ten typ przechowuje tekst o zmiennej d�ugo�ci. W deklaracji VARCHAR(n) liczba n okre�la maksymalny rozmiar �a�cucha znak�w. Ale w przeciwie�stwie do CHAR, w miejsce brakuj�cych znak�w nie s� wpisywane spacje. Pomaga to zaoszcz�dzi� miejsce na dysku. Poniewa� �a�cuchy maj� r�n� d�ugo��, na stronie bazy mie�ci si� ich wi�cej, dzi�ki czemu dost�p do danych nast�puje przy mniejszej liczbie odczyt�w z dysku. Z drugiej jednak strony, aktualizacje mog� przebiega� wolniej ni� w przypadku u�ycia typu znakowego o sta�ej d�ugo�ci. Tak samo jak ma to miejsce w przypadku typu CHAR, definiuje si� zestaw znak�w i spos�b por�wnywania. Je�li chodzi o VARCHAR, rozmiar pola nie mo�e przekroczy� 32 765 bajt�w. Aby doda� kolumn� tekstow� o zmiennej d�ugo�ci do tabeli TEST, nale�y skorzysta� z konstrukcji: alter table test add ZMIENNY VRCHAR(120) Typ VARCHAR obs�ugiwany jest w Delphi tak samo jak CHAR. Typ BLOB stosowany do danych tekstowych Na og� typ BLOB s�u�y do przechowywania danych binarnych, ale r�wnie dobrze mo�na si� nim pos�u�y� do przechowywania tekstu. Jego zalet� - w por�wnaniu do wymienionych wcze�niej typ�w danych - jest brak ograniczenia rozmiaru do 32 kB tekstu. Mo�na okre�li� zestaw znak�w, jaki b�dzie przechowywany, ale nie mo�na okre�li� sposobu por�wnywania dla kolumny BLOB. Definiuj�c typ BLOB, mo�na okre�li� jego podtyp6 - w przypadku danych tekstowych nale�y poda�, �e jest to typ 1. W Delphi do przetwarzania tekstowego pola BLOB wykorzystuje si� string. Pola obs�uguje typ TMemoField - mo�na je po��czy� z TDBMemo lub TDBRichEdit. Nale�y pami�ta�, �e taka obs�uga ma sens jedynie dla podtypu l. Zestawy znak�w W przypadku typ�w znakowych mo�na okre�li� zestaw znak�w, z jakiego b�dzie korzysta� dana kolumna. Zdefiniowanie takiego zestawu podczas deklaracji kolumny powoduje nadpisanie standartowego zestawu znak�w, jaki zosta� okre�lony w trakcie tworzenia tabeli. Mo�na tak�e okre�li� spos�b por�wnywania, jaki ma by� wykorzystany, je�li jest on inny ni� domy�lny - niekt�re zestawy znak�w mog� mie� ich kilka. A kiedy najcz�ciej wykorzystujemy por�wnywanie? Oczywi�cie podczas sortowania. Chc�c doda� powy�sze informacje do deklaracji kolumny, u�yjemy nast�puj�cej sk�adni: <NAZWA KOLUMNY> <TYP TEKSTOWY> [CHARACTER SET nazwa_zestawu] ... [COLLATE porz�dek] np.: ALTER TABLE TEST ADO POLSKI_EKST CHAR(40) CHARACTER SET WIN1250 NOT NULL COLLATE PXW_PLK W poni�szej tabeli znajduje si� lista dost�pnych zestaw�w znak�w. Tabela 1.2. Lista dost�pnych zestaw�w znak�w Zestaw znak�w Min/Max rozmiar znaku w bajtach Sposoby por�wnywania ASCII BIG_5 CYRL DOS437 DOS852 DOS850 DOS857 DOS860 DOS861 DOS863 DOS865 EUCJ_0208 GB_2312 ISO8859_1 KSC_5601 NEXT NONE OCTETS SJIS_0208 UNICODE_FSS WIN1250 WIN1251 WIN1252 WIN1253 WIN1254 1/1 1/2 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1 /2 1 /2 1/1 1 /2 1/1 1/1 1/1 1 /2 1 /3 1/1 1/1 1/1 1/1 1/1 ASCII BIG_5 CYRL DB_RUS PDQX_CYRL DOS437 DB_DEU437 DB_ESP437 DB_FIN437 DB_FRA437 DB_ITA437 DB_NLD437 DB_SVE437 DB_UK437 DB_US437 PDOX_ASCII PDOX_INTL PDOX_SWEDFIN DOS852 DB_CSY DB_PLK DB_SLO PDOX_CSY PDOX_HUN POOX_PLK PDOX_SLO DOS850 DB_DEU850 D8_ESP850 DB_RA850 DB_FRC850 OB_ITA850 DB_NLD850 DB_PTB850 DB_SVE850 DB_UK850 DB_US850 DOS857 DB_TRK DOS860 DB_PTG860 DOS861 POOX_ISL DOS863 DB_FRC863 : DOS865 DB_DAN865 DB_NOR865 PDOX_NORDAN4 EUCJ_0208 GB_2312 IS08859_1 DA_DA DE_DE DU_NL EN_UK EN_US ES_ES FI_FI FR_CA FR_FR IS_IS IT_IT NO_NO PT_PT SV_SV KSC_5601 KSC_DICTIONARY NEXT NXT_DEU NXT_FRA NXT_ITA NXT_ESP NXT_US NONE OCTETS SJIS_0208 UNICODE_FSS WIN1250 PXW_CSY PXW_HUNDC PXW_PLK PXW_SLOV WIN1251 PXW_CYRL WIN1252 PXW_INTL PXW_INTL850 PXW_NORDAN4 PXW_SPAN PXW_SWEDFIN WIN1253 PXW_GREEK WIN1254 PXW_TURK W tabeli wyr�nione zosta�y te zbiory znak�w, kt�re najbardziej odpowiadaj� polskiemu u�ytkownikowi. WIN1250 jest stosowany w Windows, a DOS852 to stara, dobra strona kodowa 852 z DOS-a. Je�li podczas definicji kolumny nie okre�limy sposobu por�wnywania, to b�dzie stosowany spos�b domy�lny - czyli pierwszy wymieniony przy odpowiednich zbiorach znak�w w powy�szej tabeli. Czasem mo�emy chcie� por�wna� dane inaczej, ni� by to wynika�o z definicji kolumny czy z domy�lnego sposobu dla danego zestawu znak�w. Stosuj�c zapytanie SELECT z klauzul� ORDER BY lub GROUP BY, mo�na okre�li�, w jaki spos�b InterBase ma por�wna� dane w kolumnach. Np.: Select TEKST From TEST Order By TEKST COLLATE PXW_SLOV: Spos�b por�wnywania mo�na okre�li� tak�e w przypadku... operacji por�wnania - np. w klauzuli WHERE instrukcji SELECT: Select * from Test Where Tekst COLLATE PXW_PLK = :tekst W stosunku do wersji 5 InterBase nast�pi�a zmiana w nazwie jednego ze sposob�w por�wnania - PXW_SLO zmieniono na PXW_SLOV. Je�li chcemy zobaczy�, jakie zestawy znak�w i odpowiadaj�ce im sposoby por�wnania s� zdefiniowane w bazie danych, musimy przyjrze� si� nast�puj�cym tabelom systemowym: * ROB$CHARACTER_SETS dla zbior�w znak�w (kolumna RDB$CHARACTER_SET_NAME), * RDB$COLLATIONS dla por�wna� (kolumna RDBSCOLLATION_NAME). Typy liczbowe InterBase pozwala na przechowywanie danych typ�w ca�kowitych, sta�oprzecinkowych i zmiennoprzecinkowych. Poni�ej mo�na znale�� informacje na ich temat. Typy ca�kowite Do deklarowania kolumn danych typ�w ca�kowitych s�u�� nast�puj�ce s�owa kluczowe: * SMALLINT - liczby ca�kowite ze znakiem z przedzia�u od -32 768 do 32 767. Typ w Delphi - dowolny typ ca�kowity, ale najlepiej oczywi�cie... SmallInt. Przy pr�bie przypisania warto�ci spoza zakresu zostanie zg�oszony wyj�tek EDatabaseError z komunikatem o przekroczeniu zakresu. * INTEGER - liczby ca�kowite ze znakiem z przedzia�u od -2 147 483 648 do 2 147 483 647. W Delphi oczywi�cie obs�ugiwane przez Integer, ale wraz z wprowadzaniem kolejnych wersji Delphi zwi�kszono zakres typu Integer, dlatego dla pewno�ci lepiej korzysta� z Longint. * NUMERIC - wykorzystuje si� do liczb sta�oprzecinkowych, ale je�li podamy skal� r�wn� zeru, to mo�emy uzyska� liczb� z przedzia�u od -1019 +1 do 1019-1. Taki efekt mo�na uzyska� jedynie przy wykorzystaniu dialektu 3 bazy danych. W przeciwnym razie pola NUMERIC o precyzji zawieraj�cej si� w przedziale 10- 18 zostan� zamienione na DOUBLE PRECISI0N7. Do obs�ugi tych kolumn nale�y wykorzysta� typ Int64 (w Delphi 5) lub Comp we wcze�niejszych wersjach. O ile w zasadzie nie ma problemu z dost�pem do p�l typu SMALLINT i INTEGER - wykorzystujemy w�a�ciwo�� komponentu TFieldAsInteger, np.: IBTable1.FieldByName(�SI�).AsInteger := 2000; to mo�e by� problem w przypadku przekroczenia zakresu 10 cyfr w typie NUMERIC. W komponencie TField brakuje w�a�ciwo�ci AsInt64 lub podobnego. Na szcz�cie mamy do dyspozycji potomka TField o nazwie TLargeIntField. Umo�liwia on dost�p do 64-bitowych liczb ca�kowitych, trzeba jednak stworzy� obiekt tego typu naj�atwiej to zrobi� korzystaj�c z edytora p�l8 (field editor) w Delphi. Typy sta�oprzecinkowe W InterBase mamy do dyspozycji dwa typy danych pozwalaj�ce na przechowywanie liczb ze sta�� liczb� miejsc po przecinku - NUMERIC i DECIMAL Najcz�ciej s� stosowane do przechowywania informacji o kwotach pieni�nych. W przypadku obu tych typ�w mo�na (ale nie trzeba) zdefiniowa� precyzj� i skal�. Precyzja okre�la liczb� cyfr, z kt�rych b�dzie sk�ada�a si� liczba. Dopuszczalne s� warto�ci z przedzia�u od l do 18. Skala to dopuszczalna liczba cyfr po przecinku (cz�� u�amkowa). Mo�e przyjmowa� warto�ci z zakresu od 0 do precyzji. Je�li nie okre�limy �adnej z nich, to przyjmowane s� warto�ci: 9 dla precyzji i 0 dla skali - odpowiada to deklaracji kolumny typu INTEGER. R�nica pomi�dzy typem DECIMAL i NUMERIC polega na interpretacji precyzji. W pierwszym przypadku precyzja dopuszcza przechowanie co najmniej p cyfr i dok�adnie s cyfr po przecinku. Natomiast w przypadku NUMERIC precyzja p okre�la dok�adn� liczb� cyfr przechowywanych przez kolumn� i dok�adn� liczb� s cyfr po przecinku. Je�li chodzi o wykorzystanie tych typ�w w Delphi, to zale�nie od wybranej precyzji i skali mog� to by�: comp lub int64 oraz wszystkie typy ca�kowite (pod warunkiem zachowania zgodno�ci zakres�w), przy korzystaniu ze skali wi�kszej od zera - typy zmiennoprzecinkowe, jak np. double. Trzeba jednak zachowa� ostro�no��, gdy� podczas konwersji mi�dzy sta�ym a zmiennym przecinkiem mo�e doj�� do utraty dok�adno�ci. Do przeprowadzania operacji na zmiennych przechowuj�cych warto�ci pieni�ne Delphi proponuje typ Currency (jedyny typ sta�oprzecinkowy). Bez problem�w mo�na zdefiniowa� precyzj� r�wn� 18 i skal� r�wn� 4: Numeric(18,4). Typy zmiennoprzecinkowe W InterBase programista ma do dyspozycji dwa typy zmiennoprzecinkowe; * FLOAT - zakres warto�ci od l,175xl0-38 do 3,402xl038, z dok�adno�ci� 7 cyfr dziesi�tnych; w Delphi typ single, * DOUBLE PRECISSON - liczby z przedzia�u od 2,225xl0-308 do 1,797xl0308, z dok�adno�ci� 15 cyfr dziesi�tnych; typ double w Delphi. Przy wpisywaniu warto�ci warto pami�ta� o dok�adno�ci podanej powy�ej. Je�li po przecinku znajdzie si� wi�cej cyfr, to najmniej znacz�ce zostan� odrzucone. Z drugiej strony, nale�y zwr�ci� uwag� na to, �e nie ka�da liczba ma dok�adn� reprezentacj� binarn�. St�d je�li np. w pole float wstawimy 0,2, to pobieraj�c dane z kolumny otrzymamy 0.200000002980232. Trzeba o tym pami�ta�, �eby unikn�� niemi�ych niespodzianek. Czas i data InterBase udost�pnia nast�puj�ce typy s�u��ce do deklarowania kolumn obs�uguj�cych czas i dat�: * DATE - przechowuje dat� z zakresu od l stycznia 100 r.n.e. do 29 lutego 32768 r.n.e, * TIME - przechowuje informacj� o czasie - od godziny 0:00:00.000 do 23:59:59.999, * TIMESTAMP - stanowi kombinacj� dw�ch powy�szych typ�w. Format daty i czasu jest nast�puj�cy: 'DD.MM.YYYY hh:nmi:ss.ttt' lub 'DD-MMM-YYYY hh:mm:ss.ttt', gdzie: * DD - dzie� miesi�ca, * MM - numer miesi�ca, * MMM - trzyliterowy, angielski skr�t nazwy miesi�ca, * YYYY - rok, * hh - godzina, * mm - minuty, * ss - sekundy, * ttt - tysi�czne cz�ci sekundy. W przypadku typu TIMESTAHP podanie informacji dotycz�cych czasu nie jest wymagane -wszystkie odpowiednie elementy przyjm� wtedy warto�� zero. Je�li zastosujemy zapytanie (z poziomu konsoli lub Delphi): Select czas from test order by czas i b�dziemy si� spodziewali zobaczy� u�amkowe cz�ci sekundy, to mo�emy si� zdziwi�. Znajdziemy za sekundami zero albo... nic9. Chc�c uzyska� tak� dok�adno�� musimy dokona� konwersji tej kolumny np. na typ znakowy. Poni�sze zapytanie zadzia�a ju� zgodnie z naszymi oczekiwaniami: Select Cast(czas as char(13)) as czas from test order by czas W powy�szym kodzie SQL-a widzimy funkcj� CAST, kt�ra w InterBase s�u�y do konwersji typ�w, a jej sk�adnia jest nast�puj�ca: CAST(<wyra�enie> as <nazwa_typu>) gdzie <nazwa_typu> jest jednym z typ�w InterBase wymienionych w typ rozdziale lub nazw� domeny. Nale�y pami�ta�, �e nie wszystkie konwersje maj� sens - np., konwersja daty na typ BLOB spowoduje wyst�pienie b��du. Stosuj�c zapytania SQL-owe mo�na skorzysta� z nast�puj�cych funkcji: * 'Date' - zwraca bie��c� dat�, * ' Now' - zwraca dat� i godzin�, * 'Today' - jak 'Date', * 'Tomorrow' - data jutrzejsza, * 'Yesterday' - data wczorajsza. Stosuj�c te funkcje w zapytaniach, nale�y wpisywa� je w apostrofach i dokona� konwersji na typ DATE, np.: Select Cast (�now' as time), czas from test; Update test set czas = 'now'; W Delphi wyst�puje typ TDateTime, kt�ry tak naprawd� jest typem double. W cz�ci ca�kowitej przechowuje informacje o dacie, a w u�amkowej o godzinie. Data powinna mie�ci� si� w przedziale od 30 grudnia 1899 roku do ko�ca roku 9999. Informacje o godzinie mo�na przechowywa� z dok�adno�ci� do tysi�cznych cz�ci sekund. Przy okazji TDateTime warto zwr�ci� uwag� na funkcje EncodeDate, DecodeDate, EncodeTime, DecodeTime i FormatDateTime. Pozwalaj� one na wydzielenie b�d� zapisanie w dacie informacji o latach, miesi�cach itd. np.: Var R. M. D : word; Begin DecodeDate(IBQry.FieldByName('Czas').AsDateTime, R, M, D); ... { W R, M, D mamy rok, miesi�c i dzie� z pola w bazie danych } end; I nast�pna rzecz, o kt�rej czasami si� zapomina - r�nica dw�ch dat daje w wyniku liczb� dni wyst�puj�cych pomi�dzy nimi10. Pola Blob Pola BLOB (Binary Large Objects) s�u�� do przechowywania danych binarnych, takich jak grafika, d�wi�k czy po prostu pliki. Ilo�� informacji przechowywanych w takim polu mo�e zmienia� si� dynamicznie - w samej kolumnie jest identyfikator pola. Natomiast dane znajduj� si� w innym miejscu bazy danych i podzielone s� na segmenty. Maksymalny rozmiar segmentu wynosi 32 kB. Definiuj�c pole BLOB, mo�na poda� jego podtyp, kt�ry umo�liwia okre�lenie charakteru przechowywanych danych. Do dyspozycji u�ytkownika s�: * typ 0 - dowolne dane binarne, * typ l - tekst. Pozosta�e typy - od 2 do 6 - s� zarezerwowane do wewn�trznego u�ytku InterBase. U�ytkownik mo�e w razie potrzeby zdefiniowa� w�asne podtypy, kt�re b�d� mia�y warto�ci ujemne. Aby zadeklarowa� pole BLOB nale�y u�y� konstrukcji: <KOLUMNA> BLOB [SUB_TYPE n] [SEGMENT SIZE size] np.: Alter Table Test Add B BLOB SEGMENT SIZE 1024; Jak wykorzysta� podtyp l, wyja�niono w cz�ci po�wi�conej typom znakowym. Poni�szy przyk�ad pokazuje, jak wczyta� plik do bazy danych:. if OpenDialog1.Execute then with IBTable1 do begin Edit; IBTable1Blob1.LoadFromFile(OpenDialog1.FIleName); Post; end; end; Je�li w pole Blob1 wczytamy bitmap� i pod��czymy do niego TDBImage, to b�dziemy mogli j� obejrze�11. Tablice InterBase umo�liwia tworzenie tablic danych. Deklarujemy je nast�puj�co: <nazwa_pola> <nazwa_typu> [<rozmiar>|<min>:<max>] np.: Alter Table Test Add Tablica Integer[0:9]; Chc�c stworzy� tablic� wielowymiarow�, rozmiary kolejnych wymiar�w rozdzielamy przecinkami. Nie b�dziemy tutaj porusza� g��biej tematu tablic z prostego powodu - w aktualnej wersji IBX-y nie obs�uguj� tablic. Ta funkcja powinna zosta� dodana w Delphi 6. Pr�by z BDE tak�e skazane s� na niepowodzenie. Domeny W przypadku tworzenia bazy danych, w kt�rej tabele zawieraj� wiele takich samych kolumn, wygodnie jest zdefiniowa� domen�. Mo�na j� por�wna� do definicji w�asnego typu danych, z czym mamy do czynienia w innych j�zykach programowania. Sk�adnia polecenia tworz�cego domen� jest nast�puj�ca: CREATE DOMAIN domain [AS] <typ> [DEFAULT { wartosc | NULL | USER}] [NOT NULL] [CHECK ( <warunek>)] [COLLATE collation]: Mo�na zdefiniowa� warunek, jaki b�d� musia�y spe�nia� wprowadzane dane. Sk�adnia klauzuli warunek jest nast�puj�ca: <warunek> ={ VALUE <operator> <val> | VALUE [NOT] BETWEEN <wartosc> AND <wartosc> | VALUE [NOT] LIKE <wartosc> [ESCAPE <wartosc>] | VALUE [NOT] IN (<wartosc> [ ... <wartosc> ...]) | VALUE IS [NOT] NULL | VALUE [NOT] CONTAINING <wartosc> | VALUE [NOT] STARTING [WITH] <wartosc> |(<warunek>) | NOT <warunek> | <warunek> OR <warunek> | <warunek> AND <warunek> } <operator> ={=|<|>|<=|>=|!<|!>|<>|!=} Dla przyk�adu, zdefiniujmy kolumn� maj�c� przechowywa� informacje o p�ci: create domain piec as char(1) not null check (value in (�K�, 'M')) Jako typ mo�na wybra� dowolny z wymienionych w tym rozdziale, tak�e tablice. Po zdefiniowaniu domeny kolumn� definiuje si� tak samo, jak ma to miejsce w przypadku ka�dego innego typu: Alter table test add osoba plec; W Delphi z takich kolumn korzysta si� tak samo, jak z kolumn typu typ. Rozdzia� 2. O UDF-ach Nieraz, gdy tworzymy jak�� baz� danych lub procedur� sk�adowan� okazuje si�, �e brakuje jakiej� potrzebnej funkcji po stronie bazy. Wtedy mo�emy przenie�� cz�� kodu do aplikacji u�ytkownika, ale lepszym rozwi�zaniem mog�oby by� rozbudowanie mo�liwo�ci serwera. Takie rozwi�zanie umo�liwiaj� nam UDF-y (User Defined Functions) w InterBase, a funkcje takie mo�na bez problemu napisa� w Delphi. Od strony InterBase Funkcje u�ytkownika deklarujemy w InterBase nast�puj�co: DECLARE EXTERNAL FUNCTION <nazwa> [<typ_danych>| CSTRING (int) [,<typ_danych> | CSTRING (int) ]] RETURNS {datatype [BY VALUE] | CSTRING (int)} [FREE_IT] ENTRY_POINT '<funkcja>' MODULE_MAME '<modu�>' Funkcji mo�na przekaza� maksymalnie 10 parametr�w -je�li jednym z nich ma by� BLOB, to 9. Parametry s� przekazywane do UDF-�w przez referencj�. Typ zmiennej przekazywanej do funkcji musi odpowiada� dok�adnie1 typowi danych dla j�zyka, w kt�rym jest ona pisana. Je�li np. do Delphi przekazywany jest typ DOUBLE PRECISSION, to w funkcji musi by� wykorzystany typ double. W przypadku typ�w tekstowych, s� one przekazywane jako ci�gi znak�w zako�czone zerem. S�u�y do tego typ CSTRING, na kt�ry s� konwertowane typy CHAR i VARCHAR. CSTRING jest zgodny z PChar w Delphi. Tak�e obs�ug� dat realizuje si� nieco inaczej. InterBase przechowuje informacj� o dacie w formie 64-bitowej liczby mapowanej na rekord TM zdefiniowany w pliku IBExternals.pas z pakietu IBX. Programi�ci pisz�cy w j�zyku C na pewno rozpoznaj� poni�szy typ jako struktur� time_t: TM = record tm_sec : integer; // Sekundy tm_min : integer; // Minuty tm_hour : integer; // Godzina tm_mday : integer; // Dzie� miesi�ca od l do 31 tm_mon : integer; // Miesi�c od O do 11 tm_year : integer; // Rok - 1900 tm_wday : integer; // Dzie� tygodnia od O-niedziela do 6-poniedzia�ek tm_yday : integer; // Nr dnia w roku od O do 365 tm_isdst : integer; end; Zdefiniowany jest tak�e wska�nik na t� struktur�, jak PTM i struktura przechowuj�ca informacj� o dacie i o godzinie: ISC_TIMESTAMP = record timestamp_date : Long; timestamp_time : ULong; end; Typy Long i ULong s� 32-bitowymi liczbami ca�kowitymi. InterBase przekazuj�c informacje o dacie, przekazuje zmienn� typu Long lub ULong lub zmienn� jako struktur� ISC_TIMESTAMP w przypadku TIMESTAMP. Typy te zdefiniowane s� w IB Header.pas. InterBase udost�pnia zestaw procedur s�u��cych do konwersji dat na wygodniejszy rekord TM: isc_encode_timestamp(tm_date : PTM; ib_date : P ISC_TIMESTAMP) isc_decode_timestamp(ib_date : PISC_TIMESTAMP; tm_date : PTM) isc_decode_sql_date(var ib_date : Long; tm_date : PTM) isc_encode_sql_date(tm_date: PTM; var ib_date: Long) isc_decode_sql_time(var ib_date: ULong; tm_date: PTM) isc_encode_sql_time(tm_date: PTM; var ib_date: ULong) Procedury te s� zdefiniowane w bibliotece gds32.dll. Deklaracje nag��wk�w funkcji mo�na znale�� w module IBIntf.pas z pakietu IBX lub mo�na oczywi�cie zadeklarowa� je samodzielnie, np.: procedur� isc_decode_sql_date (var ib_date: Longint; tm_date: PTM); stdcall; external 'gds32.dll'; Standardowe rezultaty funkcji przekazywane s� przez referencj�, ale w przypadku typ�w numerycznych mo�e si� to odbywa� tak�e przez warto��. S�u�y do tego klauzula BY VALUE. Nale�y uwa�a� podczas przekazywania �a�cuch�w tekstowych, gdy� mo�e to prowadzi� do wyciek�w pami�ci. Je�li programista w jaki� spos�b sam o to nie zadba podczas pisania funkcji, to w trakcie deklaracji wyniku nale�y u�y� klauzuli FREE_IT. Aby usun�� funkcj� z bazy, nale�y u�y� polecenia: DROP LXTERNAL FUNCTION <nazwa> UDF-y mo�na wywo�a� z dowolnego miejsca polecenia SQL-owego. Mo�na z nich korzysta� zar�wno w funkcjach przechowywanych na serwerze, jak i zapytaniach. Biblioteki DLL z funkcjami u�ytkownika nale�y umie�ci� w jednym z poni�szych katalog�w2: * w podkatalogu UDFkatalogu domowego InterBase: interbase_home\UDF, * w katalogu wymienionym w pliku ibconfig (Windows) lub isc_config (INIX) w zmiennej EXTERNAL_FUNCTION_DIRECTORY. Od strony Delphi UDF jest najzwyklejsz� funkcj� w bibliotece DLL. W Delphi z menu New nale�y wybra� opcj� dotycz�c� utworzenia nowej biblioteki DLL. Tworzenie funkcji przeanalizujemy na przyk�adzie. Przyk�ad: Funkcja Silnia(Liczba) Zadaniem funkcji b�dzie policzenie n!, gdzie n jest zadanym parametrem. Do projektu nale�y doda� modu� i zadeklarowa� w nim nast�puj�c� funkcj�: function Silnia(var N : integer) : integer; cdecl; export: Parametry przekazywane s� przez referencj� - st�d nale�y pami�ta� o s�owie kluczowym var. Wyj�tkiem jest PChar, kt�ry sam w sobie jest ju� wska�nikiem (do znaku). Cdecl okre�la spos�b przekazywania parametr�w - po szczeg�y warto zajrze� do pomocy Delphi. S�owo export m�wi nam, �e funkcja b�dzie eksportowana z biblioteki. W kodzie �r�d�owym biblioteki projektu (menu Project/View Source) nale�y doda� klauzul� exports: exports Silnia; Niech funkcja silnia zostanie zdefiniowana nast�puj�co: function Silnia(var N : integer) : integer; cdecl; export; var I : integer; begin Result := 1; if N > l then for I := l to N do Result:= Result * I; end; Projekt nale�y skompilowa� i uzyskan� w ten spos�b bibliotek� umie�ci� w jednym z katalog�w wymienionych wy�ej. Teraz powinni�my zadeklarowa� w InterBase korzystanie z funkcji biblioteki. DECLARE EXTERNAL FUNCTION EF_SILNIA INTEGER RETURNS INTEGER BY VALUE ENTRY_POINT 'Silnia' MODULE_NAME 'gawudf.dll': Powy�sze polecenie mo�na wykona� z poziomu ISQL-a lub skryptu tworz�cego baz� danych. EF_SILNIA jest nazw�, pod jak� funkcja b�dzie widziana w bazie. I to w zasadzie wszystko - w ramach testu mo�na zastosowa� poni�sze zapytanie: Select EF_Silnia(5) From RDBSDATABASE; Oczekiwany wynik to oczywi�cie 120. Bardziej uwa�ni musimy by� w trakcie tworzenia UDF-�w zwracaj�cych �a�cuchy znak�w. Istnieje wtedy ryzyko wyst�pienia wyciek�w pami�ci (memory leaks), poniewa� pami�� przydzielana przez jeden proces (biblioteka z funkcj�) nie jest nigdzie zwalniana. Mo�na do tego problemu podej�� na kilka sposob�w: * Mo�na zwraca� wska�nik do zmiennej przechowuj�cej tablic� znak�w: Wynik: array[0. .100] of char; Function ZwrocWynik : PChar; Begin Result:= Wynik; End; Problem pojawia si� jednak w momencie wywo�ywania funkcji przy pracy z kilkoma po��czeniami. Wynik zawsze b�dzie wskazywa� na to samo miejsce w pami�ci i w czasie pracy kilku u�ytkownik�w �atwo mo�e doj�� do konfliktu interes�w - co b�dzie zawiera�a zmienna? * Mo�na zmienn� Wynik zadeklarowa� jako zmienn� lokaln� w�tku (threadvar) i rozpoznawa� wtedy, kiedy InterBase tworzy i ko�czy w�tki. Wymaga to napisania cz�ci inicjuj�cej bibliotek� i funkcji wej�cia. * Chyba najprostsz� metod� jest dynamiczne przydzielenie pami�ci dla tekstu i zwr�cenie go do InterBase. Do alokowania pami�ci zaleca si� korzystanie z funkcji ib_util 3_malloc z modu�u ib_utif. Funkcj� wykorzystuj�c� t� technik� nale�y koniecznie zadeklarowa� z klauzul� FREE_IT. Spowoduje to, �e odpowiedzialno�� za zwolnienie pami�ci przejmie InterBase. W starszych wersjach InterBase (przed 5.5) nale�a�o skorzysta� z malloc z biblioteki msvcrt.dll. Ostatni spos�b zostanie pokazany na przyk�adzie funkcji zwracaj�cej fragment �a�cucha znak�w o zadanej d�ugo�ci od podanej pozycji. Przyk�ad: Funkcja Substr1(Tekst, Od, ile) Wymagan� funkcjonalno�� zapewnia w Delphi funkcja Copy. W funkcji b�dzie rezerwowane dok�adnie tyle pami�ci, ile potrzeba na przechowanie wyniku. Nie nale�y zapomina� o znaku ko�ca tekstu #0. Funkcja Substr1 mo�e wygl�da� nast�puj�co: function Substr1 (Tekst: PChar; var Od, ile : integer) : PChar; var S : string; begin S:= Copy (Tekst, Od, Ile); Result:= ib_util_malloc(Length(S) + 1); StrCopy(Result, PChar(S)); end; Do zadeklarowania funkcji w InterBase pos�u�y poni�sze polecenie: DECLARE EXTERNAL FUNCTION F_SUBSTR1 CSTRING(64, INTEGER, INTEGER RETURNS CSTRING(64) FREE_IT ENTRY_POINT 'Substrl� MODULE_NAME 'gawudf.dll'; Jak wida�, jest to bardzo prosta metoda - programista korzystaj�cy z funkcji musi tylko pami�ta� o klauzuli FREE_IT. Przyk�ad: Funkcja Year(Data) Funkcja zwr�ci liczb� ca�kowit� b�d�c� numerem roku znajduj�cego si� w dacie przekazanej w parametrze. W Delphi funkcja b�dzie wygl�da�a nast�puj�co: function Year(var ib_date: Long): Integer; var tm_date: TM; begin isc_decode_sql_date(ib_date.PM(@tm_date)); result:= tm_date.tm_year + 1900; end; W bazie danych deklaracja wygl�da nast�puj�co: DECLARE EXTERNAL FUNCTION F_YEAR DATE RETURNS INTEGER BY VALUE ENTRY_POINT 'Year' MODULE_NAME 'gawudf.dll�: Do przetestowania mo�e pos�u�y� nast�puj�ce zapytanie: select f_Year(cast('7/11/00' as date)) from rdb$database W rezultacie powinni�my otrzyma� 2000. Rozdzia� 3. IBX - InterBase Delphi umo�liwia dost�p do bazy danych na kilka sposob�w. S� to: * ADO, * BDE, * IBX. Pierwsze dwa korzystaj� ze sterownik�w dostarczanych do ka�dej bazy. Natomiast IBX oferuje rodzimy dost�p do InterBase, Daje to najwi�ksz� wydajno�� dost�pu i operacji na bazie kosztem przeno�no�ci oprogramowania. Poni�ej znajduje si� kr�tki opis komponent�w wraz z informacj� o mo�liwo�ci ich zastosowania. W przypadku istotnych w�a�ciwo�ci s� one wymieniane tak�e w komponentach potomnych. TIBDatabase, modu� IBDatabase. Ten komponent jest odpowiedzialny za po��czenie z baz� danych. Wszystkie komponenty dziedzicz�ce po TIBCustomDataSet oraz TIBSQL wykorzystuj� TIBDatabase w celu uzyskania dost�pu do bazy danych. Jest on odpowiednikiem TDatabase z zak�adki Data Access. Aby pod��czy� si� do bazy danych, nale�y we w�a�ciwo�ci Params ustawi� nast�puj�ce parametry: * user_name - nazwa loguj�cego si� u�ytkownika, * password - has�o u�ytkownika, * sql_role_name - nazwa przywileju z jakim loguje si� u�ytkownik, * lc_type - zestaw znak�w wykorzystywany przy po��czeniu. Dla cel�w testowych mo�na te parametry ustawi� w �rodowisku Delphi dwukrotnie klikaj�c komponent. Na poziomie kodu parametry ustawia si� w Params, kt�ra jest typu TStringList. W celu nawi�zania po��czenia z baz� konieczne jest jeszcze ustawienie �cie�ki dost�pu we w�a�ciwo�ci DatabaseName. �cie�ka ta jest bezwzgl�dn� �cie�k� wskazuj�c� na plik z baz� danych. W przypadku zdalnego dost�pu do serwera z wykorzystaniem protoko�u TCP/IP, na pocz�tku �cie�ki nale�y poda� nazw� serwera i dwukropek, np.: * dost�p lokalny: C:\Bazy\baza.gdb, * dost�p zdalny: serwer: C:\Bazy\baza.gdb. Pozosta�e w�a�ciwo�ci Connected - okre�la czy pod��czenie do InterBase jest aktywne, czy nie. Zmiana Connected na True uaktywnia po��czenie, na False - powoduje od��czenie. DefaultTransaction - domy�lna transakcja, z jak� b�d� odbywa� si� operacje na bazie danych, o ile nie okre�lono innej. IdleTimer - czas w milisekundach, po jakim baza danych zostanie od��czona w przypadku, gdy po��czenie nie jest aktywne. Roz��czenie po tym czasie nie wywo�uje zdarze� OnAfterDisconnect i OnBeforeDisconnect. LoginPrompt - okre�la czy ma si� pojawia� standartowe okienko logowania. SQLDialect - zwraca dialekt SQL-a wykorzystywany przez klienta. Realnie nie mo�na skorzysta� z wi�kszego ni� dialekt bazy danych. TraceFlags - umo�liwia wyb�r operacji, kt�re maj� by� �ledzone przy pomocy SQL Monitora w trakcie ich wykonywania. Zdarzenia OnAfterConnect, OnAfterDisconnect, OnBeforeConnect, OnBeforeDisconnect - s� to zdarzenia wywo�ywane odpowiednio po (przed) pod��czeniem (od��czeniem) od bazy danych. OnDialectDowngradeWarning - zdarzenie wywo�ywane jest, je�li dialekt aplikacji jest ustawiony na wi�ksz� warto�� ni� dialekt bazy danych. OnIdleTimer - je�li minie czas okre�lony w IdleTimer, wywo�ywane jest zdarzenie OnIdleTimer. OnLogin - wyst�puje w momencie pod��czenia do bazy danych. W parametrze Login Params przekazywane s� user_name i password pobrane z Params komponentu. Ko�cz�c obs�ug� zdarzenia, nale�y w LoginParams ustawi�, w razie potrzeby, odpowiednie warto�ci tych parametr�w. Mo�na umie�ci� tutaj wywo�anie np. w�asnego okienka logowania. LoginPrompt musi by� ustawione na True. Wa�ne metody AddTransaction(TR: TIBTransaction) - pod��cza kolejny komponent transakcji do bazy danych. ApplyUpdates(const DataSets: array of TDataSet) - jako parametr podajemy list� komponent�w potomnych TDataset. Metoda zapisuje zmiany z bufor�w do bazy danych. Wywo�anie tej metody ma znaczenie wtedy, gdy odpowiedni komponent zawieraj�cy dane1 ma ustawiona w�a�ciwo�� CachedUpdates na True, CloseDataSets - zamyka wszystkie zbiory danych pod��czone do tego komponentu bez zako�czenia po��czenia z baz� danych. CreateDatabase - tworzy baz� danych na podstawie parametr�w ustawionych w Params i DatabaseName. Funkcjonalnie odpowiada to wykonaniu polecenia SQL-a Create Database DropDatabase - usuwa ca�kowicie baz� danych z serwera. FlndTransaction(TR: TIBTransaction): Integer - zwraca indeks transakcji TR pod��czonej do bazy danych. ForceClose - wymusza zako�czenie po��czenia z baz� danych. GetFieldNames(const TableName: string; List: TStrings) - dla zadanego pierwszego parametru TableName zwraca w List list� p�l dla danej tabeli. GetTableNames(List: TStrings; SystemTables: Boolean = False) � zwraca w List list� tabel w bazie danych. Parametr SystemTables okre�la, czy maj� by� zwr�cone nazwy tabel systemowych2. IndexOfDBConst(st: String): Integer - funkcja podaje jako rezultat indeks parametru okre�lonego jako st z listy Params. Je�li parametr nie jest znany, wynikiem jest -l. RemoveTransaction(Idx: Integer) - od��cza komponent transakcji o podanym indeksie od bazy danych. RemoveTransactions - od��cza wszystkie transakcje od bazy danych. TestConnected - zwraca True, je�li komponent jest po��czony z baz� danych. Je�li w�a�ciwo�� Connected jest ustawiona na True, to nast�puje pr�ba pobrania informacji z serwera, aby sprawdzi� aktywno�� po��czenia. Komentarz Komponent TIBDatabase powinien by� wykorzystywany pojedynczo na ka�de niezb�dne po��czenie z baz� danych. Ze wzgl�du na raczej globalny (dla aplikacji) charakter TIBDatabase, najlepiej jest umie�ci� go w module zawieraj�cym dane3. Dobrze jest podobnie post�pi� z domy�ln� transakcj� dla bazy danych - umie�ci� jaw globalnie dost�pnym module. TIBTransaction, modu� IBDatabase Komponent ten pozwala na kontrolowanie transakcji w jednej lub wi�cej bazach danych. Nie ma on swojego odpowiednika w komponentach opartych na BDE. Wszystkie komponenty pracuj�ce na danych musz� wykorzystywa� TIBTransaction. Je�li nie b�d� mia�y okre�lonej swojej transakcji, to b�d� korzysta�y z tej, kt�ra jest ustawiona jako DefaultTransaction komponentu TIBDatabase, InterBase pozwala na wygodne przeprowadzanie kilku transakcji w ramach pojedynczego po��czenia. W�a�ciwo�ci Active - okre�la czy transakcja jest aktywna i pozwala na zmian� jej stanu. DatabaseCount - przechowuje liczb� baz danych bior�cych udzia� w transakcji. Databases - zwraca baz� danych (TIBDatabase) o zadanym indeksie zwi�zan� z danym komponentem. DefaultAction - okre�la akcj� wykonywan�, gdy sko�czy si� czas przeznaczony na transakcj� okre�lony w IdleTimer. Mo�liwo�ci s� nast�puj�ce: * taRollback - cofa transakcj�, * taCommit - zatwierdza transakcj� (domy�lne), * taRollbackRetaining - cofa transakcj� z zachowaniem kontekstu, * taCommitRetaining - zatwierdza transakcj� z zachowaniem jej kontekstu. DefaultDatabase - pozwala na ustawienie b�d� pobranie domy�lnej bazy danych zwi�zanej z transakcj�. IdleTimer - okre�la czas bezczynno�ci, po jakim transakcja powinna automatycznie wykona� domy�ln� akcj� (zapisanie b�d� cofni�cie zmian) ustawion� w DefaultAction. InTransaction - zwraca informacj�, czy transakcja jest w trakcie wykonywania. Stan w�a�ciwo�ci zmienia na True wywo�anie metody StartTransaction, natomiast wywo�anie Commit b�d� Rollback przestawia go na False. Params - lista parametr�w transakcji. Tutaj nale�y ustawi� poziom izolowania transakcji, kt�ry mo�e by� nast�puj�cy: * Snapshot - pozwala na odczyt z bazy danych bez prawa zapisu w kontek�cie danej transakcji, * ReadCominitted - umo�liwia transakcji odczyt zmian zatwierdzonych przez inne transakcje. Nie zatwierdzone zmiany pozostaj� niewidoczne. Zdarzenia OnIdleTimer - zdarzenie wywo�ywane po tym, gdy czas bezczynno�ci transakcji przekroczy czas ustawiony w IdleTimer. Wa�ne metody AddDatabase(db: TIBDatabase) - dodaje do transakcji po��czenie z baz� danych. Commit - wykonuje zatwierdzenie i zako�czenie transakcji. Wszelkie zmiany w rekordach, nowe rekordy i rekordy skasowane od momentu wywo�ania StartTransaction zostaj� zapisane na sta�e w bazie danych. Przed wywo�aniem Commit dobrze jest sprawdzi� przy pomocy InTransaction, czy transakcja jest w toku. Je�li nie jest, to Commit zg�osi wyj�tek. CommitRetaining - zatwierdza transakcj� i zachowuje jej kontekst. Funkcjonalnie wygl�da to na zatwierdzenie i nie zamkni�cie zbioru danych. Z CommitRetaining nale�y korzysta� z rozwag�, gdy� zwi�ksza si� ilo�� pami�ci u�ywanej na serwerze. FindDatabase(db: TIBDatabase): Integer - zwraca numer indeksu bazy danych podanej jako parametr. RemoveDatabase (Idx: Integer) - od��cza od transakcji baz� danych o podanym numerze. RemoveDatabases - od��cza wszystkie bazy danych od transakcji. Rollback - cofa wszelkie zmiany wykonane w bazie danych od momentu wywo�ania StartTransaction. Przed wywo�aniem Rollback dobrze jest sprawdzi� stan transakcji przy pomocy InTransaction. Je�li transakcja nie jest w toku, to wywo�anie Rollback zg�osi wyj�tek. RollbackRetaining - cofa wszelkie zmiany wykonane w bazie danych od momentu wywo�ania StartTransaction z zachowaniem kontekstu transakcji. StartTransaction - rozpoczyna now� transakcj� na serwerze. Je�li transakcja jest ju� w toku, to wywo�anie tej metody zg�osi wyj�tek. Komentarz W przypadku TIBTransaction, wygodnie jest umie�ci� komponent odpowiedzialny za domy sin� transakcj� w tym samym module co g��wny komponent TIBDatabase. W przypadku pozosta�ych, najlepiej jest umie�ci� je razem z komponentami TIBQuery itp. Umieszczaj�c je razem na jednym formularzu b�d� w ramce4, mo�na stworzy� repozytorium �atwe do wykorzystania. Rozpocz�ciu modyfikacji danych powinno towarzyszy� rozpocz�cie transakcji np.: TForml.ButtonDeleteClIcktSender: TObject); Begin with IBTransaction1 do if not InTransaction then StartTransaction; IBTable1.Delete; end. Daj�c u�ytkownikowi do dyspozycji przycisk Zapisz zmiany, wystarczy wywo�a� metod� Commit dla transakcji. Pisz�c aplikacje wykorzystuj�ce technologi� MIDAS, nale�y do ka�dego zapytania wykorzystywa� osobn� transakcj�. TIBStoredProc, modu� IBStoredProc Ten komponent pozwala na wykorzystanie procedur sk�adowanych w bazie danych. Idealnie nadaje si� do obs�ugi procedur wywo�ywanych przez Execute. W przypadku tych procedur, kt�re zwracaj� zbiory danych (Select), nale�y skorzysta� z TIBQuery lub TIBDataSet. Parametry przekazywane do procedury i zwracane przez ni� wymienia si� we w�a�ciwo�ci Params. W�a�ciwo�ci Database - okre�la komponent bazy danych zawieraj�cy procedur�. ParamCount - zwraca liczb� parametr�w procedury. Params - przechowuje parametry wej�ciowe i wyj�ciowe procedury. Nale�y z niej skorzysta� wtedy, gdy chcemy ustawi� warto�ci wej�ciowe. Po wywo�aniu ExecProc, w razie potrzeby mo�na z niej pobra� warto�ci parametr�w wyj�ciowych. Prepared - okre�la czy procedura jest przygotowana, czy nie. Procedura musi by� przygotowana przed jej wykonaniem. InterBase automatycznie wykonuje operacj� przygotowania, je�li programista sam tego nie zrobi�. Dobr� praktyk� jest samodzielne wywo�ywanie metod Prepare i Unprepare. Przestawiaj� one w�a�ciwo�� Prepared w odpowiedni stan. StoredProcedureNames - przechowuje list� procedur sk�adowanych na serwerze jako TStringList. StoredProcName - nazwa procedury zwi�zanej z tym komponentem. Je�li nazwa nie odpowiada �adnej z procedur dost�pnych w bazie danych, to przed jej wykonaniem zostanie zg�oszony wyj�tek. Transaction - wskazuje na komponent transakcji wykorzystywany przez procedur�. Zdarzenia AfterDatabaseDisconnect - zdarzenie wywo�ywane po roz��czeniu z baz� danych AfterTransactionEnd - zdarzenie wywo�ywane po zako�czeniu transakcji zwi�zanej z procedur�. BeforeDatabaseDisconnect - zdarzenie wywo�ywane tu� przed roz��czeniem z baz� danych. BeforeTransactionEnd - zdarzenie wywo�ywane tu� przed zako�czeniem transakcji zwi�zanej z procedur�, DatabaseFree - zdarzenie wywo�ywane po tym, gdy baza danych zostanie usuni�ta z pami�ci. TransactionFree - zdarzenie wywo�ywane po tym, gdy transakcja zostanie zwolniona z pami�ci. Wa�ne metody CopyParams(Value: TParams) - kopiuje parametry mi�dzy zmiennymi typu TParams. Mo�e by� wykorzystywana do kopiowania warto�ci parametr�w pomi�dzy procedurami. ExecProc - wykonuje procedur� sk�adowan� na serwerze. Przed wywo�aniem metody nale�y ustawi� wymagane parametry wej�ciowe przy pomocy w�a�ciwo�ci Params i wywo�a� metod� Prepare. Po wywo�aniu ExecProc parametry wyj�ciowe (je�li s�) mo�na odczyta� z Params. W�a�ciwo�ci dost�pne s� wed�ug kolejnych numer�w b�d� przy pomocy funkcji ParamByName. ParamByName(const Value: string): TParam - zwraca parametr o zadanej nazwie. Aby uzyska� dost�p do warto�ci parametru, nale�y skorzysta� z AsInteger, AsString itp. Prepare - przygotowuje procedur� do wykonania. Wywo�anie tej metody spowoduje zwi�zanie parametr�w procedury i nast�pnie alokacj� zasob�w na serwerze. Pozwala to na zoptymalizowanie wykonywanych operacji. Unprepare - zwalnia zasoby zaalokowane na serwerze i kliencie podczas przygotowania procedury. TIBTable, modu� IBTable Ten komponent pozwala na uzyskanie dost�pu do pojedynczej tabeli b�d� perspektywy. Funkcjonalnie odpowiada to zastosowaniu zapytania Select * From <nazwa>. Zestaw rekord�w mo�na ograniczy� wykorzystuj�c filtry (w�a�ciwo�ci Filter i Filtered lub zdarzenie OnFilterRecord). Poniewa� TIBTable jest ma�o elastyczne, lepiej jest pracowa� z TIBQuery lub TIBDataset. W�a�ciwo�ci Active - jak to jest w przypadku wszystkich zbior�w rekord�w, okre�la czy jest on otwarty. BufferChunks - okre�la warto��, o jak� b�dzie zwi�kszany bufor (w liczbie wierszy). Dotyczy trybu CachedUpdates. CachedUpdates - umo�liwia w��czenie trybu CachedUpdates (buforowane uaktualnienia). Je�li ten tryb pracy jest w��czony, to wszystkie modyfikacje wierszy, kasowanie i wstawianie odbywaj� si� w buforze po stronie aplikacji klienta. Po zako�czeniu pracy wszystkie zmiany mog� zosta� wys�ane na serwer w ramach jednej transakcji. Constraints - opis wi�z�w integralno�ci na poziomie rekordu. Tutaj mo�na utworzy� wi�zy bazuj�ce na warto�ciach kilku p�l. W razie wyst�pienia potrzeby wykorzystania wi�z�w na poziomie pojedynczej kolumny, nale�y je stworzy� w odpowiednim komponencie TField. DefaultIndex - pokazuje czy po otwarciu tabeli wiersze maj� by� posortowane przy u�yciu domy�lnego indeksu, czy nie. Domy�lnie jest ustawiona warto�� True - w zapytaniu b�dzie dodana klauzula ORDER BY po kluczu g��wnym. Exists - ta w�a�ciwo�� decyduje czy dana tabela istnieje w bazie danych. Je�li jest False, to na podstawie definicji p�l zawartych w FieldsDef metoda Create Table utworzy tabel�. Filter - przechowuje warunek okre�laj�cy, kt�re wiersze maj� znale�� si� w zbiorze danych. Sk�adnia dla tego warunku jest bardzo podobna do wyra�enia wyst�puj�cego w klauzuli WHERE, Mo�na korzysta� ze znak�w specjalnych SQL-a, takich jak '%' czy '_' przy korzystaniu z warunku LIKE, np. Filter := 'Country Like "P*" '; Chc�c sprawdza� warto�ci na okoliczno�� wyst�pienia warto�ci NULL, nale�y skorzysta� z IS: Filter := 'Country IS NOT NULL�; Filtered - okre�la czy filtr jest aktywny. Prze��cza stan korzystania z filtru we w�a�ciwo�ci Filtered i obs�udze zdarzenia OnFilterRecord. ForcedRefresh - okre�la czy dane maj� by� od�wie�one po wykonaniu zapisu (metoda Post), czy nie. IndexDefs -przechowuje informacje o definicjach indeks�w tabeli w formie tablicy. IndexFieldCount - liczba p�l sk�adaj�cych si� na obecny klucz. IndexFieldNames - przechowuje list� p�l, kt�re maj� by� wykorzystane przez indeks. Nazwy p�l rozdzielane s� �rednikami. Ustawienie tej w�a�ciwo�ci czy�ci Index Name. IndexFields - pozwala na odczyt lub ustawienie p�l wykorzystywanych w kluczu. Tablica przechowuje komponenty typu TField. IndexName - okre�la indeks wykorzystywany w tabeli. Je�li w�a�ciwo�� nie jest zdefiniowana, to do okre�lenia sortowania wierszy wykorzystywany jest klucz g��wny. MasterFields - przechowuje list� p�l z tabeli nadrz�dnej wykorzystywanych przy tworzeniu relacji master-detail mi�dzy tabelami. T� w�a�ciwo�� nale�y zdefiniowa� po wype�nieniu MasterSource. MasterSource - przechowuje DataSource zwi�zan� z tabel� nadrz�dn� przy korzystaniu z relacji master-detail. ReadOnly - okre�la czy tabela ma zosta� otwarta w trybie tylko do odczytu. StoredDefs - ustawiona na True oznacza, �e definicje p�l z FieldDefs i indeks�w z IndexDefs wype�nione przy projektowaniu aplikacji maj� zosta� zapisane razem z modu�em b�d� form�. Pozwoli to na tworzenie tabeli w bazie danych przez proste wywo�anie metody CreateTable. TableName - przechowuje nazw� tabeli lub perspektywy reprezentowanej przez ten komponent. TableNames - przechowuje list� tabel i perspektyw dost�pnych w bazie danych. UniDirectional - okre�la czy dla danej tabeli uaktywnione s� kursory dwukierunkowe. Je�li w�a�ciwo�� ma warto�� True, to mo�liwe jest poruszanie si� po zbiorze danych w dw�ch kierunkach. UpdateObject - przechowuje wska�nik do komponentu typu TIBUpdateSQL. Ten komponent pozwali na aktualizowanie danych, kt�re s� zwracane jako tylko do odczytu, lub w trybie CachedUpdates. Zdarzenia W komponencie TIBTable wprowadzane s� te same zdarzenia, kt�re zosta�y wymienione podczas omawiania komponentu TIBStoredProc. Poza tym komponent ten dziedziczy standartowe zdarzenia komponentu TDataset. Wa�ne metody AddIndex(const Name, Fields: string; Options: TIndexOptions const DescFields: string = ' ') - tworzy nowy indeks o podanej nazwie. Na klucz sk�adaj� si� pola z Fields porozdzielane �rednikami. Opcje okre�laj� czy indeks ma utworzy� klucz g��wny (ixPrimary), czy unikalny (ixUnique). CreateTable - tworzy now� tabel� w bazie danych na podstawie informacji zawartych w FleldDefs i IndexDefs. Deletelndex(const Name: string) - kasuje indeks o podanej nazwie. DeleteTable - usuwa tabel� ze wszystkimi danymi z bazy. Tabela musi by� zamkni�ta. EmptyTable - usuwa wszystkie wiersze z tabeli (je�li u�ytkownik posiada odpowiednie uprawnienia). GetIndexNames(List: TStrings) - zwraca list� nazw indeks�w tabeli. GotoCurrent(Tble: TIBTable) - synchronizuje pozycj� bie��cego rekordu tabeli z rekordem z tabeli podanej jako parametr. Warto�ci w�a�ciwo�ci Database i TableName dla obu komponent�w powinny by� identyczne, w przeciwnym razie zostanie zg�oszony wyj�tek. Metoda mo�e by� u�yteczna w sytuacji, gdy w aplikacji s� dwa komponenty odwo�uj�ce si� do tej samej tabeli. TIBQuery, modu� IBQuery TIBQuery jest funkcjonalnym odpowiednikiem komponentu TQuery. Wykonuje on zapytanie SQL-a przechowywane we w�a�ciwo�ci SQL. Mog� by� to zapytania zwracaj�ce dane (SELECT) lub modyfikuj�ce tabel� (DELETE, INSERT, UPDATE). Wy�szo�� tego komponentu nad TIBTable polega na mo�liwo�ci uzyskania dost�pu do kilku tabel z jednego zapytania (z��czenia) i automatycznego dodania warunk�w ograniczaj�cych liczb� zwracanych wierszy i kolumn. W�a�ciwo�ci Active - okre�la czy zapytanie jest otwarte (aktywne). BufferChunks - okre�la warto��, o jak� b�dzie zwi�kszany bufor (w liczbie wierszy). Dotyczy pracy w trybie CachedUpdates. CachedUpdates - pozwala na w��czenie trybu CachedUpdates (buforowane uaktualnienia). Je�li ten tryb pracy jest w��czony, to wszystkie modyfikacje wierszy, kasowanie i wstawianie odbywaj� si� w buforze po stronie aplikacji klienta. Po zako�czeniu pracy wszystkie zmiany mog� zosta� wys�ane na serwer w ramach jednej transakcji. Constraints - opis wi�z�w integralno�ci na poziomie rekordu. Tutaj mo�na utworzy� wi�zy bazuj�ce