Wonderware® FactorySuite™ Menedżer SQL Access Podręcznik użytkownika Wersja A Ostatnia wersja: Sierpień 2002 Invensys Systems, Inc. Wszystkie prawa zastrzeżone. Żaden fragment niniejszej publikacji nie może być kopiowany, przechowywany w systemie do wyszukiwania informacji, przesyłany za pomocą jakichkolwiek metod: elektronicznych, mechanicznych, fotokopiowania, nagrywania lub też w jakikolwiek inny sposób, bez uprzedniego otrzymania pisemnej zgody Invensys Systems, Inc. Dołożono wszelkich starań, aby informacje zawarte w tej publikacji były kompletne i rzetelne, jednakże ani dostawca ani autor nie ponoszą odpowiedzialności za błędy i omyłkowe pominięcia. Nie jest również ponoszona jakakolwiek odpowiedzialność za szkody wynikłe z korzystania z informacji podanych w niniejszym dokumencie. Podane informacje mogą ulec zmianie bez uprzedzenia i nie są zobowiązujące dla Invensys Systems, Inc. Oprogramowanie może być wykorzystywane i kopiowane wyłącznie przy zachowaniu zgodności z tymi dokumentami. © 2002 Invensys Systems, Inc. Wszystkie prawa zastrzeżone. Invensys Systems, Inc. 26561 Rancho Parkway South Lake Forest, CA 92630 U.S.A. (949) 727-3200 http://www.wonderware.com Znaki handlowe Terminy używane w niniejszej dokumentacji, co do których było wiadomo, że są znakami firmowymi lub oznaczeniami usług, zostały odpowiednio wyróżnione. Invensys Systems, Inc. nie może zaświadczyć o pełnej kompletności tych informacji. Korzystanie z tych terminów w niniejszej dokumentacji nie może być traktowane jako naruszanie praw do tych znaków handlowych lub oznaczeń usług. Alarm Logger, ActiveFactory, ArchestrA, Avantis, DBDump, DBLoad, DT Analyst, FactoryFocus, FactoryOffice, FactorySuite, FactorySuite A2, InBatch, InControl, IndustrialRAD, IndustrialSQL Server, InTouch, InTrack, MaintenanceSuite, MuniSuite, QI Analyst, SCADAlarm, SCADASuite, SuiteLink, SuiteVoyager, WindowMaker, WindowViewer, Wonderware oraz Wonderware Logger są znakami towarowymi Invensys plc, jego reprezentanów i filii. Wszystkie inne znaki mogą być znakami towarowymi należącymi do ich właścicieli. Spis treści 3 Spis treści ROZDZIAŁ 1: Moduł SQL Access .....................5 Wprowadzenie........................................................................................ 5 Informacje o podręczniku użytkownika................................................. 6 Pomoc techniczna................................................................................... 7 Kompatybilność z ODBC....................................................................... 8 ROZDZIAŁ 2: Konfigurowanie i nawiązywanie połączenia z bazą danych...................................9 Korzystanie z bazy danych Oracle 8.0 ................................................... 9 Funkcja SQLConnect()..................................................................... 10 Zapisywanie daty i czasu do pól bazy danych Oracle ...................... 10 Dla bazy Microsoft SQL Server............................................................11 Konfigurowanie klienta .....................................................................11 Obsługiwane typy danych ................................................................ 12 Microsoft Access.................................................................................. 12 Długość tekstu .................................................................................. 13 Zestawienie typów w obsługiwanych bazach danych.......................... 13 ROZDZIAŁ 3: Konfigurowanie modułu SQL Access................................................................15 Przegląd modułu SQL Access.............................................................. 15 Konfigurowanie listy powiązań........................................................ 16 Separatory specjalne............................................................................. 20 Konfigurowanie szablonu tabeli........................................................... 21 Plik SQL.DEF ...................................................................................... 24 ROZDZIAŁ 4: Funkcje SQL ..............................25 Zestawienie funkcji SQL...................................................................... 25 Funkcja ............................................................................................. 26 Parametry funkcji SQL......................................................................... 34 Korzystanie z funkcji SQL w skryptach .............................................. 38 Zapytania złożone............................................................................. 38 Wczytywanie wartości do zmiennych programu InTouch ............... 42 Zapisywanie wartości zmiennych InTouch do pól bazy danych ...... 42 Niebezpieczeństwa przy uaktualnianiu danych ................................ 42 ROZDZIAŁ 5: Rozwiązywanie problemów......45 Usuwanie problemów z funkcjami....................................................... 45 Komunikaty o błędach...................................................................... 45 Menedżer SQL Access Podręcznik użytkownika 4 Spis treści Kody błędów dla poszczególnych baz danych .....................................47 Analizowanie pracy modułu InTouch SQL Access ..............................48 ZAŁĄCZNIK A: Zarezerwowane słowa kluczowe ............................................................49 SQL Access oraz ODBC ...................................................................49 InTouch..............................................................................................51 Indeks................................................................53 Menedżer SQL Access Podręcznik użytkownika Moduł SQL Access R O Z D Z I A Ł 5 1 Moduł SQL Access Wonderware FactorySuite SQL Access Manager pozwala na korzystanie z tabel baz danych, ich modyfikowanie, tworzenie i usuwanie. Baza danych przechowuje informacje w tabelach, posiadających wspólny atrybut lub pole. Dostęp do informacji zgromadzonych w bazie danych zapewnia język SQL (Structured Query Language). Spis treści • Wprowadzenie • Informacje o podręczniku użytkownika • Pomoc techniczna • Kompatybilność z ODBC Wprowadzenie Moduł SQL Access programu InTouch został specjalnie zaprojektowany w celu zapewnienia łatwej metody wymiany danych pomiędzy bazami SQL a aplikacjami InTouch. Moduł ten umożliwia również przesyłanie danych w czasie pracy aplikacji, takich jak status alarmów, czy dane historyczne z programu InTouch do bazy danych SQL. Przykładowo, po zakończeniu cyklu obróbki, można zapisać szereg zestawów danych, każdy dla innej aplikacji. W bazie SQL może być zapisanych szereg danych. Moduł SQL Access pozwala na odczyt tych danych oraz na ich wyświetlanie w dowolnej aplikacji InTouch. Menedżer SQL Access Podręcznik użytkownika 6 Rozdział 1 Moduł odpowiadający za obsługę baz danych SQL składa się z Menedżera modułu SQL Access oraz z funkcji SQL. Zadaniem Menedżera modułu SQL Access jest utworzenie i powiązanie kolumn bazy danych ze zmiennymi zdefiniowanymi na liście zmiennych programu InTouch. Proces przypisywania kolumn bazy danych do zmiennych programu InTouch określany jest terminem "wiązanie." Dzięki powiązaniu zmiennych programu InTouch z kolumnami bazy danych, Menedżer modułu SQL Access może bezpośrednio manipulować danymi przechowywanymi w bazie danych. Menedżer modułu SQL Access zapisuje kolumny bazy danych i ich powiązania w pliku w formacie .csv o nazwie "SQL.DEF." (Plik ten umieszczony jest w kartotece aplikacji InTouch, można go podglądnąć lub modyfikować za pomocą Menedżera modułu SQL Access lub też za pomocą dowolnego edytora tekstowego, np. Notatnika Windows. Menedżer modułu SQL Access tworzy również szablony tabel definiujące format i strukturę bazy danych. Aby dowiedzieć się więcej na temat list powiązań oraz szablonów tablic, zobacz Rozdział 3, "Konfigurowanie modułu SQL Access." Funkcje SQL można wywoływać z poziomu każdego skryptu. Pozwala to na automatyczne uruchamianie tych funkcji, w momencie podjęcia odpowiednich działań przez operatora, po zmianie wartości zmiennej lub też w przypadku spełnienia określonych warunków. Przykładowo, w przypadku wygenerowania alarmu, aplikacja może wywołać polecenia SQLInsert() i SQLUpdate() w celu zapisania danych i statusu alarmu. Funkcje SQL mogą być wykorzystane do tworzenia nowych tabel, wstawiania nowych rekordów do tabel, edycji istniejących rekordów tabel, czyszczenia tabel, usuwania tabel, przewijania rekordów, itp. Uwaga Systemy baz danych nie omawiane w niniejszym podręczniku użytkownika, nie są obsługiwane. Informacje o podręczniku użytkownika Niniejsza instrukcja podzielona jest logicznie na szereg rozdziałów, opisujących różne aspekty korzystania z modułu SQL Access. Ma ona charakter “algorytmiczny”, podaje kroki do realizacji większości funkcji i zadań. Jeżeli ten podręcznik użytkownika jest używany w wersji elektronicznej, jeżeli tekst jest w kolorze zielonym, wystarczy kliknąć na tekście, aby „przeskoczyć” do odpowiedniej sekcji lub rozdziału. Po przejściu do innego punktu lub rozdziału, można skorzystać z polecenia "Wstecz", powodującego przejście do pierwotnego miejsca. Wskazówka Znak ten umieszczono obok “Podpowiedzi”, zawierających prostszą lub szybszą metodę realizacji funkcji lub zadania. W podręczniku użytkownika InTouch omówiono środowisko edycyjne programu WindowMaker oraz dostępne w nim narzędzia, przeczytaj rozdział 1 tego podręcznika "Elementy programu WindowMaker". W celu zapoznania się z oknami, obiektami graficznymi, wizardami, obiektami ActiveX, itp. należy przeczytać Rozdział 2, "Korzystanie z programu WindowMaker". Menedżer SQL Access Podręcznik użytkownika Moduł SQL Access 7 Szczegółowe informacje o środowisku do uruchamiania aplikacji (program WindowViewer) podano w podręczniku operatora. Dodatkowo, w podręczniku InTouch - opis funkcji, pól i zmiennych systemowych zamieszczono wyczerpujący opis języka skryptów, funkcji, zmiennych systemowych oraz pól zmiennych, występujących w programie InTouch. Więcej informacji na temat dodatkowego programu SPC Pro podano w Podręczniku Użytkownika SPC Pro. Szczegóły dotyczące dodatkowego programu Menedżer Receptur podano w Podręczniku Użytkownika Menedżera Receptur. Podręczniki w wersji elektronicznej dla wszystkich elementów pakietu FactorySuite są również zawarte w pakiecie oprogramowania FactorySuite. Uwaga Aby przeglądać lub drukować podręczniki w wersji elektronicznej, należy zainstalować Adobe Acrobat Reader (wersja 4.0 lub późniejszą). Wymagane wiadomości W niniejszej instrukcji przyjęto następujące założenia o użytkowniku: • Użytkownik jest zapoznany z systemami operacyjnymi Windows 2000, Windows XP oraz Windows NT. • Posiada umiejętność korzystania z myszki, menu Windows, wybierania opcji oraz korzystania z pomocy. • Posiada doświadczenie w zakresie programowania lub języka makr. W celu osiągnięcia jak największych korzyści, użytkownik powinien być zapoznany z takimi zagadnieniami programowania jak zmienne, deklaracje, funkcje i metody. Pomoc techniczna Dział Pomocy Technicznej Wonderware oferuje różne metody wsparcia w zakresie produktów Wonderware jak również ich implementacji. Przed skontaktowaniem się z Działem Pomocy Technicznej, proszę szukać rozwiązania problemów, mogących wystąpić w czasie korzystania z systemu InTouch w podręczniku Moduł SQL Access. Jeżeli okaże się konieczne skorzystanie z pomocy technicznej, należy mieć przygotowane następujące informacje: 1. Numer seryjny oprogramowania. 2. Numer wykorzystywanej wersji programu InTouch. 3. Typ i wersję wykorzystywanego sytemu operacyjnego. Przykładowo, Microsoft Windows NT Wersja 4.0, jednostanowiskowa. 4. Dokładną treść wyświetlanego przez system komunikatu o błędzie. 5. Jakiekolwiek wydruki z programu Wonderware Logger, narzędzi diagnostycznych Microsoft Diagnostic (MSD), czy innych aplikacji diagnostycznych, które mogą być pomocne. Menedżer SQL Access Podręcznik użytkownika 8 Rozdział 1 6. Szczegółowe informacje na temat podejmowanych prób rozwiązania problemów oraz ich wyniki. 7. Szczegółowe informacje odnośnie sposobu odtworzenia zaistniałego problemu. 8. Jeżeli jest dostępna taka informacja, numer przyporządkowany do tego problemu przez Dział Pomocy Technicznej Wonderware (dotyczy to problemów aktualnie opracowywanych). Więcej informacji o pomocy technicznej podano w Podręczniku Użytkownika FactorySuite System Administrator's. Kompatybilność z ODBC Moduł SQL Access jest kompatybilny z ODBC, co oznacza, że może współpracować z dowolnym systemem baz danych, pod warunkiem, że system ten posiada sterownik ODBC. Przed rozpoczęciem korzystania ze sterownika ODBC należy go skonfigurować za pomocą programu Microsoft ODBC Administrator, w celu nawiązania połączenia pomiędzy aplikacją kompatybilną z ODBC a systemem baz danych. W celu skonfigurowania sterownika ODBC 1. Uruchomić program Microsoft ODBC Administrator. 2. Wybrać sterownik lub źródło danych, a następnie kliknąć Add New Name, Set Default lub Configure. Okno dialogowe ODBC Driver Setup. Opcja Opis Nazwa źródła danych Nazwa zdefiniowana przez użytkownika, identyfikująca źródło danych. Opis Wprowadzony przez użytkownika opis źródła danych. Katalog aplikacji Kartoteka, w której umieszczone są pliki bazy danych. Jeżeli nie jest określona żadna kartoteka, wykorzystywana będzie kartoteka bieżąca. Wskazówka Wprowadzić pozostałe informacje, wymagane do skonfigurowania wybranego sterownika. 3. Kliknąć OK. Wskazówka Sterownik zapisze wartości każdego z pól do pliku ODBC.INI. Są to domyślne wartości, wykorzystywane przy łączeniu się ze źródłem danych. Wartości te można zmodyfikować. W przypadku atrybutów nieobsługiwanych przez pole dialogowe ODBC Driver Setup, wartości można wprowadzać ręcznie, w odpowiedniej sekcji źródła danych w pliku odbc.ini. Menedżer SQL Access Podręcznik użytkownika Konfigurowanie i nawiązywanie połączenia z bazą danych R O Z D Z I A Ł 9 2 Konfigurowanie i nawiązywanie połączenia z bazą danych SQL Access Manager umożliwia łączenie się z bazami danych Oracle, Microsoft SQL Server oraz Microsoft Access. Każdy z systemów baz danych ma inne wymagania. W niniejszym rozdziale poświęcono oddzielne punkty dla każdego z systemów baz danych oraz opisano w nich sposób komunikacji z modułem SQL Access. Spis treści • Korzystanie z bazy danych Oracle 8.0 • Dla bazy Microsoft SQL Server • Microsoft Access • Zestawienie typów w obsługiwanych bazach danych Korzystanie z bazy danych Oracle 8.0 W celu nawiązania połączenia z bazą danych Oracle 8.0 1. Zweryfikować, czy dostawca Oracle OLEDB (MSDAORA.DLL) istnieje na komputerze z programem InTouch. Ten plik jest instalowany wraz z MDAC, który jest instalowany wraz z programem InTouch. 2. Nawiązać połączenie z bazą danych Oracle poprzez wywołanie funkcji SQLConnect() z poziomu skryptu InTouch. Aby dowiedzieć się więcej na temat funkcji SQLConnect(), zobacz Rozdział 4, "Funkcje SQL." Menedżer SQL Access Podręcznik użytkownika 10 Rozdział 2 Funkcja SQLConnect() Funkcja SQLConnect() przeznaczona jest do nawiązywania połączenia z bazą danych Oracle. Łańcuch znaków do połączenia, wykorzystywany w funkcji SQLConnect() musi mieć następującą składnię: SQLConnect(ConnectionId,"<atrybut>=<wartość>; <atrybut>=<wartość>;..."); Poniżej podano atrybuty wykorzystywane przez bazę danych Oracle: Atrybut Wartość Provider MSDAORA User ID Nazwa użytkownika. Password Hasło. Data Source Nazwa serwera Oracle Przykład SQLConnect(ConnectionId,"Provider=MSDAORA; Data Source=OracleServer; User ID=SCOTT; Password=TIGER;"); Zapisywanie daty i czasu do pól bazy danych Oracle W celu zarejestrowania daty i czasu w polu danych bazy Oracle, należy odpowiednio ustawić parametry funkcji delim. W celu rejestrowania w polu danych bazy Oracle daty i czasu 1. W eksploratorze aplikacji, w grupie SQL Access Manager kliknąć Bind List (Lista powiązań). Wyświetlone zostanie okno dialogowe Bind List Configuration (Konfiguracja listy powiązań). Menedżer SQL Access Podręcznik użytkownika Konfigurowanie i nawiązywanie połączenia z bazą danych 11 2. W polu Tagname.FieldName (Zmienna.Pole) wprowadzić zmienną, która ma być wykorzystywana. 3. W polu Column Name (Nazwa kolumny) wpisać funkcję DATE_TIME delim(). 4. W aplikacji InTouch napisać skrypt, przygotowujący dane wejściowe w oparciu o bieżący czas i datę. Przykładowo: DATE_TIME_TAG = "TO_DATE(''" + $DateString + "" + StringMid($TimeString,1,8) + "'',''mm/dd/yy hh24:mi:ss'')"; Wskazówka Zmienna Date_Time_Tag będzie wyświetlana w czasie pracy aplikacji w następującym formacie: TO_DATE(''08/22/97 23:32:18'' ,''mm/dd/yy hh24:mi:ss'') Dla bazy Microsoft SQL Server W celu nawiązania komunikacji z serwerem Microsoft SQL Server 1. Skonfigurować klienta bazy danych Windows. 2. Wywołać z poziomu skryptu funkcję SQLConnect() w celu nawiązania łączności z serwerem Microsoft SQL Server. Aby dowiedzieć się więcej na temat funkcji SQLConnect(), zobacz Rozdział 4, "Funkcje SQL." Konfigurowanie klienta Funkcja SQLConnect() Funkcja SQLConnect() może służyć nawiązywaniu połączenia z bazą danych Microsoft SQL Server. Wywołanie tej funkcji powoduje zalogowanie do serwera bazy danych oraz nawiązanie połączenia, co pozwala na korzystanie z innych funkcji SQL. Łańcuch znaków połączenia, wykorzystywany w funkcji SQLConnect() musi mieć następującą składnię: SQLConnect(ConnectionId,"<atrybut>=<wartość>; <atrybut>= <wartość>;..."); Poniżej podano atrybuty wykorzystywane przez bazę danych Microsoft SQL Server: Atrybut Wartość Provider SQLOLEDB DSN Nazwa źródła danych (Data Source Name) skonfigurowana w programie Microsoft ODBC Administrator. UID Identyfikator użytkownika, rozróżniana jest wielkość liter. Menedżer SQL Access Podręcznik użytkownika 12 Rozdział 2 Atrybut Wartość PWD Hasło, rozróżniana jest wielkość liter. SRVR Nazwa serwera, na którym znajdują się tablice, które będą wykorzystywane. DB Nazwa bazy danych, która będzie wykorzystywana. Przykład SQLConnect(ConnectionId,"DSN=SQL_Data;UID=OPERATOR;PWD=XYZ Z"); Obsługiwane typy danych Menedżer SQL Access wiąże cztery typy danych programu InTouch (discrete, integer, real oraz message) z typami występującymi w bazie danych. Dane typu char są łańcuchami znaków o stałej długości. Do zmiennych InTouch typu tekstowego można przypisywać wyłącznie dane typu char. Należy określić długość pola. Maksymalna długość danych typu char nie może przekraczać w bazie danych Microsoft SQL Server 8,000 znaków. Należy pamiętać jednak, że maksymalna długość zmiennych tekstowych programu InTouch może wynosi 131 znaków. Jeżeli zmienna tekstowa ma większą długość niż zadeklarowano w polu bazy danych, przed zapisaniem zostanie obcięta. Typ danych int odpowiada zmiennym InTouch typu całkowitego. Jeżeli nie określono długości pola, przyjmowana jest domyślna długość, wprowadzona dla bazy danych. Szerokość określa maksymalną liczbę cyfr w kolumnie. Typ danych float odpowiada zmiennym InTouch typu rzeczywistego. Długość pola dla tego typu zmiennych jest ustalana przez bazę danych. Ten typ danych nie wymaga podawania długości. Microsoft Access W celu nawiązania połączenia z Microsoft Access, należy wywołać z poziomu skryptu funkcję SQLConnect(). Funkcja SQLConnect() Funkcja SQLConnect() przeznaczona jest do nawiązywania połączenia z bazą danych Microsoft Access. Wywołanie tej funkcji powoduje zalogowanie do serwera bazy danych oraz nawiązanie połączenia, co pozwala na korzystanie z innych funkcji SQL. Łańcuch znaków do połączenia wykorzystywany w funkcji SQLConnect() musi mieć następującą składnię: SQLConnect(ConnectionId,"<atrybut>=<wartość>; <atrybut>= <wartość>;..."); DSN to atrybut używany przez Microsoft Access i nazwa źródła danych skonfigurowana w administratorze Microsoft ODBC. Przykład SQLConnect(ConnectionId,"DSN=MSACC"); Menedżer SQL Access Podręcznik użytkownika Konfigurowanie i nawiązywanie połączenia z bazą danych 13 Długość tekstu Ilość dopuszczalnych typów danych zależy od wersji wykorzystywanego sterownika ODBC. Dane typu text to łańcuchy znaków o stałej długości, są one wykorzystywane w przypadku zmiennych InTouch typu tekstowego. Należy określić długość. W bazie danych Microsoft Access długość pola typu text nie może przekraczać 255 znaków. Należy pamiętać jednak, że maksymalna długość zmiennych InTouch typu tekstowego może wynosić 131 znaków. Jeżeli zmienna tekstowa ma większą długość niż zadeklarowano w polu bazy danych, przed zapisaniem zostanie obcięta. Sterownik Microsoft Access ODBC obsługuje nazwy kolumn o długości do 17 znaków. W przypadku korzystania z instrukcji SQLSetStatement( Select Col1, Col2, ... ), maksymalna liczba obsługiwanych kolumn wynosi 40. Zestawienie typów w obsługiwanych bazach danych Oracle Zakres wartości Typ zmiennej Typ danych Długość Domyślnie char 2000 znaków 1 znak Message number 38 cyfr 38 cyfr Integer Microsoft SQL Server Typ danych Długość char Domyślnie 8000 znaków Typ zmiennej Message int float Zakres wartości -2147483648 Integer do 2147483647 15 cyfr -1.79E+308 do 1.79E+308 Real Zakres wartości Typ zmiennej Microsoft Access 2000 Typ danych Długość wartość tekstowa 255 znaków Domyślnie Message number Integer number Real Menedżer SQL Access Podręcznik użytkownika 14 Rozdział 2 Menedżer SQL Access Podręcznik użytkownika Konfigurowanie modułu SQL Access R O Z D Z I A Ł 15 3 Konfigurowanie modułu SQL Access Programy narzędziowe modułu SQL Access umożliwiają tworzenie list powiązań i szablonów tabel. Lista powiązań kojarzy kolumny bazy danych ze zmiennymi programu InTouch. Szablon tablicy umożliwia zdefiniowanie struktury i formatu nowej tabeli w bazie danych. Spis treści • Przegląd modułu SQL Access • Separatory specjalne • Konfigurowanie szablonu tabeli • Plik SQL.DEF Przegląd modułu SQL Access W momencie wywołania przez aplikację instrukcji SQLCreateTable(), argument Table Template wykorzystywany jest do zdefiniowania struktury nowego pliku bazy danych. Podręcznik Użytkownika programu InTouch 16 Rozdział 3 Przy korzystaniu z funkcji SQLInsert(), SQLSelect() i SQLUpdate(), argument lista powiązań określa przypisanie zmiennych InTouch do kolumn bazy danych. Konfigurowanie listy powiązań Lista powiązań kojarzy kolumny bazy danych ze zmiennymi programu InTouch. W celu utworzenia nowej listy powiązań 1. Z menu Special (Specjalne) wybrać SQL Access Manager, a następnie kliknąć Bind List (Lista powiązań) lub rozwinąć grupę SQL Access Manager w eksploratorze aplikacji, a następnie podwójnie kliknąć Bind List (Lista powiązań). 2. Kliknąć New (Nowe). Podręcznik Użytkownika programu InTouch Konfigurowanie modułu SQL Access 3. 17 Wyświetlone zostanie okno dialogowe Bind List Configuration (Konfiguracja listy powiązań). Wskazówka Po kliknięciu prawym przyciskiem myszy w DOWOLNYM polu tekstowym, wyświetlone zostanie menu z poleceniami, które można zastosować do zaznaczonego tekstu. 4. W polu Bind List Name (Nazwa listy powiązań) wpisać nazwę listy powiązań. Wskazówka Długość nazwy listy powiązań nie może przekraczać 32 znaków. Nowa lista powiązań umożliwi przypisanie kolumn bazy danych do zmiennych InTouch. Przykładowo, jeżeli tworzona jest lista demograficzna pracowników, należy wpisać w tym polu nazwę listy powiązań, związaną z informacjami o pracownikach. Uwaga Lista powiązań jest parametrem wywołania funkcji SQLInsert(), SQLSelect() i SQLUpdate(). 5. W polu Tagname.FieldName (Zmienna.Pole) wpisać zmienną wraz z polem w formacie zmienna.pole. Wskazówka Lista zmiennych powiąże pola zmiennych z nazwą kolumny w bazie danych. Jeżeli zmienna nie jest jeszcze zdefiniowana na liście zmiennych, należy ją podwójnie kliknąć w celu wywołania okna dialogowego Tagname Dictionary (Lista zmiennych) i zdefiniować ją. 6. Kliknąć Tagname (Zmienna) w celu wybrania jednej z zdefiniowanych wcześniej zmiennych. Wyświetlona zostanie przeglądarka zmiennych. Podręcznik Użytkownika programu InTouch 18 Rozdział 3 Wskazówka Pokazane zostaną wszystkie zmienne dla wybranego źródła zmiennych. W celu wybrania zmiennej podwójnie ją kliknąć lub zaznaczyć ją, a następnie kliknąć OK. W celu wybrania pola zmiennej, kliknąć strzałkę Dot Field (Pole) zaznaczyć jedno z pól, a następnie kliknąć OK. Uwaga Zmienne typu I/O, które nie są używane w aplikacji ale określone w liście powiązań, będą uaktywnione i odpytywane z programu komunikacyjnego I/O w momencie uruchomienia programu WindowViewer. Aby zaobserwować to zachowanie, nie jest wymagane połączenie z bazą danych. Więcej informacji na temat przeglądarki zmiennych podano w Podręczniku użytkownika programu InTouch. 7. Kliknąć FieldName (Pole) w celu wybrania pola zmiennej. Wyświetlone zostanie okno dialogowe Choose field name (Wybierz nazwę pola). 8. Zaznaczyć pole, które ma być wstawione. Okno dialogowe zostanie zamknięte, a wybrane pole automatycznie wstawione do pola Tagname.FieldName (Zmienna.Pole). Więcej informacji na temat pól zmiennych podano w Rozdziale 4 podręcznika InTouch Podręcznik użytkownika. 9. W polu Column Name (Nazwa kolumny) wpisać nazwę kolumny. Wskazówka Długość nazwy kolumny nie może przekraczać 30 znaków. Nazwa kolumny jest bezpośrednio wiązana z nazwą kolumny w bazie danych. Jeżeli w nazwie kolumny występują spacje, w czasie wprowadzania tej nazwy w oknie dialogowym lub w skrypcie należy ją ująć w nawiasy kwadratowe. Przykładowo: WHERE EXPR= "[Pipe Flow} = " + text (tagname,"#"); Wskazówka W celu powiązania nazwy kolumny z bazą danych, można skorzystać ze specjalnych separatorów. Aby dowiedzieć się więcej na temat znaków rozdzielających, zobacz rozdział "Separatory specjalne" 10. Kliknąć Move Up (Przenieś w górę) w celu przesunięcia na liście wybranej zmiennej o jeden poziom wyżej. 11. Kliknąć Move Down (Przesuń w dół) w celu przesunięcia na liście wybranej zmiennej o jeden poziom niżej. 12. Kliknąć Add Item (Dodaj) w celu dodania pól i nazw kolumn do listy powiązań. 13. Kliknąć Delete (Usuń) w celu usunięcia zaznaczonych pól i nazw kolumn z listy powiązań. 14. Kliknąć Modify (Modyfikuj) w celu zmienienia na liście powiązań zaznaczonych pól Tagname.FieldName (Zmienna.Pole) i Column Name (Nazwa kolumny) . Podręcznik Użytkownika programu InTouch Konfigurowanie modułu SQL Access 19 15. Kliknąć OK w celu zapisania listy powiązań i zamknięcia okna dialogowego. Wskazówka Kliknięcie Save (Zapisz) powoduje zapisanie wprowadzonych zmian, bez zamykania okna dialogowego. W celu wprowadzenia zmian na liście powiązań 1. Z menu Special (Specjalne) wybrać SQL Access Manager, a następnie kliknąć Bind List (Lista powiązań) lub rozwinąć grupę SQL Access Manager w eksploratorze aplikacji, a następnie podwójnie kliknąć Bind List (Lista powiązań). 2. Wyświetlone zostanie okno dialogowe Select a Bind List (Wybierz listę powiązań). 3. Zaznaczyć nazwę listy powiązań, a następnie kliknąć Modify (Modyfikuj). Wyświetlone zostanie okno dialogowe Bind List Configuration (Konfiguracja listy powiązań). 4. Wprowadzić żądane zmiany. 5. Kliknąć OK w celu zapisania zmian i zamknięcia okna dialogowego. Aby dowiedzieć się więcej na temat konfigurowania listy powiązań, zobacz podrozdział "W celu utworzenia nowej listy powiązań." W celu usunięcia listy powiązań 1. Z menu Special (Specjalne) wybrać SQL Access Manager, a następnie kliknąć Bind List (Lista powiązań) lub rozwinąć grupę SQL Access Manager w eksploratorze aplikacji, a następnie podwójnie kliknąć Bind List (Lista powiązań). 2. Wyświetlone zostanie okno dialogowe Select a Bind List (Wybierz listę powiązań). 3. Zaznaczyć nazwę listy powiązań, która ma być usunięta. 4. Kliknąć Delete (Usuń). Wyświetlone zostanie okno dialogowe żądające zatwierdzenia zamiaru wykonania tej czynności. Kliknąć Yes (Tak) w celu usunięcia zaznaczonego szablonu tabeli lub kliknąć No (Nie) w celu anulowania tej operacji. Wyświetlone zostanie ponownie okno dialogowe Bind List Configuration (Konfiguracja listy powiązań): 5. Kliknąć OK w celu zamknięcia okna dialogowego. Podręcznik Użytkownika programu InTouch 20 Rozdział 3 Separatory specjalne Funkcje SQLInsert() i SQLUpdate() korzystają z domyślnego formatu, w którym łańcuchy znaków ujęte są w apostrofy. Niektóre bazy danych SQL wymagają, aby łańcuchy znaków były ujęte w inne separatory. Przykładowo, w bazie danych Oracle, łańcuch znaków musi być podawany w nawiasach. Jeżeli występuje taka potrzeba, należy skorzystać w następujący sposób z funkcji Delim(): W oknie dialogowym Bind List Configuration (Konfiguracja listy powiązań), w polu Column Name (Nazwa kolumny), wpisać za nazwą kolumny słowo kluczowe "delim" (nie jest rozróżniana wielkość liter). Po słowie kluczowym "delim" należy wpisać: • • • • • lewy nawias lewy separator przecinek prawy separator prawy nawias Przykład: datestring delim (‘,‘) Jeżeli z lewej i z prawej strony stosowany jest ten sam separator, wystarczy go podać w nawisach, bez przecinka. Przykład: datestring delim (‘ ‘) W podanym poniżej przykładzie, z lewej strony jest inny separator niż z prawej strony. Zwrócić uwagę na miejsce wpisania date delim (‘,’) w polu Column Name (Nazwa kolumny). Aby dowiedzieć się więcej na temat rejestrowania daty i czasu do pól bazy danych Oracle, zobacz Rozdział 2, "Konfigurowanie i nawiązywanie połączenia z bazą danych." Podręcznik Użytkownika programu InTouch Konfigurowanie modułu SQL Access 21 Konfigurowanie szablonu tabeli Szablon tabeli umożliwia zdefiniowanie struktury i formatu nowej tabeli w bazie danych. W celu utworzenia nowego szablonu tabeli 1. Z menu Special (Specjalne) wybrać SQL Access Manager, a następnie kliknąć Table Template (Szablon tabeli) lub rozwinąć grupę SQL Access Manager w eksploratorze aplikacji, a następnie podwójnie kliknąć Table Template (Szablon tabeli). 2. Kliknąć New (Nowe). 3. Wyświetlone zostanie okno dialogowe Table Template Configuration (Konfiguracja szablonu tablicy): Wskazówka Po kliknięciu prawym przyciskiem myszy w DOWOLNYM polu tekstowym, wyświetlone zostanie menu z poleceniami, które można zastosować do zaznaczonego tekstu. Podręcznik Użytkownika programu InTouch 22 Rozdział 3 4. W polu Table Template Name (Nazwa szablonu tablicy) wpisać nazwę szablonu tabeli. Uwaga Długość nazwy szablonu tabeli nie może przekraczać 32 znaków. Jeśli tworzymy indeks, unikalny lub nie, nazwa szablonu tablicy nie może przekroczyć 24 znaków. Nazwa szablonu tabeli jest wykorzystywana do identyfikacji struktury w bazie danych, w czasie korzystania z funkcji SQLCreateTable(). 5. W polu Column Name (Nazwa kolumny) wpisać nazwę szablonu tabeli. Długość nazwy kolumny nie może przekraczać 30 znaków. 6. W polu Column Type (Typ kolumny) wpisać typ danych przechowywanych w kolumnie. Należy wpisać jeden z typów danych, dopuszczalnych przez bazę, z którą będzie nawiązywane połączenie. Aby dowiedzieć się więcej na temat typów danych dostępnych w poszczególnych bazach, zobacz Rozdział 2, "Konfigurowanie i nawiązywanie połączenia z bazą danych." 7. Zaznaczyć pole w grupie Index Type (Typ indeksu), zgodnie z podanym poniżej opisem. Unique (Bez powtórzeń) Wartości w kolumnie nie mogą się powtarzać. Non-Unique (Z powtórzeniami) Wartości w kolumnie mogą się powtarzać. None (Brak) Bez indeksu Wskazówka Po wywołaniu funkcji SQLCreateTable() tworzony jest automatycznie plik z indeksowaniem. 8. Zaznaczyć opcję Allow Null Entry (Pusta wartość OK), jeżeli w tej kolumnie ma być dopuszczona możliwość nie wpisywania wartości. Uwaga W programie InTouch zmienne musza mieć zawsze przypisaną wartość. Jeżeli do zmiennej przypisane zostanie pole bez wartość, zmienna będzie równa: Typ danych Wartość Discrete 0 Integer 0 Message Pusty łańcuch znaków. W momencie przypisywania do zmiennej pola bazy danych bez wartości, wartość zmiennej zostanie wyznaczona zgodnie z powyższym zestawieniem. 9. Kliknąć Add (Dodaj) w celu dodania wartości wprowadzonych w polach Column Name (Nazwa kolumny), Column Type (Typ kolumny), Length (Długość) i Index Type (Typ indeksu) do szablonu tabeli. Podręcznik Użytkownika programu InTouch Konfigurowanie modułu SQL Access 23 10. Kliknąć Delete (Usuń) w celu usunięcia wartości wprowadzonych w polach Column Name (Nazwa kolumny), Column Type (Typ kolumny), Length (Długość) i Index Type (Typ indeksu) z szablonu tabeli. 11. Kliknąć Modify (Modyfikuj) w celu zmodyfikowania w szablonie tabeli wartości wprowadzonych w polach Column Name (Nazwa kolumny), Column Type (Typ kolumny), Length (Długość) i Index Type (Typ indeksu). 12. Kliknąć OK w celu zapisania szablonu tabeli i zamknięcia okna dialogowego. Wskazówka Kliknięcie Zapisz powoduje zapisanie wprowadzonych zmian, bez zamykania okna dialogowego. W celu zmodyfikowania szablonu tabeli 1. Z menu Special (Specjalne) wybrać SQL Access Manager, a następnie kliknąć Table Template (Szablon tabeli) lub rozwinąć grupę SQL Access Manager w eksploratorze aplikacji, a następnie podwójnie kliknąć Table Template (Szablon tabeli). 2. Wyświetlone zostanie okno dialogowe Select a Table Template (Wybierz szablon tablicy). 3. Zaznaczyć nazwę szablonu tabeli, a następnie kliknąć Modify (Modyfikuj). Wyświetlone zostanie okno dialogowe Table Template Configuration (Konfiguracja szablonu tablicy): 4. Wprowadzić żądane zmiany. 5. Kliknąć OK w celu zapisania zmian i zamknięcia okna dialogowego. Aby dowiedzieć się więcej na temat konfigurowania szablonu tabeli, zobacz podrozdział "W celu utworzenia nowego szablonu tabeli." W celu usunięcia szablonu tabeli 1. Z menu Special (Specjalne) wybrać SQL Access Manager, a następnie kliknąć Table Template (Szablon tabeli) lub rozwinąć grupę SQL Access Manager w eksploratorze aplikacji, a następnie podwójnie kliknąć Table Template (Szablon tabeli). Podręcznik Użytkownika programu InTouch 24 Rozdział 3 2. Wyświetlone zostanie okno dialogowe Select a Table Template (Wybierz szablon tablicy). 3. Zaznaczyć nazwę szablonu tabeli, który ma być usunięty. 4. Kliknąć Delete (Usuń). Wyświetlone zostanie okno dialogowe żądające zatwierdzenia zamiaru wykonania tej czynności. Kliknąć Yes (Tak) w celu usunięcia zaznaczonego szablonu tabeli lub kliknąć No (Nie) w celu anulowania tej operacji. Wyświetlone zostanie ponownie okno dialogowe Table Template Configuration (Konfiguracja szablonu tablicy): 5. Kliknąć OK w celu zamknięcia okna dialogowego. Plik SQL.DEF Moduł SQL Access zapisuje listy powiązań i szablony tabel w pliku "SQL.DEF". Ten plik jest formatowany jako plik .CSV. Plik SQL.DEF można podglądnąć lub modyfikować za pomocą modułu SQL Access lub też za pomocą dowolnego edytora tekstowego, np. Notatnika Windows. Dane w pliku zapisywane są w następujący sposób: :BindListName,BindListName Zmienna1.PolezZmiennej,NazwaKolumny1 Zmienna2.PoleZmiennej,NazwaKolumny2 Zmienna3.PoleZmiennej,NazwaKolumny3 :TableTemplateName,TableTemplateName NazwaKolumny1,TypKolumny,[DługośćKolumny],Null,Index NazwaKolumny2,TypKolumny,[DługośćKolumny],Null,Index NazwaKolumny3,TypKolumny,[DługośćKolumny],Null,Index Podręcznik Użytkownika programu InTouch Funkcje SQL R O Z D Z I A Ł 25 4 Funkcje SQL Program InTouch korzysta z funkcji SQL do wymiany informacji z bazą danych. Funkcje te mogą być wykorzystywane, podobnie jak standardowe funkcje InTouch, w dowolnym skrypcie. Pozwalają one na zaznaczanie, modyfikowanie, wstawianie i usuwanie rekordów z wybranej tabeli. Spis treści • Zestawienie funkcji SQL • Parametry funkcji SQL • Korzystanie z funkcji SQL w skryptach\ Zestawienie funkcji SQL W punkcie tym zestawiono wszystkie funkcje SQL. Należy pamiętać, że funkcje SQL są synchroniczne. Program InTouch powraca do realizacji innych czynności dopiero po zakończeniu działania wywołanej wcześniej funkcji SQL (przerywane jest w tym czasie tworzenie trendów, itp.) Wszystkie funkcje SQL (za wyjątkiem SQLNumRows()) zwracają parametr ResultCode. Jeżeli zwrócona wartość parametru ResultCode jest różna od 0, sygnalizuje to niepomyślne wykonanie funkcji, w związku z czym należy podjąć dodatkowe działania. Parametr ResultCode może być wykorzystany przez funkcję SQLErrorMsg(). Ogólna składania funkcji SQL jest następująca: SQLFunction(Parametr1, Parametr2,...) Szczegółowe informacje na temat każdej z funkcji SQL oraz przykłady ich wykorzystania podano w podręczniku InTouch - Opis funkcji, pól i zmiennych systemowych. Menedżer SQL Access Podręcznik użytkownika 26 Rozdział 4 Funkcja SQLAppendStatement(ConnectionId, SQLStatement) Dołącza wyrażenie SQLStatement do domyślnego wyrażenia SQL dla ConnectionId. SQLClearParam(StatementId, ParameterNumber) Ustawia wartość ParameterNumber związanego z wyrażeniem StatementId na zero lub pusty tekst w zależności od typu parametru. SQLClearStatement(ConnectionId, StatementId) Zwalnia zasoby związane z wyrażeniem StatementId. Samo wyrażenie o identyfikatorze StatementId pozostaje bez zmian. SQLClearTable(ConnectionId, TableName) Usuwa wszystkie rekordy z tabeli o nazwie TableName. SQLCommit(ConnectionId) Zatwierdza wykonanie transakcji utworzonej przez funkcję SQLTransact. SQLConnect(ConnectionId, ConnectString) Parametr ConnectString to ta sama definicja połączenia jaka została opisana w dokumentacji ADO (najdokładniej w dokumentacji Microsoft ADO API Reference). Jest to parametr, który może wymagać modyfikacji w aplikacji InTouch, aby wykorzystać możliwości każdego z dostawców OLE DB poszczególnych baz danych. Ogólna forma definicji ConnectString składa się z różnych części rozdzielonych średnikami. Pierwszy komponent jest określony jako Provider=ProviderName, gdzie ProviderName to nazwa dostawcy OLE DB dla danej bazy danych. Funkcje SQL Connect w istniejących aplikacjach InTouch nie definiują dostawcy w parametrze ConnectString więc ADO użyje domyślnego dostawcy, Microsoft OLE DB Provider for ODBC, a więc MSDASQL.DLL. Aplikacje InTouch będą działać poprawnie ale jest zalecane, aby zmienić parametr ConnectString tak, aby używać oryginalnego dostawcy OLE DB. Oto przykłady wartości parametru ConnectString: Przykład 1 Microsoft OLE DB Provider for Microsoft Jet (zalecane użycie) "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\DBName.mdb;User ID=UserIDStr;Password=PasswordStr;" Microsoft.Jet.OLEDB.4.0 is the native OLE DB Provider for Microsoft Jet (Microsoft Access Database engine). Menedżer SQL Access Podręcznik użytkownika Funkcje SQL 27 Przykład 2 Microsoft OLE DB Provider for ODBC (domyślny dostawca MSDASQL dla MS Access): "Provider=MSDASQL;DSN=DSNStr;UID=UserName;PWD=PasswordStr;" Uwaga User ID i uid mogą być używane zamiennie, podobnie jak Password i pwd. Jednakże jak zostało już wspomniane, zalecane jest użycie Microsoft.Jet.OLEDB.4.0. Przykład 3 Microsoft OLE DB Provider for SQL Server (zalecane użycie) "provider=sqloledb;Data Source=MyServer;Initial Catalog=MyDB;User Id=sa;Password=;" Dostawcą OLE DB dla SQL Server''a jest sqloledb. Przykład 4 Microsoft OLE DB Provider for SQL Server (zalecane użycie) "Provider=SQLOLEDB;uid=sa;pwd=;Database=MyDB" Przykład 5 Microsoft OLE DB Provider for ODBC (domyślny dostawca MSDASQL dla SQL Server): "DSN=Pubs;UID=sa;PWD=;" Przykład 6 Microsoft OLE DB Provider for ODBC (domyślny dostawca MSDASQL dla SQL Server): "Data Source=Pubs;User ID=sa;" "Password=;" Uwaga Data Source i Server mogą być używane zamiennie, podobnie jak Catalog oraz Database. Przykład 7 Microsoft OLE DB Provider for Oracle (zalecane użycie) "Provider=MSDAORA;Data Source=ServerName;User ID=UserIDStr; Password=PasswordStr;" Jeżeli wyrażenie SQLTrace=1 zostało zdefiniowane w sekcji [InTouch] w pliku win.ini, każde pomyślne wykonanie funkcji SQLConnect spowoduje zalogowanie w programie Wonderware Logger informacji o wersji ADO, dostawcy i bazie danych. SQLCreateTable(ConnectionId, TableName, TemplateName) Tworzy tablicę o nazwie TableName używając szablonu TemplateName. Menedżer SQL Access Podręcznik użytkownika 28 Rozdział 4 SQLDelete(ConnectionId, TableName, WhereExpr) Usuwa rekordy z tablicy TableName, które spełniają warunek WhereExpr. SQLDisconnect(ConnectionId) Powoduje rozłączenie z bazą danych i zwolnienie zasobów zajętych przez funkcje SQLPrepareStatement oraz SQLInsertPrepare, które jeszcze nie zostały zwolnione (przez wywołanie funkcji SQLClearStatement oraz SQLInsertEnd). SQLDropTable(ConnectionId, TableName) Usuwa z bazy danych tablicę o nazwie TableName. SQLEnd(ConnectionId) Czyści zasoby związane z tablicą powiązaną z kolei z ConnectionId. SQLErrorMsg(ResultCode) Zwraca kod błędu ResultCode o wartości -1, gdy baza danych generuje błąd. ResultCode zawsze wynosi -1, lecz komunikat błędu jest kopiowany dokładnie od dostawcy danych. Dokładane informacje na temat kodów błędów i opisów błędów można znaleźć w rozdziale Rozdział 5, "Rozwiązywanie problemów." SQLExecute(ConnectionId, BindList, StatementId) Wykonuje wyrażenie identyfikowane przez StatementId (zapytanie MS Access, procedura zachowana MS SQL Servera lub tekstowy wyrażenie SQL). Parametr BindList może być tekstem o długości zero. Jeżeli wyrażenie identyfikowane przez StatementId jest zapytaniem zwracającym wyniki w postaci rekordów, logiczna tabela jest uaktualniana za pomocą funkcji SQLExecute. Jeżeli określimy istniejącą listę powiązań, rezultat znajdzie się w zmiennych zdefiniowanych w tej liście. Pusta lista powiązań może być wykorzystana, gdy wiemy że zapytanie identyfikowane przez StatementId nie zwraca rekordów. SQLFirst(ConnectionId) Przesuwa wskaźnik bieżącego rekordu do pierwszego rekordu logicznej tablicy i pobiera wartości z tego rekordu do zmiennych programu InTouch. SQLGetRecord(ConnectionId, RecordNumber) Przesuwa wskaźnik bieżącego rekordu do rekordu RecordNumer logicznej tablicy i pobiera wartości z tego rekordu do zmiennych programu InTouch. Menedżer SQL Access Podręcznik użytkownika Funkcje SQL 29 SQLInsert(ConnectionId, TableName, BindList) Pobiera bieżące wartości zmiennych programu InTouch i wstawia je jako nowy rekord w tabeli TableName. SQLInsertEnd(ConnectionId, StatementId) Czyści zasoby związane z danym StatementId i utworzone za pomocą funkcji SQLInsertPrepare. SQLInsertExecute(ConnectionId, BindList, StatementId) Powoduje pobranie bieżących wartości zmiennych InTouch i wstawienie nowego rekordu do tabeli identyfikowanej przez poprzednie wykonanie SQLInsertPrepare. Jeżeli lista powiązań zawiera klucz identyfikacyjny w tabeli MS SQL Servera, przed wykonaniem funkcji konieczne jest ustawienie IDENTITY_INSERT. Przykład Wstawianie rekordu z kluczem będącym częścią listy powiązań: ResultCode = SQLSetStatement(ConnectionId, "SET IDENTITY_INSERT Products ON"); ResultCode = SQLExecute(ConnectionId, "", 0); ResultCode = SQLInsertPrepare(ConnectionId, TableName, Bindlist, StatementId); ResultCode = SQLInsertExecute(ConnectionId, Bindlist, StatementId); ResultCode = SQLInsertEnd(ConnectionId, StatementId); SQLInsertPrepare(ConnectionId, TableName, BindList, StatementId) Zwraca StatementId, które może być wykorzystane w funkcjach SQLInsertExecute i SQLInsertEnd. SQLLast(ConnectionId) Przesuwa wskażnik bieżącego rekordu do ostatniego rekordu logicznej tablicy i pobiera wartości z tego rekordu do zmiennych programu InTouch. SQLLoadStatement(ConnectionId, FileName) Wczytuje wyrażenie znajdujące się w pliku FileName do wyrażenia domyślnego identyfikowanego przez ConnectionId. Menedżer SQL Access Podręcznik użytkownika 30 Rozdział 4 SQLManageDSN(ConnectionId) ConnectionId nie jest używane. Pozostaje jednak po to, aby utrzymać kompatybilność z wcześniejszymi wersjami SQL Access. W tej sytuacji można przekazać do funkcji dowolną liczbę. Nie jest także wymagane, aby przed wykonaniem tej funkcji inicjalizować połączenie z bazą danych. Przykład SQLManageDSN( 0 ) SQLNext(ConnectionId) Przesuwa wskaźnik bieżącego rekordu do następnego rekordu logicznej tablicy i pobiera wartości z tego rekordu do zmiennych programu InTouch. SQLNumRows(ConnectionId) Zwraca liczbę rekordów w tablicy logicznej. Ponieważ ta funkcja może zwrócić błąd, zalecane jest użycie jej w następujący sposób: DIM TEMP AS INTEGER; TEMP = SQLNumRows(ConnectionId); IF (TEMP >= 0) THEN RowCount = TEMP; ELSE ResultCode = TEMP; ENDIF; Opis Domyślne wyrażenie jest to wyrażenie związane z identyfikatorem connection ID. Może to być zapytanie tekstowe SQL (SELECT, INSERT, DELETE lub UPDATE), nazwa zapytania MS Access (z lub bez parametrów), nazwa procedury zachowanej w MS SQL Serverze (z lub bez parametrów). Domyślne wyrażenie można modyfikować za pomocą funkcji SQLLoadStatement, SQLSetStatement oraz SQLAppendStatement i można wykonać za pomocą funkcji SQLExecute, gdy StatementId = 0. SQLPrepareStatement(ConnectionId, StatementId) Przygotowuje domyślne wyrażenie i zwraca StatementId (1, 2, 3 itd.). Przygotowanie jest przydatne dla wyrażeń, które będą wykorzystywane przez funkcje SQLSetParam{Type}. SQLHandle jest określony jako drugi parametr funkcji w starszych wersjach SQL Access; jednakże obecna wersja SQL Access używa we wszystkich funkcjach StatementId zamiast SQLHandle. Funkcjonalność pozostaje jednak taka sama. SQLPrev(ConnectionId) Przesuwa wskaźnik bieżącego rekordu do poprzedniego rekordu logicznej tablicy i pobiera wartości z tego rekordu do zmiennych programu InTouch. Menedżer SQL Access Podręcznik użytkownika Funkcje SQL 31 SQLRollback(ConnectionId) Anuluje wykonanie transakcji utworzonej przez funkcję SQLTransact. SQLSelect(ConnectionId, TableName, BindList, WhereExpr, OrderByExpr) Funkcja ta wybiera informacje z wyszczególnionej tablicy w bazie danych. Podczas wykonywania funkcji SQLSelect() w pamięci tworzona jest tymczasowa tablica wynikowa (Results Table), zawierająca rekordy, które można przeszukiwać używając funkcji SQLFirst(), SQLLast(), SQLNext(), SQLNumRows i SQLPrev() Instrukcja: SELECT FROM TableName WHERE WhereExpr ORDER BY OrderByExpr Jeżeli wyrażanie jest wykonane poprawnie, tworzony jest tymczasowy zestaw rekordów (tablica logiczna), a lista powiązań wiąże zmienne programu InTouch z kolumnami tablicy jako przygotowanie do wykorzystania funkcji SQLFirst, SQLPrev, SQLNext, SQLLast oraz SQLNumRows. Tablica logiczna może także nie zawierać żadnych rekordów. Na przykład, jeżeli wyrażenie WhereExpr nie jest spełnione dla żadnego z rekordów. SQLSetParamChar(StatementId, ParameterNumber, Value, Length) Ustawia parametr ParameterNumber powiązany z StatementId na wartość tekstową (tekstem może być także jeden znak). Ostatni parametr funkcji określa maksymalną długość poprzedniego parametru. Jeżeli długość wartości tekstowej będzie większa niż ta określona w parametrze długość, tekst ten zostanie obcięty do podanej długości. Jeżeli długość jest określona na 0, wykorzystana zostanie cała długość tekstu. SQLSetParamDate(StatementId, ParameterNumber, Value) Ustawia parametr ParameterNumber związany z StatementId na wartość daty. Czas jest przyjmowany jako 12:00:00 AM (początek doby). SQLSetParamDateTime(StatementId, ParameterNumber, Value, Precision) Ustawia parametr ParameterNumber związany ze StatementId na wartość typu data/czas. Menedżer SQL Access Podręcznik użytkownika 32 Rozdział 4 SQLSetParamDecimal(StatementId, ParameterNumber, Value, Precision, Scale) Ustawia parametr ParameterNumber związany z StatementId na wartość typu całkowitego. Wartość może być tekstem (lub zmienną tekstową), która reprezentuje liczbę (123.456) lub wartość numeryczną (lub zmienną typu memory real). Wskazane jest, aby zmienna tekstowa była używana zamiast zmiennej typu real w celu zagwarantowania odpowiedniej precyzji parametru. Jednakże, jeżeli Wartość musi być zmiennoprzecinkowa (na przykład wartość jest otrzymana z serwera komunikacyjnego), wtedy funkcja także będzie działać poprawnie, natomiast nie będzie gwarancji utrzymania precyzji (ze względu na naturę notacji tych liczb). Precision jest liczbą cyfr, a Scale jest liczbą cyfr po kropce dziesiętnej. SQLSetParamFloat(StatementId, ParameterNumber, Value) Ustawia parametr ParameterNumber związany z StatementId na wartość 64bitową, ze znakiem, typu zmiennoprzecinkowego. SQLSetParamInt(StatementId, ParameterNumber, Value) Ustawia parametr ParameterNumber związany z StatementId na wartość 16bitową, ze znakiem, typu całkowitego. SQLSetParamLong(StatementId, ParameterNumber, Value) Ustawia parametr ParameterNumber związany z StatementId na wartość 32bitową, ze znakiem, typu całkowitego. SQLSetParamNull(StatementId, ParameterNumber, Type, Precision, Scale) Ustawia parametr ParameterNumber związany z StatementId na wartość NULL. Parametr Type może mieć następującą wartość: 0: tekst 1: data/czas 2: integer 3: float 4: decimal Menedżer SQL Access Podręcznik użytkownika Funkcje SQL 33 Porównanie z wartością NULL jest dokonywane zgodnie z ustawieniem ANSI_NULLS w MS SQL Serverze. Czas sprawdzania ustawienia tej opcji zależy od bazy danych. W SQL Server 7.0, wartość tej opcji jest sprawdzana w momencie tworzenia obiektu (nie w momencie wykonywania zapytania). Gdy procedura zachowana jest tworzona w SQL Serverze 7.0, a opcja ta jest domyślnie ustawiona na 1, zapytanie "WHERE MyField = NULL" zawsze zwraca NULL (FALSE) i w rezultacie zapytanie nie zwraca żadnego rekordu. Aby porównania = lub<> zwracały TRUE lub FALSE, konieczne jest ustawienie tej opcji na 0 w trakcie tworzenia procedury zachowanej. Jeżeli opcja ANSI_NULLS nie jest ustawiona na 0, funkcja SQLSetParamNull nie będzie działała prawidłowo. W takim przypadku, porównanie z wartością NULL powinno wykorzystywać składnię "WHERE MyField IS NULL" lub "WHERE MyField IS NOT NULL". Przykład Użycie funkcji SQLSetParamNull, aby zwrócić wszystkie rekordy z tabeli Products, dla których ProductName nie ma wartości NULL. Przyjmijmy że tworzymy procedurę zachowaną w SQL Serverze w następujący sposób. SET ANSI_NULLS OFF GO CREATE PROCEDURE sp_TestNotNull @ProductParam varchar(255) AS SELECT * FROM Products WHERE ProductName <> @ProductParam GO SET ANSI_NULLS ON GO InTouch może wykonać następujące skrypty. ResultCode = SQLSetStatement(ConnectionId, "sp_TestNotNull"); ResultCode = SQLPrepareStatement(ConnectionId, StatementId); ResultCode = SQLSetParamNull(StatementId, 1, 0, 0, 0); ResultCode = SQLExecute(ConnectionId, BindList, StatementId); ResultCode = SQLFirst(ConnectionId); ResultCode = SQLClearStatement(ConnectionId, StatementId); SQLSetParamTime(StatementId, ParameterNumber, Value) Ustawia parametr ParameterNumber związany z StatementId na wartość typu czas. Wraz z podanym czasem użyta jest także data systemowa. SQLSetStatement(ConnectionId, SQLStatement) Ustawia wyrażenie SQLStatement na domyślne wyrażenie SQL dla danego ConnectionId. Menedżer SQL Access Podręcznik użytkownika 34 Rozdział 4 SQLTransact(ConnectionId) Rozpoczyna transakcję z bazą danych. Transakcje mogą być zagnieżdżone w taki sposób, na jaki pozwala dostawca OLE DB dla danej bazy danych. Na przykład, dostawca OLE DB dla Microsoft Jet umożliwia zagnieżdżanie transakcji do 5 poziomów z pierwszą i ostatnią włącznie. SQLUpdate(ConnectionId, TableName, BindList, WhereExpr) Powoduje pobranie bieżących wartości zmiennych InTouch i uaktualnienie rekordów w tabeli o nazwie TableName spełniających kryterium podane w wyrażeniu WhereExpr. SQLUpdateCurrent(ConnectionId) Uaktualnia bieżący rekord w tabeli logicznej używając wartości ze zmapowanych zmiennych programu InTouch zgodnie z ich przypisaniem w liście powiązań. Jeżeli istnieją rekordy identyczne z bieżącym, wszystkie zostaną uaktualnione. Jeżeli istnieje zbyt dużo identycznych rekordów, po uaktualnieniu pewnej liczby rekordów funkcja może zwrócić błąd. Komunikat błędu może być np taki, "Microsoft Cursor Engine: Key column information is insufficient or incorrect. Too many rows were affected by update." Jednokrotnie można dokonywać jedynie zmiany 54 identycznych rekordów. Aby uniknąć tej sytuacji, należy stworzyć unikalny klucz w tabeli tak, aby żadne dwa rekordy nie były identyczne. Wskazane jest także, aby wszystkie wykorzystywane tabele miały klucz unikalny. Aby funkcja SQLUpdateCurrent modyfikowała jeden rekord, wskazane jest, aby dodawać do tabel MS Access pola typu AutoNumber i definiować go jako klucz podstawowy (primary key). Ten klucz podstawowy nie musi być definiowany w liście powiązań. Parametry funkcji SQL Poniżej opisano parametry wymagane przez każdą z funkcji SQL. Jeżeli parametr wprowadzony w skrypcie ujęty jest w cudzysłów ("Parametr1"), jako parametr użyty zostanie wprowadzony łańcuch znaków. Jeżeli znaki cudzysłowów nie są używane, system przyjmuje, że Parameter1 jest zmienną, po czym przeszukuje bazę danych programu InTouch w celu znalezienia wartości zmiennej Parameter1. Przykład "c:\main\file" vs. gdzie: Location location jest zmienną tekstową programu InTouch "c:\main\file" jest łańcuchem znaków Większość funkcji SQL wymaga podania co najmniej jednego spośród przedstawionych poniżej parametrów: BindList Parametr ten odpowiada nazwie listy powiązań w pliku SQL.DEF. Menedżer SQL Access Podręcznik użytkownika Funkcje SQL 35 ConnectionID Zmienna typu Memory Integer, utworzona przez użytkownika do przechowania numeru (ID) przypisywanego przez funkcję SQLConnect do każdego połączenia z bazą danych. ConnectString Nazwa bazy danych oraz dodatkowe informacje potrzebne do nawiązania połączenia przy pomocy funkcji SQLConnect(). ErrorMsg Zmienna typu tekstowego zawierająca opis komunikatu o błędzie. Aby dowiedzieć się więcej na temat opisów komunikatów błędów, zobacz Rozdział 5, "Rozwiązywanie problemów." FileName Nazwa pliku zawierającego odczytywaną instrukcję. MaxLen Maksymalny rozmiar kolumny, z którą związany jest parametr. Opcja ta wyznacza, czy parametr jest typu o różnej liczbie znaków, czy też typu o znacznie różnej liczbie znaków. Jeżeli parametr MaxLen ma długość równą lub mniejszą maksymalnej wartości dopuszczalnej w bazie danych, to parametr jest typu zmiennego. Jeżeli jest dłuższy, jest typu LONG VARYING. OrderByExpression Definiuje kolumnę i kierunek sortowania. Kluczem do sortowania mogą być wyłącznie nazwy kolumn. Wyrażenie musi być sformatowane: ColumnName [ASC|DESC] W celu posortowania zaznaczonej tabeli według nazwy kolumny (np. manager w kolejności rosnącej): "manager ASC" W celu posortowania względem kilku kolumn, należy podać: ColumnName [ASC|DESC], ColumnName [ASC|DESC] W celu posortowania zaznaczonej tabeli według jednej kolumny (np. temperatura) w kolejności rosnącej oraz według drugiej kolumny (np. czas) w kolejności malejącej. " temperature ASC, time DESC" Menedżer SQL Access Podręcznik użytkownika 36 Rozdział 4 ParameterNumber Numer parametru w instrukcji SQL. ParameterType Typ danych określonego parametru: Zakres dopuszczalnych wartości: Typ Opis Char Łańcuch znaków o stałej długości wypełniony znakami pustymi Var Char Łańcuch znaków o zmiennej długości Decimal Liczba dziesiętna w kodzie BCD Integer 4-bajtowa liczba całkowita ze znakiem Small Integer 2-bajtowa liczba całkowita ze znakiem Float 4-bajtowa liczba zmiennoprzecinkowa Double Precision Float 8-bajtowa liczba zmiennoprzecinkowa DateTime 8-bajtowa reprezentacja daty i czasu Date 4-bajtowa reprezentacja daty i czasu Time 4-bajtowa reprezentacja daty i czasu No Type Brak typu danych ParameterValue Wartość parametru. Precision Dokładność wartości podawanych w systemie dziesiętnym, maksymalna liczba znaków lub długość bajtów przeznaczonych do zapisu daty i czasu. RecordNumber Numer rekordu, który ma zostać odczytany. ResultCode Zmienna całkowita zwracana przez większość funkcji SQL. ResultCode wynosi 0, jeśli funkcja została wykonana pomyślnie oraz jest ujemną liczbą całkowitą, jeśli funkcja nie została wykonana poprawnie. Aby dowiedzieć się więcej, zobacz Rozdział 5, "Rozwiązywanie problemów." Menedżer SQL Access Podręcznik użytkownika Funkcje SQL 37 Scale Wartość dziesiętna skali. Jest wymagana tylko w przypadku, gdy dotyczy zerowanego parametru. StatementId StatementId jest wewnętrznym parametrem, wykorzystywanym przy tworzeniu zaawansowanych instrukcji SQL. SQLStatement Bieżąca instrukcja, przykładowo: ResultCode=SQLSetStatement(ConnectionID,”Select LotNo, LotName from LotInfo”); TableName Nazwa tablicy w bazie danych, której dotyczy operacja. TemplateName Nazwa zdefiniowanego szablonu tablicy, który ma zostać użyty przez funkcję. WhereExpression Warunek, który może być spełniony lub niespełniony dla każdego wiersza tablicy. Funkcja wybiera z tablicy tylko te wiersze, dla których warunek jest spełniony. Warunek musi mieć następujący format: NazwaKolumny operator_porównania wyrażenie Uwaga Jeśli w kolumnie znajdują się dane typu tekstowego, wyrażenie musi zostać wpisane w apostrofach. Poniższy przykład służy do wybrania wszystkich wierszy, w których w kolumnie name występuje ciąg znaków EmployeeID: name='EmployeeID' Kolejny przykład służy do wybrania wszystkich wierszy, w których w kolumnie Partno występuje liczba od 100 do 199: partno>=100 and partno<200 Następny przykład służy do wybrania wszystkich wierszy, w których w kolumnie Temperature występuje liczba większa od 350: temperature>350 Menedżer SQL Access Podręcznik użytkownika 38 Rozdział 4 Korzystanie z funkcji SQL w skryptach Funkcje SQL można automatycznie wstawiać do skryptów programu InTouch, poprzez kliknięcie przycisku Dodatkowe w oknie dialogowym edytora skryptów. Funkcja SQL zostanie wtedy automatycznie wstawiona do skryptu, w miejscu, w którym znajduje się kursor. Szczegółowe informacje na temat skryptów podano w Podręczniku użytkownika, Rozdział 6 "Skrypty". Zapytania złożone Moduł SQL Access pozwala na wysyłanie złożonych zapytań i instrukcji SQL. Zapytania te mogą być dynamicznie tworzone lub też mogą pochodzić z zewnętrznego pliku. Dodatkowo, zapytania te mogą zawierać parametry, przekazywane w zapytaniu w czasie pracy aplikacji. Po wywołaniu zapytania, może ono wrócić zbiór wynikowy. API modułu SQL Access pozwala na wywoływanie dowolnie złożonych instrukcji SQL, pod warunkiem, że obsłuży je baza danych oraz pozwala na przeglądanie wyników zapytania. Dodatkowo można także korzystać z procedur zachowanych. (Zachowane procedury nie są w pełni obsługiwane). Aby dowiedzieć się więcej na temat procedur zachowanych, zobacz rozdział "Obsługa procedur zachowanych." Dynamiczne budowanie zapytań Dynamiczne budowanie zapytań umożliwiają dwie dodatkowe funkcje: SQLSetStatement() i SQLAppendStatement(). SQLSetStatement() rozpoczyna nową instrukcję SQL. Może to być dowolna, poprawna instrukcja SQL, włączając w to nazwę procedury zachowanej. Ponieważ długość zmiennych InTouch typu testowego nie może przekraczać 131 znaków, stosowana jest funkcja SQLAppendStatement(), która dołącza dodatkowy łańcuch znaków do instrukcji. Uwaga Instrukcje języka SQL pisane są tekstem pogrubionym. Przykład ResultCode = SQLSetStatement (ConnectionID, "Select LotNo, LotName, LotDescription, LotQuantity from LotInfo, ProductionInfo"); ResultCode = SQLAppendStatement (ConnectionID, " where LotInfo.LotNo = ProductionInfo.LotNo"); ResultCode = SQLAppendStatement (ConnectionID, " order by LotNo,NotName,LotQuantity"); W tym momencie można wywołać instrukcję. Uwaga Bardzo często w nazwach kolumn baz danych i tabel rozróżniana jest wielkość liter. Warunkiem poprawnego wykonania podanego powyżej skryptu jest dokładne wpisanie nazw kolumn i baz danych, tak jak zdefiniowano je w tabelach baz danych. Menedżer SQL Access Podręcznik użytkownika Funkcje SQL 39 Odczytywanie instrukcji SQL z pliku Zapytanie może zostać utworzone przy pomocy innego programu, np. przy pomocy bazy danych Microsoft Access, czy też bazy danych innego producenta, po czym może one zostać wysłane przez moduł SQL Access. Do odczytywania instrukcji SQL z pliku przeznaczona jest funkcja SQLLoadStatement(). Przykład ResultCode = SQLLoadStatement ( ConnectionID, "c:\myappdir\lotquery.sql" ); W tym momencie można wywołać instrukcję. Określanie parametrów instrukcji SQL w czasie pracy aplikacji W celu zapewnienia pełnej funkcjonalności SQL, moduł SQL Access pozwala na wprowadzanie klauzuli where, zawierającej wartość zmiennej programu InTouch. Parametry mogą być określane w trakcie pracy aplikacji w następujących funkcjach: • • • • SQLPrepareStatement() SQLSetParamType() SQLClearStatement() SQLClearParam() W instrukcji SQL, w której wartość parametru ma zostać określona w późniejszym czasie, należy wstawić "?". Instrukcja ta jest "przygotowywana", następnie "przypisywana" jest wartość parametru, po czym następuje wykonanie instrukcji. SQLPrepareStatement() przygotowuje instrukcję do wykonania. Funkcja ta nie powoduje wykonania instrukcji, a wyłącznie uaktywnia tę instrukcję, co umożliwia przypisanie parametrom wartości. SQLSetParamType() to zbiór funkcji, pozwalających na przypisanie wartości różnym parametrom instrukcji SQL. Przykład ResultCode = SQLSetStatement (ConnectionID, "Select LotNo, LotName, LotDescription, LotQuantity from LotInfo, ProductionInfo"); ResultCode = SQLAppendStatement (ConnectionID, " where LotInfo.LotNo = ?"); ResultCode = SQLAppendStatement (ConnectionID, " order by LotNo,NotName,LotQuantity"); ResultCode = SQLPrepareStatement (ConnectionID, StatementId); {przypisz identyfikator instrukcji do zmiennej ''StatementId''} ResultCode = SQLSetParamInt (StatementId, 1, tagLotNumber); {przypisz do parametru wartość zmiennej tagLotNumber} Menedżer SQL Access Podręcznik użytkownika 40 Rozdział 4 Ponieważ instrukcja ta ma tylko jeden parametr, jest w tym momencie gotowa do wykonania. Po wykonaniu instrukcji oraz zakończeniu korzystania z niej, można wywołać funkcję SQLClearStatement() w celu zwolnienia zasobów zajmowanych przez tę instrukcję. Uwaga Wywołanie funkcji SQLEnd() zwalania zasoby zajmowane przez instrukcje SQL "bez nazwy" (wygenerowane przez istniejące funkcje języka SQL oraz instrukcje utworzone przy pomocy funkcji SQLSetStatement() i SQLLoadStatement(), a nie przygotowane funkcjami "Prepare". Wykonywanie rozbudowanych instrukcji SQL Jeżeli instrukcja została utworzona dynamicznie, albo odczytana z pliku oraz opcjonalnie przygotowano ją lub zmodyfikowano, można przystąpić do wykonywania jej. Moduł SQL Access korzysta w tym celu z funkcji SQLExecute(). SQLExecute() powoduje albo wykonanie aktywnej w danym momencie instrukcji (np. instrukcji przygotowanej za pomocą SQLSetStatement() lub SQLLoadStatement() lub instrukcji uprzednio przygotowanej, określonej przez identyfikator wewnętrznej instrukcji (parametr SQLHandle). Przykład 1 ResultCode = SQLLoadStatement ( ConnectionID, "c:\myappdir\lotquery.sql" ); ResultCode = SQLExecute(ConnectionID, "BindList", 0); {wyniki operacji selekcji należy przypisać do zmiennych określonych za pomocą parametru BindList identyfikator przygotowanej instrukcji jest równy 0} ResultCode = SQLNext ( ConnectionID ); {Pobierz wyniki zapytania SELECT} Przykład 2 ResultCode = SQLSetStatement (ConnectionID, "Select LotNo, LotName, LotDescription, LotQuantity from LotInfo, ProductionInfo"); ResultCode = SQLAppendStatement (ConnectionID, " where LotInfo.LotNo = ?"); {Znak zapytania oznacza, że wartość tego parametru zostanie ustalona w późniejszym czasie} ResultCode = SQLAppendStatement (ConnectionID, " order by LotNo,NotName,LotQuantity"); ResultCode = SQLPrepareStatement (ConnectionID, StatementId); {przypisz identyfikator instrukcji do zmiennej ''StatementId''} ResultCode = SQLSetParamInt (StatementId, 1, tagLotNumber); {przypisz do parametru wartość zmiennej tagLotNumber} Menedżer SQL Access Podręcznik użytkownika Funkcje SQL 41 ResultCode = SQLExecute (ConnectionID, "BindList", StatementId); {wstaw wyniki zapytania Select do zmiennych określonych w liście powiązań, przygotowana instrukcja jest identyfikowana przez StatementId} ResultCode = SQLNext ( ConnectionID ); {Pobierz wyniki zapytania SELECT} Przykład 3 SQLSetStatement - Instrukcja ta przeznaczona jest do budowania złożonych zapytań i wyrażeń tekstowych o długości przekraczającej 131 znaków. Jeżeli długość wyrażenia tekstowego przekracza 131 znaków, skorzystać z funkcji SQLAppend. SQLSetStatement(ConnectionID, “Select Speed, Ser_No from tablename where Ser_No =’” + Serial_input + “’”); SQLExecute(ConnectionID, "BindList", 0); W zamieszczonym powyżej przykładzie, wartość StatementId ustawiona zostaje na 0, dzięki czemu instrukcja nie wywołuje SQLPrepare(Connection_Id,StatementId) przed wykonaniem instrukcji. Ponieważ StatementId nie została utworzona przez SQLPrepare, w celu poprawnego zakończenia tej selekcji, skorzystać z funkcji SQLEnd w miejsce SQLClearStatement(). SQLSetStatement(Connection_Id, “Select Speed, Ser_No from tablename where Ser_No =’” + Serial_input + “’”); SQLPrepareStatement(Connection_Id, StatementId); SQLExecute(Connection_Id, StatementId); W zamieszczonym powyżej przykładzie, StatementId jest tworzona za pomocą SQLPrepareStatement i wykorzystywana w funkcji SQLExecute. W celu zakończenia tej instrukcji SELECT, a także w celu uwolnienia zasobów oraz zwolnienia StatementId, skorzystać z funkcji SQLClearStatement. Obsługa procedur zachowanych Funkcja SQLExceute() pozwala na wykonywanie niektórych procedur zachowanych. Przykładowo, załóżmy, że utworzona została procedura zachowana na serwerze baz danych o nazwie "LotInfoProc", zawierająca następujące instrukcje do selekcji: "Select LotNo, LotName from LotInfo." W celu wykonania tej procedury i otrzymania wyników, należy napisać następujący skrypt: Dla bazy Microsoft SQL Server ResultCode = SQLSetStatement ( ConnectionID, "LotInfoProc" ); ResultCode = ResultCode = SQLExecute(ConnectionID, "BindList", 0); SQLNext ( ConnectionID ); {Pobierz wyniki zapytania SELECT} Menedżer SQL Access Podręcznik użytkownika 42 Rozdział 4 Dla bazy Oracle lub Microsoft Access ResultCode = SQLSetStatement ( ConnectionID, "{CALL LotInfoProc}" ); ResultCode = ResultCode = SQLExecute(ConnectionID, "BindList", 0); SQLNext ( ConnectionID ); {Pobierz wyniki zapytania SELECT} Wczytywanie wartości do zmiennych programu InTouch Do przemieszczania się między rekordami logicznej tabeli i pobierania wartości z tych rekordów do zmiennych programu InTouch, służy pięć funkcji: SQLFirst, SQLPrev, SQLNext, SQLLast oraz SQLGetRecord. Jeżeli pole ma wartość NULL, wartość w zmiennej InTouch będzie 0 lub tekst zerowej długości w zależności od typu zmiennej InTouch. Jeżeli tekst w bazie danych będzie dłuższy niż 131 znaków, do zmiennej tekstowej InTouch zostanie skopiowanych tylko pierwsze 131 znaków. Zapisywanie wartości zmiennych InTouch do pól bazy danych Na zapisywanie i uaktualnianie rekordów w bazie danych pozwalają cztery funkcje skryptowe SQLUpdate, SQLUpdateCurrent, SQLInsert oraz SQLInsertExecute. Jeżeli zmienna programu InTouch jest dłuższa niż zdefiniowane pole w tabeli, wykorzystana zostanie tylko ta ilość znaków, na jaką pozwala długość pola. Ponieważ zmienne programu InTouch nie mogą mieć wartości NULL, nie można wstawić lub uaktualnić pola bazy danych wartością NULL. Aby wstawić do bazy danych wartość NULL, należy użyć funkcji SQLExecute i wyrażenia SQL typu INSERT i w ten sposób wprowadzić do pola wartość NULL. Niebezpieczeństwa przy uaktualnianiu danych Sposób modyfikowania danych przez program InTouch zarówno w zmiennych jak i w polach tabel bazy danych, umożliwia pojawienie się pewnych niepożądanych efektów. Niepożądana konwersja wartości NULL na zero lub pusty tekst Wykonywanie poleceń nawigacyjnych powoduje przepisanie wartości NULL do zmiennych programu InTouch jako zera lub puste teksty. Po uaktualnieniu różnych zmiennych zdefiniowanych w liście powiązań, wykonanie funkcji SQLUpdateCurrent spowoduje zapisanie zera lub pustego tekstu do pola w tabeli powodując nadpisanie wartości NULL. Wykonanie funkcji SQLUpdate spowoduje wprowadzenie wartości zero lub pustego tekstu w miejsce wartości NULL. Menedżer SQL Access Podręcznik użytkownika Funkcje SQL 43 Niepożądane wprowadzanie wartości zero lub pustego tekstu Wykonywanie poleceń nawigacyjnych powoduje przepisanie wartości NULL do zmiennych programu InTouch jako zera lub puste teksty. Po uaktualnieniu różnych zmiennych zdefiniowanych w liście powiązań, wykonanie funkcji SQLInsert lub SQLInsertExecute spowoduje zapisanie zera lub pustego tekstu do pola w tabeli powodując nadpisanie wartości NULL. Menedżer SQL Access Podręcznik użytkownika 44 Rozdział 4 Menedżer SQL Access Podręcznik użytkownika Rozwiązywanie problemów R O Z D Z I A Ł 45 5 Rozwiązywanie problemów W niniejszym rozdziale opisano metody usuwania problemów występujących w czasie korzystania z instrukcji SQL, przy pomocy parametru Resultcode, zwracanego przez funkcje SQL. Pierwszy z punktów poświęcono funkcji SQLErrorMsg(), zamieszczono w nim również zestawienie wartości parametru ResultCode i odpowiadających im komunikatów o błędach. W drugim punkcie zamieszczono tabele z komunikatami o błędach dla poszczególnych baz danych. Spis treści • Usuwanie problemów z funkcjami • Kody błędów dla poszczególnych baz danych • Analizowanie pracy modułu InTouch SQL Access Usuwanie problemów z funkcjami Wszystkie funkcje SQL zwracają parametr ResultCode, który może zostać wykorzystany przy usuwaniu problemów. Funkcja SQLErrorMsg() zwraca komunikat o błędzie, dla zadanego kodu ResultCode. Przykład ErrorMsg=SQLErrorMsg(ResultCode); gdzie: ErrorMsg jest zmienną typu Memory Message. ResultCode jest zmienną całkowitą, której wartość określa ostatnio uruchamiana funkcja SQL. Komunikaty o błędach W niniejszym dokumencie nie omówiono znaczenia poszczególnych wartości ResultCode, więcej informacji na temat tych wartości podano w dokumentacji do bazy danych. Należy również pamiętać o sprawdzeniu informacji wyświetlanych przez program diagnostyczny Wonderware Logger. Menedżer SQL Access Podręcznik użytkownika 46 Rozdział 5 Funkcja SQLErrorMsg() przypisuje wartość zmiennej tekstowej ErrorMsg. Poniżej zamieszczono zestawienie wybranych kodów błędów oraz odpowiadające im komunikaty, wraz z ich opisem. Kod błędu Komunikat Opis No errors occurred Instrukcja została zakończona pomyślnie bez wystąpienia błędu -1 <Komunikat od dostawcy> <Komunikat błędu od dostawcy> -2 An empty statement cannot be executed SQLExecute(ConnectionId, BindList, 0) jest wykonane bez uprzedniego wykonania SQLSetStatement lub SQLLoadStatement z wyrażeniem, które nie jest puste. -4 Value returned was Null Odczytana z bazy danych wartość całkowita lub zmiennoprzecinkowa to null. Jest to jedynie ostrzeżenie wysyłane do programu Wonderware Logger. -5 No more rows to fetch Odczytany został ostatni rekord bazy danych -7 Invalid parameter ID SQLSetParamI{Type} zostało wywołane z nieprawidłowym parametrem ID. -8 Invalid parameter list Przykład nieprawidłowej listy parametrów: 1, 2, 3, 5 (brakuje 4). -9 Invalid type for NULL parameter SQLSetParamNull zostało wywołane z nieprawidłowym typem. -10 Changing data type of parameter is not allowed SQLSetParam {Type} funkcja została wywołana z nieprawidłowym typem istniejącego parametru. -11 Adding parameter after the statement has been executed successfully is not allowed. SQLSetParam {Type} funcja została wywołana dla nowego ID parametru po tym, jak wyrażenie zostało pomyślnie wykonane. -12 Invalid date time format Został wprowadzony nieprawidłowy czas lub data, na przykład, uruchamiając jedną z funkcji SQLSetParamTime, SQLInsertExecute lub SQLUpdateCurrent. -13 Invalid decimal format Została wprowadzona nieprawidłowa liczba, na przykład, uruchamiając jedną z funkcji SQLSetParamDecimal, SQLInsertExecute lub SQLUpdateCurrent. -14 Invalid currency format Została wprowadzona nieprawidłowa wartość walutowa, na przykład, uruchamiając jedną z funkcji SQLInsertExecute lub SQLUpdateCurrent. -15 Invalid statement type for this operation Funkcja SQLInsertEnd jest uruchamiana dla wyrażenia utworzonego przez funkcję SQLPrepareStatement lub funkcja SQLClearStatement jest uruchamiana dla wyrażenia utworzonego przez funkcję SQLInsertPrepare. -1001 No memory Brak wolnej pamięci na zakończenie instrukcji. -1002 Invalid connection Niepoprawny parametr ConnectionID przekazany do funkcji. 0 Menedżer SQL Access Podręcznik użytkownika Rozwiązywanie problemów 47 Kod błędu Komunikat Opis -1003 No bind list found Lista powiązań o zadanej nazwie nie istnieje. -1004 No template found Szablon o zadanej nazwie nie istnieje -1005 Internal Error Wystąpił błąd wewnętrzny. Skontaktować się z serwisem. -1006 String is null Ostrzeżenie - z bazy danych odczytano pusty łańcuch znaków Jest to jedynie ostrzeżenie wysyłane do programu Wonderware Logger. -1007 String is truncated Ostrzeżenie - łańcuch znaków odczytany z bazy danych ma więcej niż 131 znaków i został on obcięty. Do programu Wonderware Logger wysyłane jest ostrzeżenie. -1008 No Where clause Brak klauzuli Where dla Delete. -1009 Connection failed Błąd w komunikacji, szczegółowy opis problemu podany jest w programie diagnostycznym Wonderware Logger -1010 The database specified on the Określona baza danych nie istnieje. DB= portion of the connect string does not exist -1011 No rows were selected Podjęto próbę wykonania polecenia SQLNumRows(), SQLFirst(), SQLNext(),SQLLast lub SQLPrev(), bez uprzedniego wykonania polecenia SQLSelect() lub SQLExecute(). -1013 Unable to find file to load Funkcja SQLLoadStatement została wywołana z plikiem, który nie istnieje. Kody błędów dla poszczególnych baz danych Oracle Więcej informacji na temat błędów charakterystycznych dla serwera Oracle można znaleźć w dokumentacji Oracle. Menedżer SQL Access Podręcznik użytkownika 48 Rozdział 5 Microsoft SQL Server Komunikat Rozwiązanie You cannot have more than one statement active at a time Próba wykonania polecenia SQL po wykonaniu SQLSelect(). Wywołać polecenie SQLEnd() w celu zwolnienia zasobów systemu po wywołaniu SQLSelect() lub też przeznaczyć dla drugiej instrukcji oddzielny parametr ConnectionID. There is not enough memory Spróbować ponownie uruchomić stację available to process the command kliencką Invalid object name table name Nazwa tablicy nie istnieje w używanej bazie danych. Spróbować skorzystać z instrukcji DB=nazwa bazy danych. Więcej informacji na temat błędów charakterystycznych dla serwera Microsoft SQL Server można znaleźć w dokumentacji firmy Microsoft. Analizowanie pracy modułu InTouch SQL Access Aby dokonać dokładnej analizy skryptów SQL, w sekcji [InTouch] pliku win.ini należy wprowadzić linię SQLTrace=1. Nowy moduł SQL Access nie używa pliku sqltrace.txt. Menedżer SQL Access Podręcznik użytkownika Zarezerwowane słowa kluczowe Z A Ł Ą C Z N I K 49 A Zarezerwowane słowa kluczowe SQL Access oraz ODBC Poniżej zestawiono słowa kluczowe, z których nie można korzystać w liście powiązań modułu SQL Access oraz w interfejsie Open Database Connectivity (ODBC). Jeżeli zarezerwowane słowo kluczowe zostanie wprowadzone w polu Column Name (Nazwa kolumny) w oknie edycyjnym listy powiązań lub szablonów tabel, program Wonderware Logger wygeneruje komunikat o błędzie. Rodzaj wygenerowanego błędu zależy od wersji wykorzystywanego sterownika ODBC oraz od miejsca, w którym słowo kluczowe zostało wprowadzone. Przykładowo, jednym z najczęściej spotykanych błędów jest użycie słów DATE i TIME jako nazw kolumn w czasie definiowania listy powiązań lub szablonu tabel. W celu uniknięcia tego błędu, należy wprowadzić nieznacznie zmodyfikowaną nazwę, np. "aDate", czy "aTime". Słowa kluczowe stanowią część języka SQL (Structured Query Langugage), wykorzystywanego przez pakiet InTouch. Słowa kluczowe są również rozpoznawane przez sterowniki ODBC. Moduł SQL Access przesyła polecenie SQL, zawierające jedno lub więcej zarezerwowanych słów do pliku ODBC.DLL. Jeżeli polecenie SQL nie może zostać poprawnie zinterpretowane, Moduł SQL Access przesyła komunikat o błędzie do programu Wonderware Logger. ABSOLUTE ADA ADD ALL ALLOCATE ALTER AND ANY ARE AS ASC ASSERTION AT AUTHORIZATION AVG BEGIN BETWEEN BIT BIT_LENGTH Poniżej wymieniono w kolejności alfabetycznej zarezerwowane słowa kluczowe: CONSTRAINT BY CONSTRAINTS CASCADE CONTINUE CASCADED CONVERT CASE CORRESPONDING CAST COUNT CATALOG CREATE CHAR CURRENT CHAR_LENGTH CURRENT_DATE CHARACTER CURRENT_TIME CHARACTER_LENGTH CURRENT_TIMESTAMP CHECK CURSOR CLOSE COALESCE DATE COBOL DAY COLLATE DEALLOCATE COLLATION DEC COLUMN DECIMAL COMMIT DECLARE CONNECT DEFERRABLE CONNECTION Menedżer SQL Access Podręcznik użytkownika 50 DEFERRED ENTF DESC DESCRIBE DESCRIPTOR DIAGNOSTICS DICTIONARY DISCONNECT DISPLACEMENT DISTINCT DOMAIN DOUBLE DROP ELSE ENDEESC EXCEPT EXCEPTION EXEC EXECUTE EXISTS EXTERNAL EXTRACT FALSE FETCH FIRST FLOAT FOR FOREIGN FORTRAN FOUND FROM FULL GET GLOBAL GO GOTO GRANT GROUP HAVING HOUR IDENTITY IGNORE IMMEDIATE IN INCLUDE INDEX INDICATOR INITIALLY INNER INPUT INSENSITIVE EINFÜGEN INTEGER INTERSECT INTERVALL INTO Dodatek A IS ISOLATION JOIN KEY LANGUAGE LAST LEFT LEVEL LIKE LOCAL LOWER MATCH MAX MIN MINUTE MODULE MONTH MUMPS NAMES NATIONAL NCHAR NEXT NONE NOT NULL NULLIF NUMERIC OCTET_LENGTH OF OFF ON ONLY OPEN OPRN OPTION OR ORDER OUTER OUTPUT OVERLAPS PARTIAL PASCAL PLI POSITION PRECISION PREPARE PRESERVE PRIMARY PRIOR PRIVILEGES PROCEDURE PUBLIC RESTRICT REVOKE Menedżer SQL Access Podręcznik użytkownika RIGHT ROLLBACK ROWS SCHEMA SCROLL SECOND SECTION SELECT SEQUENCE SET SIZE SMALLINT SOME SQL SQLCA SQLCODE SQLERROR SQLSTATE SQLWARNING SUBSTRING SUM SYSTEM TABLE TEMPORARY THEN TIME TIMESTAMP TIMEZONE_HOUR TIMEZONE_MINU TO TRANSACTION TRANSLATE TRANSLATION TRUE UNION UNIQUE UNKNOWN UPDATE UPPER USAGE USING WERT VALUES VARCHAR VARING VIEW WHEN WHENEVER WHERE WITH WORK YEAR Zarezerwowane słowa kluczowe 51 InTouch Następujące słowa są zarezerwowane dla programu InTouch: As Call Dim Discrete Integer Message Real Return RetVal Menedżer SQL Access Podręcznik użytkownika 52 Dodatek A Menedżer SQL Access Podręcznik użytkownika 53 Indeks A Administrator ODBC 8 B Baza danych 5 BindListName 24, 34 C SQLSetParamFloat 32 SQLSetParamInt 32 SQLSetParamLong 32 SQLSetParamNull 32 SQLSetParamTime 33 SQLSetStatement 33 SQLTransact 34 SQLUpdate 34 SQLUpdateCurrent 34 Wykorzystywanie 25 Funkcje SQL 25 Column Name (Nazwa kolumny) 18 ConnectionID 35 ConnectString 35 CSV 6, 24 I D K Dla bazy Microsoft SQL Server 11 Dynamiczne budowanie zapytań 38 Kompatybilność z ODBC 8 Komunikaty błędów dla poszczególnych baz danych Microsoft SQL Server 48 Komunikaty o błędach 45 Konfigurowanie listy powiązań 16 Konfigurowanie modułu SQL Access 15 Konfigurowanie szablonu tabeli 21 Korzystanie z funkcji SQL w skryptach 38 E ErrorMsg 35 F FileName 35 Format funkcji SQL 25 Funkcja Delim 20 Funkcje SQLAppendStatement 26 SQLClearParam 26 SQLClearStatement 26 SQLClearTable 26 SQLCommit 26 SQLConnect 11 SQLCreateTable 27 SQLDelete 28 SQLDisconnect 28 SQLDropTable 28 SQLEnd 28 SQLErrorMsg 28 SQLExecute 28 SQLFirst 28 SQLGetRecord 28 SQLInsert 29 SQLInsertEnd 29 SQLInsertExecute 29 SQLInsertPrepare 29 SQLLast 29 SQLLoadStatement 29 SQLManageDSN 30 SQLNumRows 30 SQLPrepareStatement 30 SQLPrev 30 SQLRollback 31 SQLSelect 31 SQLSetParamChar 31 SQLSetParamDate 31 SQLSetParamDecimal 32 Informacje o podręczniku użytkownika 6 L Lista powiązań 16 modyfikowanie 19 Przeglądarka zmiennych 17 tworzenie nowej 16 usuwanie 19 M MaxLen 35 Microsoft Access 12 Obsługiwane typy danych 13 Wymogi do nawiązania połączenia 12 Microsoft SQL Server Obsługiwane typy danych 12 Wymogi do nawiązania połączenia 11 Mircrosoft SQL Server Obsługiwane typy danych 13 Modyfikacja rozszerzonych wyrażeń SQL 39 modyfikowanie listy powiązań 19 modyfikowanie szablonu tabeli 23 O Obsługa procedur zachowanych 41 Obsługiwane bazy danych 11 Microsoft Access 12 Microsoft SQL Server 11 Obsługiwane typy danych 13 ODBC.INI 8 Odczytywanie instrukcji SQL z pliku 39 Oracle Obsługiwane typy danych 13 Menedżer SQL Access Podręcznik użytkownika 54 tworzenie nowej 21 usuwanie 23 OrderByExpression 35 P ParameterNumber 36 Parameters 34 ParameterType 36 ParameterValue 36 Parametr BindListName 34 ConnectionID 35 ConnectString 35 ErrorMsg 35 FileName 35 MaxLen 35 OrderByExpression 35 ParameterNumber 36 ParameterType 36 ParameterValue 36 Precision 36 RecordNumber 36 ResultCode 36 Scale 37 SQLStatement 37 StatementId 37 TableName 37 TemplateName 37 WhereExpression 37 Parametry funkcji SQL 34 Podręczniki Online 7 Polecenia Szablon tabeli 23 Polecenie Table Template (Szablon tabeli) 23 Pomoc techniczna Wonderware 7 Precision 36 Przegląd modułu SQL Access 15 Przeglądarka zmiennych 17 T Table Template Name (Nazwa szablonu tabeli) 22, 24 TableName 37 Tagname.FieldName (Zmienna.Pole) 18 TemplateName 37 U usuwanie listy powiązań 19 Usuwanie problemów 45 usuwanie szablonu tabeli 23 W WhereExpression 37 Wprowadzenie do modułu SQL Access 5 Wykonywanie rozbudowanych instrukcji SQL 40 Z Zapisywanie daty i czasu do pól bazy danych Oracle 10 Zapytania Dynamiczne budowanie 38 Złożone 38 Zapytania złożone 38 Znaki rozdzielające 20 R RecordNumber 36 ResultCode 36, 45 Rozwiązywanie problemów z funkcjami SQL 45 S Słowa kluczowe 49 Scale 37 Separatory specjalne 20 Skrypty QuickScripts 38 SQL.DEF 6, 24 SQLConnect 11 SQLErrorMsg 45 SQLInsert 20 SQLSelect 31 SQLStatement 37 SQLUpdate 20, 34 StatementId 37 Structured Query Language 5 Szablon tabeli 21 modyfikowanie 23 Menedżer SQL Access Podręcznik użytkownika