Teoretyczne założenia

Slides:



Advertisements
Podobne prezentacje
Język C/C++ Funkcje.
Advertisements

Programowanie obiektowe
Procedury wyzwalane Procedura wyzwalana (ang. trigger) - stanowi kod użytkownika przechowywany wewnątrz bazy i uruchamiany w określonych sytuacjach np.
Skrypty, procedury przechowywane i wyzwalane
Wzorce.
Programowanie w języku Visual Basic
SQL INJECTION Wykorzystanie błędów w językach skryptowych
Języki programowania C++
Kamil Smitkiewicz Bezpieczeństwo w PHP.
PROGRAMOWANIE STRUKTURALNE
WPROWADZENIE DO BAZ DANYCH
25/08/ Bazy danych II Piotr Górczyński MS Access – Action Query.
20/09/ Języki programowania 1 Piotr Górczyński Kreator form.
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 7: Procedury i funkcje © Jan Kaczmarek.
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 8: Wykorzystanie procedur i funkcji © Jan Kaczmarek.
Podstawy informatyki Wirtotechnologia – Wskaźniki i referencje
Podstawy informatyki Powtórka Grupa: 1A Prowadzący: Grzegorz Smyk
Kurs Pascala – spis treści
Tablice.
Bezpieczeństwo Procedury składowane Funkcje i Wyzwalacze
WYZWALACZE (TRIGGERY) Wyzwalacz jest specjalnym rodzajem procedury składowanej, która może być wykonana w odpowiedzi na jedną z trzech sytuacji: UPDATE.
Wykład 1: Wskaźniki Podstawy programowania Programowanie w C
Wprowadzenie do programowania w języku Turbo Pascal
OPERACJA DZIELENIA W SQL
import danych; sumy pośrednie; tabela przestawna; konsolidacja danych
Podstawy programowania
Podstawy programowania II
Podstawy programowania II Wykład 2: Biblioteka stdio.h Zachodniopomorska Szkoła Biznesu.
Podstawy programowania
Pliki tekstowe. Operacje na plikach. mgr inż. Agata Pacek.
Podstawy programowania. Język C i C++– podstawy Temat: 1
TABLICE C++.
Instrukcje: CREATE, INSERT, UPDATE, DELETE, DROP
PL/SQL Zajęcia nr II PL/SQL(2) M. Rakowski - WSISiZ.
dr hab. Ryszard Walkowiak prof. nadzw.
Edytor Vi.
Użytkownicy i przywileje Sesja - przykład Błędy Komunikacja międzyskryptowa Wykład 83PD Technologie internetowe.
Programowanie strukturalne i obiektowe
Automatyka i Robotyka Systemy czasu rzeczywistego Wykład 4.
SQL - Structured Query Language
Koncepcja procesu Zadanie i proces. Definicja procesu Process – to program w trakcie wykonywania; wykonanie procesu musi przebiegać w sposób sekwencyjny.
Aplikacje bazodanowe ADO.NET PHP i MySQL
Rozwiązanie zadań do zaliczenia I0G1S4 // indeks
Wybrane zagadnienia relacyjnych baz danych
Przekazywanie parametrów do funkcji oraz zmienne globalne i lokalne
Komendy SQL do pracy z tabelami i bazami
MICROSOFT Access TWORZENIE MAKR
PL/SQL – dalsza wędrówka
Programowanie strukturalne i obiektowe C++
System plików.
Autor: Damian Urbańczyk
1 SBD, L.Banachowski Oprogramowanie strony serwera cz. 1 Powtórzenie wyk ł adu 6.
Komendy SQL do pracy z danymi
Seminarium Dyplomowe: Metodyka i Techniki Programowania Autor: Bartłomiej Fornal.
PHP jest językiem skryptowym służącym do rozszerzania możliwości stron internetowych. Jego składnia jest bardzo podobna do popularnych języków programowania.
Wstęp do programowania Wykład 2 Dane, instrukcje, program.
Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła Jerzego Matuszyka Podstawy.
Aplikacje internetowe XML Paweł Lenkiewicz. Aplikacje internetowe – XML2 eXtensible Markup Language Uniwersalny język opisu danych Często używany we współpracy.
Microsoft® Office Word
ASP.NET Kontrolki źródła danych i prezentacji danych w ASP.Net
ASP.NET Dostęp do bazy danych z poziomu kodu Elżbieta Mrówka-Matejewska.
Excel 2007 dla średniozaawansowanych Zajęcia z Prowadzący: Artur Kołos.
Testy jednostkowe. „Test jednostkowy (unit test) to fragment kodu, który sprawdza inny fragment kodu”
Temat: Tworzenie bazy danych
Wyższa Szkoła Bankowa, Poznań, dr inż. mirosław Loręcki
SQL Server Analysis Services Action!
Strukturalny język zapytań SQL - historia
Haskell Składnia funkcji.
Język C++ Typy Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła Jerzego.
Format rozkazu Tryby adresowania.
Zapis prezentacji:

Teoretyczne założenia Osadzony SQL Teoretyczne założenia

Wiele Języków Programowania umożliwia operacje na zewnętrznych bazach danych za pomocą instrukcji języka SQL. Język SQL używany w kodzie programu określany jest jako osadzony SQL w odróżnieniu od jego interakcyjnej (dotąd omawianej ) wersji. Podstawowa zasada osadzonego SQL tzw. zasada podwójnego trybu mówi, że każda instrukcja SQL, którą można wykonać w trybie interakcyjnym, może być także zastosowana w aplikacji (za pomocą osadzonego SQL). (Odwrotne stwierdzenie nie jest prawdziwe).

Zasady Używania Osadzonego SQL Instrukcje osadzonego SQL są poprzedzane zwrotem EXEC SQL i zakończone są specjalnym symbolem zakończenia (zależnym od implementacji np. ;) Wykonywalna instrukcja SQL może wystąpić wszędzie tam, gdzie może występować wykonywalna instrukcja języka zewnętrznego. (Osadzony SQL zawiera również instrukcje deklaratywne) Instrukcje SQL mogą obejmować referencje do zmiennych języka zewnętrznego. Referencje takie musi poprzedzać dwukropek. Zmienne języka zewnętrznego mogą pojawić się tam gdzie w SQL są dostępne literały. Zmienne takie nazywane są dzielonymi.

Zasady Używania Osadzonego SQL Cd. 1 klauzula INTO wskazuje zmienne celu, na które mają być zapisane wyszukiwane wartości np: EXEC SQL SELECT Czesci.WAGA INTO :WAGA FROM Czesci WHERE Czesci.P# = :P WAGA i P są nazwami zadeklarowanymi wcześniej w języku zewnętrznym (Nazwy tych zmiennych mogą pokrywać się z nazwami pól (atrybutów), tak jak ma to miejsce ze zmienną WAGA i polem w relacji Części Części.WAGA). Wynik poszukiwania zostanie umieszczony w zmiennej WAGA.

Zasady Używania Osadzonego SQL Cd. 2 Wszystkie zmienne języka zewnętrznego, które będą występowały w poleceniach SQL muszą być zdefiniowane w sekcji deklaracji osadzonego SQL, ograniczonej instrukcjami BEGIN DECLARE SECTION oraz  END DEKLARE SECTION. Przykład: (Dla zewnętrznego języka PL/I ). EXEC SQL BEGIN DECLARE SECTION; DCL SQLSTATE CHAR(5); DCL P CHAR(6); DCL WAGA FIXED DECIMAL(3); EXEC SQL END DECLARE SECTION.

Testowanie poprawności wykonania polecenia Każdy program z osadzonym SQL musi zawierać zmienną języka zewnętrznego zwaną SQLSTATE (wcześniejsze wersje używały SQLCODE). Po wykonaniu dowolnej instrukcji SQL do programu jest zwracany kod statusu zapisany na tej zmiennej. W szczególności kod statusu 00000 oznacza, że instrukcja została wykonana poprawnie, a kod 02000 oznacza, że instrukcja została zrealizowana, ale nie znaleziono danych wymaganych w żądaniu. Zmienne języka zewnętrznego muszą mieć typy dopasowane do swego przeznaczenia w Bazie Danych.

Instrukcja WHENEVER Zastąpienie testowania zmiennej SQLSTATE Składnia: EXEC SQL WHENEVER warunek działanie terminator warunek jest to albo SQLERROR albo NOT FOUND, działanie to instrukcja albo CONTINUE albo GO TO. WHENEVER jest dyrektywą dla procesora języka SQL. Zdanie “WHENEVER warunek GO TO etykieta” sprawia, że procesor wstawi instrukcję “IF warunek GO TO etykieta” po każdej wykonywanej instrukcji SQL, na jaką napotka. Zdanie “WHENEVER warunek CONITNUE” powoduje, że żadna instrukcja nie będzie wstawiana.

Instrukcja WHENEVER Cd. Dwa warunki dla tej instrukcji zdefiniowane są następująco: NOT FOUND nie znaleziono danych (SQLSTATE = 02000) SQLERROR wystąpił błąd. Każda instrukcja WHENEVER napotkana przez procesor w sekwencyjnym przeszukiwaniu tekstu programu (dla danego warunku) zastępuje poprzednio znalezioną instrukcję (dla tego warunku).

Kursory Wynik operacji na tabelach (relacjach) = tabela (relacja). Języki zewnętrzne przystosowane są na ogół do obsługi co najwyżej pojedynczych rekordów (krotek) Stąd potrzeba mechanizmu umożliwiającego przekazywanie danych w przypadku gdy wynikiem zapytania jest grupa rekordów (krotek). Mechanizm ten nazywa się kursorem. Kursor jest rodzajem wskaźnika, który można wykorzystać do poruszania się po wierszach (krotkach) wskazując po kolei każdy wiersz wyniku. W ten sposób mamy możliwość adresowania tych wierszy – po jednym za każdy razem.

Kursor – ograniczenia i deklaracja Kursorów nie używamy gdy mamy do czynienia z: – jednostkowym SELECT tzn. zwracającym tylko jedną krotkę – dla operacji INSERT – - || - UPDATE – - || - DELETE Deklaracja Kursora: EXEC SQL DECLARE nazwa_kursora CURSOR FOR wyrażenie_tabelowe [ORDER BY przecinkowa_lista_elementów_do_wyboru ]; wyrażenie_tabelowe specyfikuje tabelę na którą będzie wskazywał zadeklarowany kursor.

Instrukcje wykonywane na kursorach EXEC SQL OPEN nazwa_kursora; Otwiera lub aktywuje określony kursor (który w tym momencie nie może być otwarty). Wykonywane jest wówczas wyrażenie_tabelowe kursor wskazuje na pozycję tuż przed pierwszym wierszem uzyskanej tabeli. EXEC SQL FETCH nazwa_kursora INTO przecinkowa-lista- zmiennych-języka-zewnętrznego Przesuwa wskazany kursor (który musi być otwarty) do następnego wiersza w zbiorze aktywnym. Następnie nadaje zmiennym języka zewnętrznego, wymienionym w klauzuli INTO, wartości z tego wiersza. Jeżeli nie ma następnego wiersza w chwili wykonywania instrukcji FETCH, SQLSTATE przypiera wartość 02000 i żadne dane nie będą wyszukiwane.

Kursor – zamykanie EXEC SQL CLOSE kursor Zamyka, bądź dezaktywuje wskazany kursor (w tym czasie musi być on otwarty). Może być otwarty ponownie. Operacje otwierania i zamykania kursora pozwalają na uzyskiwanie (dzięki np. zmianie wartości zmiennych języka zewnętrznego) zmianę wierszy uzyskiwanych za każdym otwarciem kursora.

Kursor - Przykład EXEC SQL DECLARE X CURSOR FOR /* definicja kursora */ SELECT Dostawcy.S#, Dostawcy.SNazwisko, Dostawcy.STATUS FROM Dostawcy WHERE Dostawcy.MIASTO = :Y; EXEC SQL OPEN X; /* Wykonanie zapytania dla wszystkich dostępnych wierszy tzn. dopóki SQLSTATUS jest różny od 02000 * / /* W tym miejscu jakiś rodzaj pętli */ EXEC SQL FETCH X INTO :S, :SNAME, :SSTATUS; /*następny dostawca */ /* Koniec pętli */ EXEC SQL CLOSE X /* zamknij kursor X */

Szkic: MySQL, API C i Builder

Builder 6.0 Personal - wstępne czynności: 1. Użycie programu coff2omf (z katalogu /bin C++ Buildera) do zmiany pliku biblioteki libMySQL.lib (format coff2omf wejscie wyjscie). Biblioteka libMySQL.lib znajduje się w katologu MySQL-a w podkatalogu lib/opt/ 2. Dołączenie przetworzonego pliku biblioteki (u mnie po przetworzeniu libMySQL2.lib) do projektu, najlepiej w widoku Project Manager (ADD); 3. Zmiana katalogów plików dołączanych (w menu Project/Options/ Directories/Conditionals w polu Include path) aby można było dołączyć mysql.h, albo wypisanie ścieżki dostępu do tegoż pliku w dyrektywie #include np. #include "c:\\mysql\\include\\mysql.h"

Builder 6.0 wersja Personal Cz. 2. 4. Zmiana w pliku mysql_com.h (ze względu na komunikaty systemowe, plik ten otworzy się sam po próbie kompilacji kodu) dodane wiersze: (definiowany napis może być dowolny) #ifdef solecki typedef int my_socket; #endif co wymagało dołączenia dyrektywy #define solecki na początku kodu tzn. PRZED dyrektywą #include <mysql.h> 5. Umieszczenie pliku biblioteki dll tj. libMySQL.dll w katalogu programu.

Główne procedury 1. Inicjacja głównej struktury MYSQL mysql; // Główna struktura if(!mysql_init(&mysql)) //raportuj błąd gdy się nie udało otworzyć. 2. Otwarcie komunikacji z serwerem if (!mysql_real_connect(&mysql, NazwaSerwera, Uzytkownik,Haslo,0,0,NULL,0)) { /* raport "Nie udało się połączyć” mysql_error(&mysql); */ }

Główne Procedury 2 MYSQL_RES *rezultat; MYSQL_ROW wiersz; mysql_query(&mysql,"show databases;"); rezultat = mysql_store_result(&mysql); if(rezultat) { int stop = mysql_num_rows(rezultat); for(int i=0;i<stop;i++) //... wiersz = mysql_fetch_row(rezultat); mysql_free_result(rezultat); } rezultat jest dwuwymiarową tablicą napisów przechowującą rezultat zapytania. wiersz jest tablicą napisów przygotowaną do przechowywania pojedynczej krotki.

Inne istotne zmienne i funkcje MYSQL_FIELD *argumenty; //Informacje o kolumnach int liczba_pol = mysql_num_fields(rezultat); // liczba argumentów wyniku (kolumn) argumenty = mysql_fetch_fields(rezultat); for(i = 0; i < liczba_pol; i++) { Wyniki->Cells[i+1][0]=argumenty[i].name; }