Promotic

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



1. Połączenie i otwarcie tabeli bazodanowej

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ć po uruchomieniu 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 karty "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 poleceń 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 określić 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 zakresie 10 - 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 2023 23:53:30# AND #12 25 2023 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 2023 23:53:30# AND #12 25 2023 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ń języka 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 tabela jest 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 tabeli zakończą się błędem.
Jeżeli na przykład jest konieczny zapis wartości do pewnego rekordu, wtedy jest konieczne najpierw 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 odczytu i zapisu 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 metody ReadFieldValue. Zapis wartości do tabeli można wykonać przy pomocy metody WriteFieldValue lub przy pomocy metody PmaDatabase.SetRecordValueNull. Jeżeli jest konieczne zapis wyłączznie jednej wartości do rekordu, wtedy wykorzystuje się bezpośrednio metoda PmaDatabase.WriteFieldValue (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órnie volat metoda PmaDatabase.WriteFieldValue (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łać metodę PmaDatabase.Add.
2. powtórnie zapisywanie metoda PmaDatabase.WriteFieldValue (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 bazodanowej.
Uwaga: Przetwarzanie transakcyjne nie musi 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 bazodanowej 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 karty "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 przy pomocy metody 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 dogodniejszym jest zastosowanie metody 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.