[ Pobierz całość w formacie PDF ]
typu wariantowego Delphi. Ten sam podprogram można zatem zapisać prościej:
940
{Object Pascal}
Procedure DebugMsg(p1 : variant);
begin
ShowMessage('KOMUNIKAT KONTROLNY='+p1);
end;
DebugMsg(['POCZTEK PTLI']);
DebugMsg([4]);
VarType
Aby uzyskać informację o rzeczywistym typie zmiennej wariantowej, można
posłużyć się funkcją VarType. W tabeli A.23 zebrano możliwe wartości
wynikowe tej funkcji.
Tabela A.23. Wartości zwracane przez funkcję VarType.
Identyfikator Wartość
varEmpty $0000
varNull $0001
varSmallint $0002
varInteger $0003
varSingle $0004
vrDouble $0005
varCurrency $0006
varDate $0007
varOleStr $0008
varDispatch $0009
varError $000A
varBoolean $000B
varVariant $000C
varUnknown $000D
varByte $0011
varString $0100
varTypeMask $0FFF
varArray $2000
varByRef $4000
941
Wyszukiwanie w tabelach poindeksowanych
Odpowiednikiem znanego z Xbase polecenia SEEK jest w Delphi metoda LookUp
komponentu DataSet. Jednym z jej argumentów jest właśnie tablica wariantowa, której
zastosowanie omawiano w poprzednim punkcie. Poniższa przykładowa instrukcja
wyszukuje rekord w poindeksowanej tabeli, skojarzonej z komponentem Table1.
Table1.LookUp( Nazwisko ,VarArrayOf([ KOWALSKI, JAN ]),
[foCaseInsensitive]);
Wyszukiwanie w tabelach nieindeksowanych
Metody LookUp i Locate, dostępne w Delphi, mogą również wykonywać
najprostszą operację wyszukiwania - w dialektach Xbase realizowaną poleceniem
LOCATE. Podobnie jak LOCATE, wspomniane metody działają niezależnie od
tego, czy tabela jest, czy też nie jest poindeksowana. Jednak w przeciwieństwie do
polecenia Xbase, LookUp i Locate korzystają z indeksu, jeśli jest on dostępny.
Dzięki temu w każdym przypadku można uzyskać maksymalną wydajność
wyszukiwania, nie tracąc przy tym nic z elastyczności.
Filtry
Mechanizm filtrowania bez użycia indeksu, analogiczny do realizowanego przez
SET FILTER TO, dostępny jest w Delphi za pośrednictwem filtrów lokalnych.
Aby uaktywnić filtr należy wpisać odpowiednie wyrażenie do pola atrybutu Filter,
a następnie przypisać wartość True atrybutowi Filtered komponentu DataSet.
Do filtrowania wierszy można też wykorzystać zdarzenie OnFilterRecord,
skojarzone z komponentem DataSet.
Iteracyjne przetwarzanie tabeli
Delphi jest środowiskiem programowania wizualnego, dlatego konieczność
iteracyjnego przetwarzania tabeli zachodzi tutaj znacznie rzadziej, niż
w programach tworzonych przy użyciu narzędzi Xbase. Jednak w niektórych
sytuacjach nie da się uniknąć przetwarzania danych rekord po rekordzie, dlatego
poniżej porównamy odpowiednie metody postępowania w środowiskach Xbase
i w Object Pascalu.
Aby uzyskiwać dostęp do kolejnych rekordów w tabeli w języku Xbase stosuje się
konstrukcję zbliżoną do następującej:
USE C:\DATA\DELPHI\WORKORD\INVENT INDEX INVENT
SET ORDER TO INVNUM
GO TOP
DO WHILE .NOT. EOF()
SKIP
942
ENDDO
USE
UWAGA:
Najnowsze wersje wielu dialektów Xbase oferują konstrukcję
SCAN...ENDSCAN, która działa podobnie do pętli, przedstawionej powyżej,
i jest ogólnie szybsza.
Iteracyjne przetwarzanie tabeli w Object Pascalu realizuje się tak:
With Table1 do begin
Open; {Zakładamy, że komponent jest przygotowany do
użycia}
While not Eof do Next;
Close;
end;
Program w Delphi jest prostszy, gdyż nawet wówczas, gdy dane przetwarzane są
w programie rekord po rekordzie, większość czynności wstępnych da się
zrealizować w środowisku programowania wizualnego, w oknie Form Designer.
W szczególności można w ten sposób określić położenie katalogu i nazwę pliku
tabeli, identyfikator indeksu, itd. Wcześniejsze nadanie wartości True atrybutowi
Active komponentu Table wyeliminowałoby nawet konieczność otwierania
tabeli w czasie wykonywania programu.
Zapis w pliku tekstowym
Zapis w pliku tekstowym w środowisku Xbase wymaga kilku dodatkowych
zabiegów i odbywa się nie wprost, co ilustruje poniższy przykład:
SET ALTE TO "PLIK.TXT"
SET ALTE ON
SET CONS OFF
? "Napis w pliku"
SET CONS ON
SET ALTE OFF
SET ALTE TO
W Delphi ten sam efekt osiągnąć można wieloma innymi, lepszymi sposobami. Po
pierwsze, niemal wszystkie kontrolki, w których przechowywane są wiersze tekstu
lub lista elementów, oferują specjalną metodę SaveToFile, która zapisuje
aktualną zawartość komponentu na dysk. Na przykład, aby zapisać zawartość
komponentu TMemo, należy użyć następującego wywołania:
Memo1.Lines.SaveToFile('PLIK.TXT');
W wyniku wywołania metody SaveToFile wszystkie wiersze tekstu, przechowywane
w komponencie Memo1, zostaną zapisane we wskazanym pliku tekstowym.
943
Do zapisu danych w pliku tekstowym można również użyć procedur obsługi
plików, dostępnych w języku Object Pascal. Tym razem odpowiedni fragment
programu bardziej przypomina analogiczny przykład w języku rodziny Xbase:
const
Napis : String = 'Napis w pliku';
var
F:TextFile;
begin
AssignFile(F,'PLIK.TXT');
Rewrite(F);
try
writeln(F, Napis);
finally
CloseFile(F);
end;
end;
Należy zwrócić uwagę na mechanizm obsługi wyjątków, zastosowany
w programie, napisanym w Object Pascalu. Instrukcja po słowie finally wykonana
zostanie niezależnie od tego, czy zapis w pliku powiódł się, czy nie. Program staje
się przez to bardziej odporny na błędy wejścia-wyjścia i (w opinii autora) bardziej
czytelny niż odpowiedni fragment w języku Xbase.
Wnioski
Przejście ze środowiska Xbase na Delphi nie powinno nastręczyć wielu trudności,
mimo że oba narzędzia oferują często całkowicie odmienne metody rozwiązywania
typowych zadań, występujących przy tworzeniu aplikacji obsługi baz danych.
Delphi zapewnia większą niż narzędzia Xbase wydajność tworzonych aplikacji
i pozwala na skrócenie czasu przygotowania oprogramowania. Stwierdzenie to
pozostanie prawdziwe nawet wówczas, gdy do porównania wybierzemy najlepsze
spośród dostępnych obecnie narzędzi z rodziny Xbase.
Podstawowym problemem, jaki mogą napotkać programiści Xbase,
rozpoczynający pracę z Delphi, jest konieczność rezygnacji z niektórych
wygodnych rozwiązań, specyficznych dla języków interpretowanych, np. bloków
instrukcji, na rzecz ich strukturalnych odpowiedników Object Pascalu. Przejście
od stosunkowo mało ustrukturalizowanego języka do Pascala, który narzuca ścisłe
reguły projektowania programu, może być początkowo męczące, jednak jakość
uzyskanych aplikacji z nawiązką wynagradza włożony wysiłek. W Delphi można
zjeść ciastko i nadal je mieć . Aplikacje działają szybko, jak przystało na
programy wynikowe w zoptymalizowanym kodzie maszynowym. Jednocześnie
nadal mogą korzystać ze struktur plików i formatów baz danych, używanych
w środowisku Xbase.
[ Pobierz całość w formacie PDF ]
© 2009 Nie chcę już więcej kochać, cierpieć, czekać ani wierzyć w rzeczy, których nie potwierdza życie. - Ceske - Sjezdovky .cz. Design downloaded from free website templates