Promotic
WikipediaLinkedInYoutubeTwitterFacebook

Opis pracy z obiektem PmaDatabase pracującym z istniejącą tabelą

 

1. Podłączenie i otwarcie tabeli w bazie danych

Podłączeniem do bazy danych jest podłączona baza danych określona w konfiguratorze "Baza danych (plik, folder, źródło danych)". Do bazy danych można można się podłączyć przy uruchamianiu aplikacji (konfigurator "Podczas startu" jest ustawiony na "Podłącz bazę danych i otwórz tabelę (tak samo jak metoda Open)" lub "Podłącz bazę danych i NIE otwieraj tabeli (tak samo jak metoda Connect)") lub kiedykolwiek później przez wywołanie metody PmaDatabase.Connect. Operacja ta jest szybsza niż otwarcie tabeli.

Otwarciem tabeli jest wykonane powyżej opisane podłączenie do bazy danych i w dodatku zostaje otwarta tabela określona w konfiguratorze "Tabela (plik)". Otworzyć tabelę można po uruchomieniu aplikacji (konfigurator "Podczas startu" jest ustawiony na opcję 'podłączyć do bazy danych i otworzyć tabelę) lub kiedykolwiek później przez wywołanie metody PmaDatabase.Open. Operacja ta jest wolniejsza niż podłączenie do bazy danych. Tabelę można otworzyć w trybie umożliwiającym "do odczytu i zapisu", "tylko do odczytu", itd., patrz na przykład konfigurator "Sposoby otwarcia tabeli" (ustawienie to także wpływa na szybkość otwarcia).

Przy pomocy konfiguratorów zakładki "Baza danych" można określić tabelę i sposób jej otwarcia. Konfigurator "Otwórz tabelkę przy pomocy polecenie SQL SELECT" określa, czy tabela jest otworzona według wpisanego polecenia SQL typu SELECT, w innym przypadku jest otworzona według konfiguratora "Tabela (plik)".

 
Sposób wprowadzania pleceń SQL jest zależny od ustawienia konfiguratora "Technologia":
- jeżeli jest ustawiony na Dostęp przez ODBC, wtedy ewentualne polecenia SQL wprowadza się w składni języka SQL tej bazy danych, do której jest podłączony obiekt PmaDatabase.
- jeżeli jest ustawiony na Bezpośredni dostęp do tabeli - DAO, wtedy jest konieczne wprowadzanie poleceń SQL w składni Microsoft wspieranej w systemie PROMOTIC; różnice są jednak minimalne - patrz dalej.
 

Uwaga!!! - wspierana implementacja SQL różni się od ANSI SQL w składni polecenia Like następująco:

ANSI SQL wspierana implementacja SQL
_ ?
% *
 

oraz w składni polecenia WHERE w określaniu daty i czasu następująco:

ANSI SQL wspierana implementacja SQL
WHERE ... '25 10 2002 12:22:30' ... WHERE ... #10 25 2002 12:22:30# ...
Przykład1:
(składnia Microsoft w systemie PROMOTIC) wybór wszystkich kolumn w tabeli o nazwie "Table", gdzie wartości w kolumnie "column1" znajdują się w przedziale od 10 do 100.
SELECT * FROM Table WHERE column1 BETWEEN 10 AND 100
Przykład2:
(składnia Microsoft w systemie PROMOTIC) wybór kolumn "column1" oraz "column2" w tabeli o nazwie "Table", gdzie wartości w kolumnie "column1" są większe niż 10.
SELECT column1, column2 FROM Table WHERE column1 > 10
Przykład3:
(składnia Microsoft w systemie PROMOTIC) wybór wszystkich kolumn w tabeli o nazwie "Table", gdzie wartości w kolumnie "Time" znajdują się w określonym przedziale. Czas jest wprowadzony w formacie: #miesiąc dzień rok godzina:minuta:sekunda#.
SELECT * FROM Table WHERE Time BETWEEN #12 25 2020 23:53:30# AND #12 25 2020 23:55:30#
Przykład4:
(składnia Microsoft w systemie PROMOTIC) wybór kolumn "column1" oraz "column2" w tabeli o nazwie "Table", gdzie wartości w kolumnie "column1", która jest typu String, mają na początku (rozpoczynają się) znaki od "A" do "D".
SELECT column1, column2 FROM Table WHERE column1 LIKE '[A-D]*'
Przykład5:
(składnia Microsoft w systemie PROMOTIC) wybór wszystkich kolumn w tabeli o nazwie "Table", gdzie wartości w kolumnie "Time" znajdują się w określonym przedziale i są usortowane według tej kolumny. Czas jest wprowadzony w formacie: #miesiąc dzień rok godzina:minuta:sekunda#.
SELECT * FROM Table WHERE Time BETWEEN #12 25 2020 23:53:30# AND #12 25 2020 23:55:30# ORDER BY Time

2. Praca z tabelą

Jeżeli baza danych jest podłączona, wtedy można z nią pracować przy pomocy poleceń SQL (metody PmaDatabase.Execute, PmaDatabase.ExecuteSQL) i można zastosować metody ExistTable, DeleteTable, Create, CreateField, CreateIndex, CreateEnd. Pozostałe metody nie działają, ponieważ tabela nie jest otwarta.

Jeżeli jest tabela otwarta, wtedy można z podlączoną bazą danych pracować przy pomocy poleceń SQL a w dodatku działają wszystkie pozostałe metody.

Wskaźnik (pozycja bieżąca) jednoznacznie określa rekord tabeli, z którym będą pracować metody obiektu PmaDatabase. Jeżeli nie jest ustawione, wtedy metody pracujące z rekordem w tabeli zakończą się błędem. Jeżeli na przykład jest konieczny zapis wartości do pewnego rekodu, wtedy jest konieczne uprzednie przesunięcie wskaźnika na dany rekord i dopiero potem wykonaź zapis do rekordu. Uwaga! - po otwarciu tabeli wskaźnik nie jest zinicjalizowany (jeżeli wskaźnik nie jest ważny, wtedy metody do zapisu i odczytu danych nie powiodą się).

Wskażnik rekordu tabeli jest przesuwany przez wywołanie metody PmaDatabase.Move, PmaDatabase.MoveTo, itd. lub PmaDatabase.FindFirst, itd.

Testy, czy wskaźnik znajduje się na początku lub na końcu tabeli można wykonać przy pomocy metod PmaDatabase.IsBOF, PmaDatabase.IsEOF.

Odczytać wartość z tabeli można przy pomocy właściwości PmaDatabase.FieldValues. Zapis wartości do rekordu w tabeli można wykonać przy pomocy właściwości PmaDatabase.FieldValues lub przy pomocy metody PmaDatabase.SetRecordValueNull. Jeżeli jest konieczne zapis wyłączznie jednej wartości do rekordu, wtedy wykorzystuje się bezpośrednio właściwość PmaDatabase.FieldValues (PmaDatabase.SetRecordValueNull). Jeżeli jest konieczne zapis większej ilości wartości do rekordu, wtedy jest lepszym i szybszym następujący sposób:

1. wywołanie metody PmaDatabase.Edit.
2. powtórne zapisywanie do właściwości PmaDatabase.FieldValues (tym sposobem jest przygotowany bufor, lecz dane w tabeli nie są jeszcze zmienione).
3. dopiero przez wywołanie metody PmaDatabase.Update jest wykonany zapis do bazy danych.
 
Dodanie pustego rekordu jest możliwe przy pomocy metody PmaDatabase.AddNew. Do dodania zinicjalizowanego rekordu można zastosować metodę PmaDatabase.Add:
1. wywołanie metody PmaDatabase.Add.
2. powtórne zapisywanie do właściwości PmaDatabase.FieldValues (tym sposobem jest przygotowany bufor, lecz dane w tabeli nie są jeszcze zmienione).
3. dopiero przez wywołanie metody PmaDatabase.Update jest wykonany zapis do bazy danych

Do usunięcia rekordu można zastosować metodę PmaDatabase.Delete. Do wyszukiwania rekordu w tabeli można zastosować metodę PmaDatabase.FindFirst,... (powyższe metody nie funkcjonują, jeżeli konfigurator "Technologia" jest ustawiony na Dostęp przez ODBC).

 
Z tabelą można pracować również przy pomocy przetwarzania transakcyjnego. Przetwarzanie transakcyjne jest przetwarzaniem wsadowym (zadanie wsadowe jest wykonane w całości lub nie jest wykonane w ogóle). Zasada jest następująca. Najpierw jest konieczne wołanie metody PmaDatabase.BeginTrans. Od tej chwili wszystkie operacje, które zmieniają daną bazę danych czy tabelę są obserwowane. Dopiero po wywołaniu metody PmaDatabase.Commit wszystkie zmiany, wykonane od poprzedniego wywołania metody PmaDatabase.BeginTrans, pozostaną w mocy. Jeżeli nie dojdzie do wywołania metody PmaDatabase.Commit (np. z powodu zakończenia uruchomionej aplikacji, braku zasilania - reset czy też wywołania metody PmaDatabase.Close), wtedy wszystkie zmiany wykonane od uprzedniego PmaDatabase.BeginTrans nie zostaną wykonane. Przy przetwarzaniu transakcyjnym można zastosować metodę PmaDatabase.RollBack. Metoda ta zwraca wszystkie zmiany w tabeli do stanu podczas uprzedniego wywołania metody PmaDatabase.BeginTrans. Jeżeli więc zostanie wywołana metoda PmaDatabase.BeginTrans przetwarzania transakcjynego, następnie będą wykonywane dowolne zmiany (które zostały by w mocy dopiero po wywołaniu metody PmaDatabase.Commit) i zostanie wywołana metoda PmaDatabase.RollBack, wtedy nie dojdzie do żadnej zmiany tabeli w bazie danych.

Uwaga: Przetwarzanie transakcyjne może nie być wspierane przez niektóre bazy danych, na przykład bazy danych Excel, dBase, PARADOX, podstawowa wersja bazy danych MySQL, itd.

 
Do masowej pracy z tabelami można zastosować metody PmaDatabase.Execute oraz PmaDatabase.ExecuteSQL.

DO stwierdzenia informacji o strukturze tabeli można zastosować metody PmaDatabase.GetFieldCount oraz PmaDatabase.GetFieldInfo.

3. Zamknięcie tabeli bazy danych i odłączenie od bazy danych

Tabelę bazy danych można zamknąć przez wywołanie metody PmaDatabase.CloseTable. W tym przypadku jest podłączenie do bazy danych zachowane, można stosować na przykład metody Execute, ExecuteSQL.

Zamknąć tabelę i odłączyć się od bazy danych można przy pomocy metody PmaDatabase.Close.

Można zastosować także informację, że baza danych zostanie automatycznie zamknięta podczas wyłączania aplikacji (zostaną także zamknięte wszystkie tabele bazy danych).

Wskazówka

Z obiektem PmaDatabase można pracować również następującym sposobem:
- wypełnienie konfiguratorów zakładki "Baza danych".
- otwarcie określonej tabeli (w konfiguratorze "Podczas startu" lub przy pomocy metody Open).
- praca z tabelą(odczyt, zapis) i następnie zamknięcie tabeli Close, CloseTable.
- zmiana właściwości Table lub PmaDatabase.OpenSQL (według tego, czy konfigurator "Otwórz tabelkę przy pomocy polecenie SQL SELECT" jest zaznaczony) i ponownie (lecz tym razem już innej tabeli w tej samej bazie danych) otwarcie, praca z tabelą, jej zamknięcie, itd.
 
Przy takim sposobie pracy zamiast metody PmaDatabase.Close jest lepiej zastosować metodę PmaDatabase.CloseTable (jeżeli baza danych zostaje taka sama). Metoda ta nie zamyka całego obiektu bazy danych z tabelą, lecz pozostawi bazę danych podłączoną i zamknie wyłącznie tabelę (szybszy dostęp). Po zakończeniu pracy z bazą danych jest stosowne wywołać metodę PmaDatabase.Close.
© MICROSYS, spol. s r. o.Tavičská 845/21 703 00 Ostrava-Vítkovice