background image

Wonderware

®

 FactorySuite™

SQL Access

Wersja A

Ostatnia wersja: Sierpień 2002

Invensys Systems, Inc.

background image

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 przejmują odpowiedzialności za 
błędy i omyłkowe pominięcia. Nie jest również przyjmowana 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.
33 Commercial Street
Foxboro, MA 02035
(949) 727-3200
http://www.wonderware.com

Znaki handlowe
Terminy używane w niniejszej książce, 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 
książce nie może być traktowane jako naruszanie praw do tych znaków 
handlowych lub oznaczeń usług.
Alarm Logger, ActiveFactory, ArchestrA, Avantis, DBDump, DBLoad, 
DTAnalyst, FactoryFocus, FactoryOffice, FactorySuite, hotlinks, 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.

background image

Spis treści

3

Menedżer SQL Access Podręcznik użytkownika

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

Oracle 8.0 ............................................................................................... 9

Funkcja SQLConnect()....................................................................... 9
Zapisywanie daty i czasu do pól bazy danych Oracle ...................... 10

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 ............................................................................................. 25

Parametry funkcji SQL......................................................................... 34
Korzystanie z funkcji SQL w skryptach .............................................. 37

Zapytania złożone............................................................................. 37
Wczytywanie wartości do zmiennych programu InTouch ............... 42
Zapisywanie wartości zmiennych InTouch do pól bazy danych ...... 42
Niebezpieczeństwa przy uaktulanianiu danych ................................ 42

ROZDZIAŁ 5:  Rozwiązywanie problemów......43

Usuwanie problemów z funkcjami....................................................... 43

Komunikaty o błędach...................................................................... 43

background image

4

Spis  treści

Menedżer SQL Access Podręcznik użytkownika

Kody błędów dla poszczególnych baz danych .....................................46
Analizowanie pracy modułu InTouch SQL Access ..............................46

ZAŁĄCZNIK A:  Zarezerwowane słowa 

kluczowe ............................................................47

SQL Access oraz ODBC ...................................................................47
InTouch..............................................................................................49

 Indeks................................................................51

background image

Moduł SQL Access

5

Menedżer SQL Access Podręcznik użytkownika

R O Z D Z I A Ł   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.

background image

6

Rozdział 1

Menedżer SQL Access Podręcznik użytkownika

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 karotoece 
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.

podręczniku użytkownika InTouch omówiono środowisko edycyjne 
w programie 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".

background image

Moduł SQL Access

7

Menedżer SQL Access Podręcznik użytkownika

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 
Podręczniku Użytkownika SPC Pro.

Szczegóły dotyczące dodatkowego programu Recipe Manager podano 
Podręczniku Użytkownika Recipe Manager.

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 wsparcie 
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.

background image

8

Rozdział 1

Menedżer SQL Access Podręcznik użytkownika

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 

NameSet Default, lub Configure. Okno dialogowe ODBC Driver 
Setup
.

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 nie obsł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.

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.

Aplikacja InTouch'a - 
Folder

Kartoteka w której umieszczone są pliki bazy 
danych. Jeżeli nie jest określona żadna kartoteka, 
wykorzystywana będzie kartoteka bieżąca. 

background image

Konfigurowanie i nawiązywanie połączenia z bazą danych

9

Menedżer SQL Access Podręcznik użytkownika

R O Z D Z I A Ł   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

• 

Oracle 8.0

• 

Microsoft SQL Server

• 

Microsoft Access

• 

Zestawienie typów w obsługiwanych bazach 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."

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

ść

>;...");

background image

10

Rozdział 2

Menedżer SQL Access Podręcznik użytkownika

Poniżej podano atrybuty wykorzystywane przez bazę danych 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ć parametrydelim function.

W celu rejestrowania w polu danych bazy Oracle daty i czasu

1. W Eksploratorze aplikacji, w grupie Moduł SQL Access kliknąć Lista 

powiązań. Wyświetlone zostanie okno dialogowe Konfiguracja listy 
powiązań
.

2. W polu Zmienna.Pole wprowadzić zmienną, która ma być 

wykorzystywana.

3. W polu Nazwa kolumny wpisać funkcję DATE_TIME delim().

Atrybut

Wartość

Provider

MSDAORA

User ID

Nazwa użytkownika.

Password

Hasło.

Data Source

Nazwa serwera Oracle

background image

Konfigurowanie i nawiązywanie połączenia z bazą danych

11

Menedżer SQL Access Podręcznik użytkownika

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')

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 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 Microsoft SQL 
Server:

Atrybut

Wartość

Dostawca

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.

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.

background image

12

Rozdział 2

Menedżer SQL Access Podręcznik użytkownika

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, and 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. Jeżeli długość jest określana należy podać Szerokość. 
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");

background image

Konfigurowanie i nawiązywanie połączenia z bazą danych

13

Menedżer SQL Access Podręcznik użytkownika

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

Microsoft SQL Server

Microsoft Access 2000

Typ danych Długość

Domyślna

Zakres 

wartości

Typ 

zmiennej

char

2000 znaków

1 znak

 

Message

number

38 cyfr

38 cyfr

 

Integer

Typ danych Długość

Domyślna

Zakres 

wartości

Typ 

zmiennej

char

8000 znaków

 

 

Message

int

  

-2147483648 
do 
2147483647

Integer

float

15 cyfr

-1.79E

+308 

 do 

1.79E

+308

Real

Typ danych Długość

Domyślna

Zakres 

wartości

Typ 

zmiennej

wartość 
tekstowa

255 znaków

Message

number

Integer

number

Real

background image

14

Rozdział 2

Menedżer SQL Access Podręcznik użytkownika

background image

Konfigurowanie modułu SQL Access

15

Podręcznik Użytkownika programu InTouch

R O Z D Z I A Ł   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 Tabeli umożliwia zdefiniowanie 
struktury i formatu nwoej 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.

background image

16

Rozdział 3

Podręcznik Użytkownika programu InTouch

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 Specjalne wybrać SQL Access Manager, a następnie kliknąć 

Lista powiązań, lub rozwinąć grupę SQL Access Manager 
w Eksploratorze aplikacji, a następnie podwójnie kliknąć Lista powiązań.

2. Kliknąć Nowy.

background image

Konfigurowanie modułu SQL Access

17

Podręcznik Użytkownika programu InTouch

3. Wyświetlone zostanie okno dialogowe 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 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 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 Lista zmiennych i zdefiniować ją.

6. Kliknąć Zmienna w celu wybrania jednej z zdefiniowanych wcześniej 

zmiennych. Wyświetlona zostanie Przeglądarka zmiennych.

background image

18

Rozdział 3

Podręcznik Użytkownika programu InTouch

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ę 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 zachownie nie jest wymagane 
połączenie z bazą danych.

Więcej informacji na temat przeglądarki zmiennych podano 
w podręczniku Podręczniku użytkownika programu InTouch.

7. Kliknąć Pole w celu wybrania pola zmiennej. Wyświetlone zostanie okno 

dialogowe Wybierz nazwę pola.

8. Zaznaczyć pole, które ma być wstawione. Okno dialogowe zostanie 

zamknięte, a wybrane pole automatycznie wstawione do pola 
Zmienna.Pole.

Więcej informacji na temat pól zmiennych podano w Rozdziale 4 
podręcznika InTouch  Podręcznik użytkownika.

9. W polu 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ąć Przenieś w górę w celu przesunięcia na liście wybranej zmiennej 

o jeden poziom wyżej.

11. Kliknąć Przesuń w dół w celu przesunięcia na liście wybranej zmiennej 

o jeden poziom niżej.

12. Kliknąć Dodaj w celu dodania pól i nazw kolumn do listy powiązań.

13. Kliknąć Usuń w celu usunięcia zaznaczonych pól i nazw kolumn z listy 

powiązań.

14. Kliknąć Modyfikuj w celu zmienienia na liście powiązań zaznaczonych 

pól Zmienna.Pole i Nazwa kolumny .

15. Kliknąć OK w celu zapisania listy powiązań i zamknięcia okna 

dialogowego.

background image

Konfigurowanie modułu SQL Access

19

Podręcznik Użytkownika programu InTouch

Wskazówka: Kliknięcie Zapisz powoduje zapisanie wprowadzonych 
zmian, bez zamykania okna dialogowego.

W celu wprowadzenia zmian na liście powiązań

1. Z menu Specjalne wybrać SQL Access Manager, a następnie kliknąć 

Lista powiązań, lub rozwinąć grupę SQL Access Manager 
w Eksploratorze aplikacji, a następnie podwójnie kliknąć Lista powiązań.

2. Wyświetlone zostanie okno dialogowe Wybierz listę powiązań.

3. Zaznaczyć nazwę listy powiązań, a następnie kliknąć Modyfikuj

Wyświetlone zostanie okno dialogowe 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 Specjalne wybrać SQL Access Manager, a następnie kliknąć 

Lista powiązań, lub rozwinąć grupę SQL Access Manager 
w Eksploratorze aplikacji, a następnie podwójnie kliknąć Lista powiązań.

2. Wyświetlone zostanie okno dialogowe Wybierz listę powiązań.

3. Zaznaczyć nazwę listy powiązań, która ma być usunięta.

4. Kliknąć Usuń. Wyświetlone zostanie okno dialogowe żądające 

zatwierdzenia zamiaru wykonania tej czynności. Kliknąć Tak w celu 
usunięcia zaznaczonego Szablonu tabeli, lub kliknąć Nie w celu 
anulowania tej operacji. Wyświetlone zostanie ponownie okno dialogowe 
Konfiguracja listy powiązań:

5. Kliknąć OK w celu zamknięcia okna dialogowego.

background image

20

Rozdział 3

Podręcznik Użytkownika programu InTouch

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 Konfiguracja listy powiązań, w polu 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 (‘ ‘)

Należy zwrócić uwagę na linię date delim (‘,’) wprowadzoną w kolumnie 
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." 

background image

Konfigurowanie modułu SQL Access

21

Podręcznik Użytkownika programu InTouch

Konfigurowanie Szablonu tabeli

Szablon tablicy umożliwia zdefiniowanie struktury i formatu nowej tabeli 
w bazie danych.

W celu utworzenia nowego szablonu tabeli

1. Z menu Specjalne wybrać SQL Access Manager, a następnie kliknąć 

Szablon tabeli, lub rozwinąć grupę SQL Access Manager 
w Eksploratorze aplikacji, a następnie podwójnie kliknąć Szablon tabeli.

2. Kliknąć Nowy.

3. Wyświetlone zostanie okno dialogowe 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.

4. W polu Nazwa szablonu tablicy wpisać nazwę szablonu tabeli.

background image

22

Rozdział 3

Podręcznik Użytkownika programu InTouch

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 Nazwa kolumny wpisać nazwę szablonu tabeli. Długość nazwy 

kolumny nie może przekraczać 30 znaków.

6. W polu 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 Typ indeksu, zgodnie z podanym poniżej 

opisem.

Bez powtórzeń
Wartości w kolumnie nie mogą się powtarzać.

Z powtórzeniami
Wartości w kolumnie mogą się powtarzać.

-
Bez indeksu

Wskazówka: Po wywołaniu funkcji SQLCreateTable() tworzony jest 
automatycznie plik z indeksowaniem.

8. Zaznaczyć opcję 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:

W momencie przypisywania do zmiennej pola bazy danych bez wartości, 
wartość zmiennej zostanie wyznaczona zgodnie z powyższym 
zestawieniem.

9. Kliknąć Dodaj w celu dodania wartości wprowadzonych w polach Nazwa 

kolumny, Typ kolumny, Długość i Typ indeksu do szablonu tabeli.

10. Kliknąć Usuń w celu usunięcia wartości wprowadzonych w polach 

Nazwa kolumny, Typ kolumny, Długość i Typ indeksu z szablonu tabeli.

Typ danych

Wartość

Discrete

0

Integer

0

Message

Pusty łańcuch znaków.

background image

Konfigurowanie modułu SQL Access

23

Podręcznik Użytkownika programu InTouch

11. Kliknąć Modyfikuj w celu zmodyfikowania w szablonie tabeli wartości 

wprowadzonych w polach Nazwa kolumny, Typ kolumny, Długość i Typ 
indeksu.

12. Kliknąć OK w celu zapisania szablonu tabeli i zamknięcia okna.

Wskazówka: Kliknięcie Zapisz powoduje zapisanie wprowadzonych 
zmian, bez zamykania okna dialogowego. 

W celu zmodyfikowania szablonu tabeli

1. Z menu Specjalne wybrać SQL Access Manager, a następnie kliknąć 

Szablon tabeli, lub rozwinąć grupę SQL Access Manager 
w Eksploratorze aplikacji, a następnie podwójnie kliknąć Szablon tabeli.

2. Wyświetlone zostanie okno dialogowe Wybierz szablon tablicy.

3. Zaznaczyć nazwę szablonu tabeli, a następnie kliknąć Modyfikuj

Wyświetlone zostanie okno dialogowe 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 Specjalne wybrać SQL Access Manager, a następnie kliknąć 

Szablon tabeli, lub rozwinąć grupę SQL Access Manager 
w Eksploratorze aplikacji, a następnie podwójnie kliknąć Szablon tabeli.

2. Wyświetlone zostanie okno dialogowe Wybierz szablon tablicy.

3. Zaznaczyć nazwę szablonu tabeli, który ma być usunięty.

4. Kliknąć Usuń. Wyświetlone zostanie okno dialogowe żądające 

zatwierdzenia zamiaru wykonania tej czynności. Kliknąć Tak w celu 
usunięcia zaznaczonego Szablonu tabeli, lub kliknąć Nie w celu 
anulowania tej operacji. Wyświetlone zostanie ponownie okno dialogowe 
Konfiguracja szablonu tablicy:

5. Kliknąć OK w celu zamknięcia okna dialogowego.

background image

24

Rozdział 3

Podręcznik Użytkownika programu InTouch

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

background image

Funkcje SQL

25

Menedżer SQL Access Podręcznik użytkownika

R O Z D Z I A Ł   4

Funkcje SQL

Program InTouch korzysta z funkcji SQL do wymiany informacji z baza 
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
.

Funkcja

SQLAppendStatement(ConnectionId, 
SQLStatement)

Dołącza wyrażenie SQLStatement do domyślnego wyrażenia SQL dla 
ConnectionId.

background image

26

Rozdział 4

Menedżer SQL Access Podręcznik użytkownika

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).

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.

background image

Funkcje SQL

27

Menedżer SQL Access Podręcznik użytkownika

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 Wondwerare Logger informacji o wersji ADO, 
dostawcy i bazie danych.

SQLCreateTable(ConnectionId, TableName, 
TemplateName)

Tworzy tablicę o nazwie TableName używając szablonu TemplateName.

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). 

background image

28

Rozdział 4

Menedżer SQL Access Podręcznik użytkownika

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ń, rezustalt 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. 

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.

background image

Funkcje SQL

29

Menedżer SQL Access Podręcznik użytkownika

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.

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.

background image

30

Rozdział 4

Menedżer SQL Access Podręcznik użytkownika

SQLNumRows(ConnectionId)

Zwraca liczbę rekordów w tablicy logicznej. Poniważ 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.

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 
SQLPrev() 

Wykonanie instrukcji:

SELECT FROM TableName WHERE WhereExpr ORDER BY OrderByExpr

background image

Funkcje SQL

31

Menedżer SQL Access Podręcznik użytkownika

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 żądnego 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 z StatementId na wartość typu 
data/czas.

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 gwaranacji 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ść 64-
bitową, ze znakiem, typu zmiennoprzecinkowego.

background image

32

Rozdział 4

Menedżer SQL Access Podręcznik użytkownika

SQLSetParamInt(StatementId, 
ParameterNumber, Value)

Ustawia parametr ParameterNumber związany z StatementId na wartość 16-
bitową, ze znakiem, typu całkowitego.

SQLSetParamLong(StatementId, 
ParameterNumber, Value)

Ustawia parametr ParameterNumber związany z StatementId na wartość 32-
bitową, 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: message

1: date/time

2: integer

3: float

4: decimal

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 żanego 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

background image

Funkcje SQL

33

Menedżer SQL Access Podręcznik użytkownika

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.

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 piewszą 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)

Uaktulania 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 
uaktulanieniu 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.

background image

34

Rozdział 4

Menedżer SQL Access Podręcznik użytkownika

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, ze Parameter1 jest zmienną, 
po czym przeszukuje bazę danych programu InTouch w celu znalezienia 
wartości zmiennej Parameter1.

Przykład

"c:\main\file" vs.  Location

gdzie:

location jest zmienną tekstowa 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.

ConnectionID

Zmienna typu Memory Integer, utworzona przez użytkownika do pamiętania 
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ę.

background image

Funkcje SQL

35

Menedżer SQL Access Podręcznik użytkownika

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 większą od maksymalnej wartości dopuszczalnej w bazie danych, to 
parametr jest typu VARYINGPAGEvarying character, long varying 
character.PAGEvarying character, long varying character 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"

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

background image

36

Rozdział 4

Menedżer SQL Access Podręcznik użytkownika

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."

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”);

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

Czas

4-bajtowa reprezentacja daty 
i czasu

No Type

Brak typu danych

Typ

Opis

background image

Funkcje SQL

37

Menedżer SQL Access Podręcznik użytkownika

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

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..
Aby dowiedzieć się więcej na temat procedur zachowanych, zobacz rozdział 
"Obsługa procedur zachowanych."

background image

38

Rozdział 4

Menedżer SQL Access Podręcznik użytkownika

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.

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()

background image

Funkcje SQL

39

Menedżer SQL Access Podręcznik użytkownika

• 

SQLClearStatement()

• 

SQLClearParam()

W instrukcji SQL, w którym 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}

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() 
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).

background image

40

Rozdział 4

Menedżer SQL Access Podręcznik użytkownika

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}

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);

background image

Funkcje SQL

41

Menedżer SQL Access Podręcznik użytkownika

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 skorzystać z funkcji SQLClearStatement 
w celu uwolnienia zasobów, oraz zwolnienia StatementId.

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  =  SQLExecute(ConnectionID, "BindList", 0);

ResultCode =   SQLNext ( ConnectionID );

{Pobierz wyniki zapytania SELECT}

Dla bazy Oracle lub Microsoft Access

ResultCode  =  SQLSetStatement ( ConnectionID, "{CALL 

LotInfoProc}"  );

ResultCode  =  SQLExecute(ConnectionID, "BindList", 0);

ResultCode =   SQLNext ( ConnectionID );

{Pobierz wyniki zapytania SELECT}

background image

42

Rozdział 4

Menedżer SQL Access Podręcznik użytkownika

Wczytywanie wartości do zmiennych programu 
InTouch

Na przemieszczanie się między rekordami logicznej tabeli i pobieranie 
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 uaktulanianiu 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.

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.

background image

Rozwiązywanie problemów

43

Menedżer SQL Access Podręcznik użytkownika

R O Z D Z I A Ł   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ą, z wartością dostarczoną przez 
odpowiednią funkcję 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.

background image

44

Rozdział 5

Menedżer SQL Access Podręcznik użytkownika

Funkcja SQLErrorMsg() powoduje ustawienie wartości zmiennej InTouch 
o nazwie ErrorMsg. Poniżej zamieszczono zestawienie wybranych kodów 
błędów, oraz odpowiadające im komunikaty, wraz z ich opisem.

Kod błędu 

ResultCode

Komunikat

Opis

  0

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.

background image

Rozwiązywanie problemów

45

Menedżer SQL Access Podręcznik użytkownika

-1002

Invalid connection

Niepoprawny parametr ConnectionID przekazany 
do funkcji

-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 w związku 
z czym 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 zakłócenia 
podany jest w programie diagnostycznym 
Wonderware Logger

-1010

The database specified on the 
DB= portion of the connect 
string does not exist

Określona baza danych nie istnieje

-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.

Kod błędu 

ResultCode

Komunikat

Opis

background image

46

Rozdział 5

Menedżer SQL Access Podręcznik użytkownika

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.

Microsoft SQL Server

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.

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 
available to process the command

Spróbować ponownie uruchomić stację 
kliencką

Invalid object name table name

Nazwa tablicy nie istnieje w używanej 
bazie danych. Spróbować skorzystać 
z instrukcji DB=nazwa bazy danych.

background image

Zarezerwowane słowa kluczowe

47

Menedżer SQL Access Podręcznik użytkownika

Z A Ł Ą C Z N I K   A

Zarezerwowane słowa 
kluczowe

SQL Access oraz ODBC

Poniżej zestawiono słowa kluczowe, z których nie można wykorzystywać 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 Nazwa 
kolumny w oknie edycyjnym listy powiązań lub w 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. Poniżej 
wymieniono w kolejności alfabetycznej zarezerwowane słowa kluczowe:.

ABSOLUTE
ADA
ADD
ALL
ALLOCATE
ALTER
AND
ANY
ARE
AS
ASC
ASSERTION
AT
AUTHORIZATION
AVG
BEGIN
BETWEEN
BIT

BIT_LENGTH
BY
CASCADE
CASCADED
CASE
CAST
CATALOG
CHAR
CHAR_LENGTH
CHARACTER
CHARACTER_LENGTH
CHECK
CLOSE COALESCE
COBOL
COLLATE
COLLATION
COLUMN
COMMIT
CONNECT

CONNECTION
CONSTRAINT
CONSTRAINTS
CONTINUE
CONVERT
CORRESPONDING
COUNT
CREATE
CURRENT
CURRENT_DATE
CURRENT_TIME
CURRENT_TIMESTAMP
CURSOR
DATE
DAY
DEALLOCATE
DEC
DECIMAL
DECLARE

background image

48

Załącznik A

Menedżer SQL Access Podręcznik użytkownika

DEFERRABLE
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
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
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

background image

Zarezerwowane słowa kluczowe

49

Menedżer SQL Access Podręcznik użytkownika

InTouch

Następujące słowa są zarezerwowane dla programu InTouch:

As
Call
Dim
Discrete
Integer
Message
Real
Return
RetVal

background image

50

Załącznik A

Menedżer SQL Access Podręcznik użytkownika

background image

51

Menedżer SQL Access Podręcznik użytkownika

Indeks

A

Administrator ODBC 8

B

Baza danych 5

BindListName 24, 34

C

ConnectionID 34
ConnectString 34
CSV 6, 24

D

Dla bazy Microsoft SQL Server 11

Dynamiczne budowanie zapytań 38

E

ErrorMsg 34

F

FileName 34
Format funkcji SQL 25
Funkcja Delim 20

Funkcje

SQLAppendStatement 25
SQLClearParam 26
SQLClearStatement 26

SQLClearTable 26
SQLCommit 26
SQLConnect 11

SQLCreateTable 27
SQLDelete 27
SQLDisconnect 27

SQLDropTable 28
SQLEnd 28
SQLErrorMsg 28

SQLExecute 28
SQLFirst 28
SQLGetRecord 28

SQLInsert 28
SQLInsertEnd 28
SQLInsertExecute 29

SQLInsertPrepare 29
SQLLast 29
SQLLoadStatement 29

SQLManageDSN 29
SQLNumRows 30
SQLPrepareStatement 30

SQLPrev 30
SQLRollback 30
SQLSelect 30

SQLSetParamChar 31
SQLSetParamDate 31
SQLSetParamDecimal 31

SQLSetParamFloat 31

SQLSetParamInt 32
SQLSetParamLong 32
SQLSetParamNull 32

SQLSetParamTime 33
SQLSetStatement 33
SQLTransact 33

SQLUpdate 33
SQLUpdateCurrent 33
Wykorzystywanie 25

Funkcje SQL 25

I

Informacje o podręczniku użytkownika 6

K

Kody błędów dla poszczególnych baz danych

Microsoft SQL Server 46

Kompatybilność z ODBC 8

Komunikaty o błędach 43
Konfigurowanie listy powiązań 16
Konfigurowanie modułu SQL Access 15

Konfigurowanie szablonu tabeli 21
Korzystanie z funkcji SQL w skryptach 37

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 38
modyfikowanie listy powiązań 19

modyfikowanie szablonu tabeli 23

N

Nazwa kolumny 18
Nazwa szablonu tabeli 21, 24

O

Obsługa procedur zachowanych 41
Obsługiwane bazy danych 11

Microsoft Access 12
Microsoft SQL Server 11

Obsługiwane typy danych 13

background image

52

Menedżer SQL Access Podręcznik użytkownika

ODBC.INI 8
Odczytywanie instrukcji SQL z pliku 38
Oracle

Obsługiwane typy danych 13

OrderByExpression 35

P

ParameterNumber 35
Parameters 34

ParameterType 35
ParameterValue 36
Parametr

BindListName 34
ConnectionID 34
ConnectString 34

ErrorMsg 34
FileName 34
MaxLen 35

OrderByExpression 35
ParameterNumber 35
ParameterType 35

ParameterValue 36
Precision 36
RecordNumber 36

ResultCode 36
Scale 36
SQLStatement 36

StatementId 36
TableName 37
TemplateName 37
WhereExpression 37

Parametry funkcji SQL 34
Podręczniki Online 7
Polecenia

Szablon tabeli 23

Polecenie Szablon tabeli 23
Pomoc techniczna Wonderware 7

Precision 36
Przegląd modułu SQL Access 15
Przeglądarka zmiennych 17

R

RecordNumber 36

Reserved Keywords 47
ResultCode 36, 43
Rozwiązywanie problemów z funkcjami SQL 43

S

Scale 36

Separatory specjalne 20
Skrypty QuickScripts 37
SQL.DEF 6, 24

SQLConnect 11
SQLErrorMsg 43
SQLInsert 20

SQLSelect 30
SQLStatement 36
SQLUpdate 20, 33

StatementId 36
Structured Query Language 5
Szablon tabeli 21

modyfikowanie 23
tworzenie nowej 21
usuwanie 23

T

TableName 37

TemplateName 37

U

usuwanie listy powiązań 19
Usuwanie problemów 43
usuwanie szablonu tabeli 23

W

WhereExpression 37

Wprowadzenie do modułu SQL Access 5
Wykonywanie rozbudowanych instrukcji SQL 39

Z

Zapisywanie daty i czasu do pól bazy danych 
Oracle 10

Zapytania

Dynamiczne budowanie 38
Złożone 38

Zapytania złożone 37

Zmienna.Pole 18
Znaki rozdzielające 20


Document Outline