Wykład 10: Bazy danych



Podobne dokumenty
Wykład 8. SQL praca z tabelami 5

Odnawialne Źródła Energii I rok. Tutorial PostgreSQL

Laboratorium nr 4. Temat: SQL część II. Polecenia DML

Blaski i cienie wyzwalaczy w relacyjnych bazach danych. Mgr inż. Andrzej Ptasznik

Autor: Joanna Karwowska

Język SQL, zajęcia nr 1

Opracował: Tomasz Neumann Technologia dbexpress w środowisku DELPHI

koledzy, Jan, Nowak, ul. Niecała 8/23, , Wrocław, , ,

Bazy danych. Wykład IV SQL - wprowadzenie. Copyrights by Arkadiusz Rzucidło 1

Wprowadzenie do projektowania i wykorzystania baz danych Relacje

Bazy danych. Polecenia SQL

Plan bazy: Kod zakładający bazę danych: DROP TABLE noclegi CASCADE; CREATE TABLE noclegi( id_noclegu SERIAL NOT NULL,

Bazy Danych i Usługi Sieciowe

Paweł Cieśla. Dokumentacja projektu

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

Podstawy języka SQL. SQL Structured Query Languagestrukturalny

Bazy danych i usługi sieciowe

Tworzenie tabeli przez select CREATE TABLE PRAC2 AS SELECT P.NAZWISKO, Z.NAZWA FROM PRAC P NATURAL JOIN ZESP Z

3 Przygotowali: mgr inż. Barbara Łukawska, mgr inż. Maciej Lasota

Wprowadzenie do BD Operacje na bazie i tabelach Co poza zapytaniami? Algebra relacji. Bazy Danych i Systemy informacyjne Wykład 2.

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych

Wykład 05 Bazy danych

Aspekty aktywne baz danych

Przykłady najlepiej wykonywać od razu na bazie i eksperymentować z nimi.

SQL 4 Structured Query Lenguage

DECLARE VARIABLE zmienna1 typ danych; BEGIN

Ref. 7 - Język SQL - polecenia DDL i DML

Bazy danych 6. Klucze obce. P. F. Góra

Wykład 5. SQL praca z tabelami 2

Instrukcja podwaja zarobki osób, których imiona zaczynają się P i dalsze litery alfabetu zakładamy, że takich osbób jest kilkanaście.

Komunikacja z bazą danych psql

Systemowe aspekty baz

1 Zaznacz poprawne stwierdzenia dotyczące grup plików (filegroup) możemy określić do której grupy plików trafi

Rozdział 17. Zarządzanie współbieżnością zadania dodatkowe

Laboratorium 15: Bazy Danych Tworzenie bazy danych i programowanie elementów nawigacyjnych aplikacji stworzonej przy pomocy technologii dbexpress

Dostęp do baz danych z serwisu www - PHP. Wydział Fizyki i Informatyki Stosowanej Joanna Paszkowska, 4 rok FK

strukturalny język zapytań używany do tworzenia i modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych

E.14 Bazy Danych cz. 18 SQL Funkcje, procedury składowane i wyzwalacze

ACESS- zadania z wykorzystaniem poleceń SQL

1. Połączenie z bazą danych. W wybranym edytorze tworzymy plik sqltest.py i umieszczamy w nim poniższy kod. #!/usr/bin/python3 import sqlite3

BAZA DANYCH SIECI HOTELI

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Oracle PL/SQL. Paweł Rajba.

Język DML. Instrukcje DML w różnych implementacjach SQL są bardzo podobne. Podstawowymi instrukcjami DML są: SELECT INSERT UPDATE DELETE

LABORATORIUM 8,9: BAZA DANYCH MS-ACCESS

Laboratorium nr 1. Temat: Wprowadzenie do MySQL-a

Literatura: SQL Ćwiczenia praktyczne Autor: Marcin Lis Wydawnictwo: Helion. Autor: Joanna Karwowska

SIECI KOMPUTEROWE I BAZY DANYCH

Serwery Statefull i Stateless

Instytut Mechaniki i Inżynierii Obliczeniowej fb.com/groups/bazydanychmt/

CREATE DATABASE ksiegarnia_internetowa DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

77. Modelowanie bazy danych rodzaje połączeń relacyjnych, pojęcie klucza obcego.

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

Hurtownia Świętego Mikołaja projekt bazy danych

D D L S Q L. Co to jest DDL SQL i jakie s jego ą podstawowe polecenia?

Ćwiczenie 4 Aktualizacja tabel. 1. Skopiuj aplikację przygotowaną na poprzednich zajęciach w katalogu SKOKI1 do nowego katalogu SKOKI2.

I. Język manipulowania danymi - DML (Data Manipulation Language). Polecenia INSERT, UPDATE, DELETE

Autor: Joanna Karwowska

Język SQL. Rozdział 9. Język definiowania danych DDL, część 2.

Podstawy technologii WWW

Wykład 2. SQL 1 Structured Query Lenguage

Relacji między tabelami klucze obce. Schemat bazy danych, wczytanej z pliku create_tables.sql. Klucz obcy jako ograniczenie dla kolumny

Internetowe bazy danych

Programowanie w Ruby

Bazy danych - Materiały do laboratoriów VIII

Relacyjne bazy danych. Podstawy SQL

Przykładowa baza danych BIBLIOTEKA

Składowane procedury i funkcje

Bazy danych. Bazy danych. Podstawy języka SQL. Dr inż. Paweł Kasprowski.

Programowanie MSQL. show databases; - pokazanie jakie bazy danych są dostępne na koncie

Instrukcje DML INSERT, UPDATE, DELETE. COPY

Założenia do ćwiczeń: SQL Server UWM Express Edition: \SQLEXPRESS. Zapoznaj się ze sposobami użycia narzędzia T SQL z wiersza poleceń.

Kowalski Marcin Wrocław, dn Jaśkiewicz Kamil Bazy Danych 1 Podstawy Projekt Temat: Baza danych do zarządzania projektami

15. Funkcje i procedury składowane PL/SQL

Systemowe aspekty baz danych

Wykład 6. SQL praca z tabelami 3

Oracle PL/SQL. Paweł Rajba.

PHP może zostać rozszerzony o mechanizmy dostępu do różnych baz danych:

UPDATE Studenci SET Rok = Rok + 1 WHERE Rodzaj_studiow =' INŻ_ST'; UPDATE Studenci SET Rok = Rok 1 WHERE Nr_albumu IN ( '111345','100678');

Tworzenie tabel. Bazy danych - laboratorium, Hanna Kleban 1

Projektowanie systemów baz danych

Projektowanie aplikacji w modelu MVC opartej o framework CodeIgniter

Administracja i programowanie pod Microsoft SQL Server 2000

Podstawy programowania III WYKŁAD 2

Cele. Definiowanie wyzwalaczy

Systemy GIS Tworzenie zapytań w bazach danych

Język SQL, zajęcia nr 2

Przykład 3 Zdefiniuj w bazie danych hurtownia_nazwisko przykładową funkcję użytkownika fn_rok;

T-SQL dla każdego / Alison Balter. Gliwice, cop Spis treści. O autorce 11. Dedykacja 12. Podziękowania 12. Wstęp 15

Wdrożenie modułu płatności eservice. dla systemu oscommerce 2.3.x

Plan. Formularz i jego typy. Tworzenie formularza. Co to jest formularz? Typy formularzy Tworzenie prostego formularza Budowa prostego formularza

Wykład 5: PHP: praca z bazą danych MySQL

Inżynieria Programowania Laboratorium 3 Projektowanie i implementacja bazy danych. Paweł Paduch paduch@tu.kielce.pl

PLAN WYKŁADU BAZY DANYCH PODSTAWOWE KWESTIE BEZPIECZEŃSTWA OGRANICZENIA DOSTĘPU DO DANYCH

Wydział Elektrotechniki, Informatyki i Telekomunikacji Instytut Informatyki i Elektroniki

Tworzenie aplikacji bazodanowych w delphi dla dużych baz danych FRAMEWORK IMPET

Wybór EUROPEAN będzie rozpoznawał dzień przed miesiącem, natomiast US miesiąc przed dniem.

Wdrożenie modułu płatności eservice. dla systemu Zen Cart

Bazy danych - wykład wstępny

Transkrypt:

Kurs języka Object/Delphi Pascal na bazie implementacji Free Pascal. autor Łukasz Stafiniak Email: lukstafi@gmail.com, lukstafi@ii.uni.wroc.pl Web: www.ii.uni.wroc.pl/~lukstafi Jeśli zauważysz błędy na slajdach, proszę daj znać! Wykład 10: Bazy danych Łączenie z bazą danych. Wyświetlanie danych tabelarycznych. 1

Relacyjne bazy danych Relacyjne bazy danych ciągle są najpopularniejszym schematem przechowywania ustrukturowanej informacji. Taka baza składa się z nazwanych tabel, które są zbiorami krotek (wierszy). Krotki są zbiorami przypisań wartości atrybutom (kolumnom). Wszystkie krotki tabeli muszą mieć ten sam zbiór atrybutów. en.wikipedia.org/wiki/relational_model 2

Atrybuty są otypowane, tabele wyglądają więc jak tablice rekordów w Pascalu (array of record) ale kolejność w tablicy się nie liczy. Dane z bazy pobieramy przy pomocy zapytań (queries), rezultat zapytania jest tabelą. SQL jest najpopularniejszym modelem / językiem relacyjnych baz danych odbiega od czystego modelu relacyjnego, m.in.: kolejność wierszy i kolumn się liczy oraz mamy specjalną wartość NULL na brakujące pola krotek. Częścią bazy danych są więzy (constraints) zapewniające poprawność danych. Inne nowoczesne modele baz danych to obiektowe bazy danych (zgrubsza wzorowane na programowaniu zorientowanym obiektowo) oraz grafowe bazy danych, m.in. bazy RDFowe triplet stores przechowujące grafy skierowane z etykietowanymi krawędziami jako trójki obiekt-relacjaobiekt. Resource Description Framework (RDF) dostarcza całej ontologii, tzn. uniwersalnej hierarchi klas i relacji-właściwości. 3

Polecenia SQLa SQL jest bogatym językiem programowania, zdania to kwerendy/zapytania (queries) do bazy oraz instrukcje (statements) modyfikujące bazę danych. en.wikipedia.org/wiki/sql SELECT. Kwerenda. Np: SELECT isbn, title, price, price * 0.06 AS sales_tax FROM Book WHERE price > 100.00 ORDER BY title; Używając JOIN łączymy atrybuty z kilku tabel: Wyrażenia-atrybuty takie same w tabeli źródłowej (FROM) i w tabeli wynikowej. Złożone wyrażenie jako (AS) nowy atrybut. Tabela źródłowa. Warunek filtrujący. Porządek wierszy w tabeli wynikowej. SELECT * FROM employee INNER JOIN department ON employee.departmentid = department.departmentid; Wybierz wszystkie atrybuty z przeglądanych tabel. Warunek równoważny z USING (DepartmentID); 4

INSERT. Wprowadź do bazy. Np: INSERT INTO My_table (field1, field2, field3) VALUES ( test, N, NULL); Ilość atrybutów tutaj i wartości poniżej musi się zgadzać, ale brakujące kolumny przyjmą wartości domyślne Można pominąć atrybuty jeśli używa się wszystkich, a też włożyć kilka krotek naraz: INSERT INTO phone_book VALUES ( John Doe, 555-1212 ), ( Peter Doe, 555-2323 ); UPDATE. Modyfikuj wiersze. Np: UPDATE My_table SET field1 = updated value WHERE field2 = N ; DELETE. Usuń istniejące wiersze. Np: DELETE FROM My_table WHERE field2 = N ; 5

CREATE. Stwórz nową tabelę. Np: CREATE TABLE My_table( my_field1 INT, my_field2 VARCHAR(50), my_field3 DATE NOT NULL, PRIMARY KEY (my_field1, my_field2) ); TRUNCATE. Bezpowrotnie usuń wszystkie dane z tabeli, ale nie samą tabelę. TRUNCATE TABLE My_table; DROP. Usuń całą tabelę. DROP TABLE My_table; COMMIT. Często interakcja z bazą danych oparta jest o transakcje. COMMIT zatwierdza operacje dokonane od ostatniego wywołania COMMIT, inaczej nie są one widoczne dla innych uczestników i będą stracone jeśli zamkniemy klienta bez wywołania COMMIT. 6

Klucze obce Każda tabela ma klucze (kandydujące, candidate keys): zbiory atrybutów których wartości łącznie jednoznacznie identyfikują wiersz tabeli. Zbiór atrybutów może być kluczem obcym (foreign key) gdy jest kluczem innej tabeli jego wartość jednoznacznie identyfikuje wiersz innej tabeli. Klucz obcy przy tworzeniu tabeli w SQL (en.wikipedia.org/wiki/foreign_key): CREATE TABLE TABLE_NAME ( id INTEGER PRIMARY KEY, col2 CHARACTER VARYING(20), col3 INTEGER,... FOREIGN KEY(col3) REFERENCES other_table(key_col) ON DELETE CASCADE,... ) 7

lub gdy klucz obcy jest pojedynczym atrybutem CREATE TABLE TABLE_NAME ( id INTEGER PRIMARY KEY, col2 CHARACTER VARYING(20), col3 INTEGER REFERENCES other_table(column_name),... ) Referential integrity to zapewnienie że nie ma wiszących wskaźników, akcje ON DELETE / ON UPDATE na docelowym wierszu mogą wywołać: CASCADE: gdy wiersze w tabeli docelowej są kasowane/modyfikowane, wiersze w danej tabeli też są kasowane/modyfikowany, RESTRICT: blokada kasowania wierszy z odniesieniami, NO ACTION jest łagodniejszą formą ale zgrubsza to samo, SET NULL: wartości klucza obcego są ustawiane na NULL gdy wiersz docelowy jest kasowany/modyfikowany, SET DEFAULT: kolumny (tzn. atrybuty) mają wartość domyślną, ustaw tą wartość gdy wiersz docelowy jest kasowany/modyfikowany. 8

Zagadnienia: plan Free Pascal posiada jako część Free Component Library jednolite API do obsługi różnych baz, a nawet różnych rodzajów baz danych (moduł db). Lazarus posiada komponenty pozwalające skonfigurować interakcję z bazą danych bezpośrednio z GUI Lazarusa. Duże bazy działają na zasadzie klient-serwer, gdzie bazą danych zarządza serwer, z którym komunikują się klienci wysyłając kwerendy czy instrukcje modyfikacji. Tutaj Pascal rozmawia z natywnym klientem danej bazy, który dopiero komunikuje się z serwerem. W przykładach do wykładu użyjemy bazy PostgreSQL. Najpierw przykład komunikacji z bazą bezpośrednio z Free Pascala (moduł sqldb). Potem przykład z GUI Lazarusa, z wyświetlaniem kwerendy jako tabeli TDBGrid. 9

Free Pascal (i Delphi) posiada też w ramach tego samego API mikro bazy istniejące tylko w pamięci programu, z możliwością wczytania z i zapisania do pliku. TMemDataset, TBufDataset, TSdfDataset, TFixedDataset (w Delphi trochę inny ClientDataset). Na koniec, TStringGrid pozwala wyświetlać dane tabelarycznie bez potrzeby konstrukcji bazy danych. Celem wykładu jest tylko oswojenie się z koncepcją baz danych i przekonanie do sprawdzonych rozwiązań (a nie nauczenie najlepszych praktyk). 10

Tworzenie bazy w PostgreSQL Instalacja. Pod Debianem: $ sudo apt-get install postgresql postgresql-client $ sudo -u postgres psql postgres=# ALTER ROLE postgres WITH ENCRYPTED PASSWORD paswd ; postgres=# CREATE DATABASE my_database WITH ENCODING UTF-8 ; postgres=# \q Ja potrzebowałem jeszcze dodatkowo (coś źle zainstalowałem?): $ sudo ln -s /usr/lib/libpq.so.5.4 /usr/lib/libpq.so Pod Windowsem: pobieramy instalkę, uruchamiamy i klikamy Next. Potem uruchamiamy SQL Shell (psql) wprowadzając domyślne dane logowania (klikając ENTER) i hasło jak przy instalacji. W Shellu: postgres=# CREATE DATABASE my_database WITH ENCODING UTF-8 ; postgres=# \q Tabele stworzymy już łącząc się z Pascala. wiki.freepascal.org/sqldbhowto 11

program ConnectDB; uses sqldb, pqconnection; var AConnection : TSQLConnection; Procedure CreateConnection; begin AConnection := TPQConnection.Create(nil); AConnection.Hostname := localhost ; AConnection.DatabaseName := my_database ; AConnection.UserName := postgres ; AConnection.Password := paswd ; end; begin CreateConnection; AConnection.Open; if Aconnection.Connected then writeln( Succesful connect! ); AConnection.Close; AConnection.Free; end. Jeśli połączenie nie powiedzie się, dostaniemy wyjątek EDatabaseError. 12

Komunikacja z bazą w sqldb jest oparta o klasę obsługi transakcji TSQLTransaction nawet jeśli TSQLConnection nie implementuje tak naprawdę transakcji dla danej bazy. Instrukcje wysyłamy przez AConnection.ExecuteDirect, kwerendy przez komponent TSQLQuery. program CreateTable; uses sqldb, pqconnection; var AConnection : TSQLConnection; ATransaction : TSQLTransaction; procedure CreateTransaction; begin ATransaction := TSQLTransaction.Create(nil); ATransaction.Database := AConnection; end; 13

begin CreateConnection; CreateTransaction; AConnection.Transaction := ATransaction; AConnection.Open; ATransaction.StartTransaction; AConnection.ExecuteDirect ( create table TBLNAMES (ID integer, NAME varchar(40)); ); AConnection.ExecuteDirect ( insert into TBLNAMES (ID,NAME) values (1, Name1 ); ); AConnection.ExecuteDirect ( insert into TBLNAMES (ID,NAME) values (2, Name2 ); ); ATransaction.Commit; AConnection.Close; AConnection.Free; ATransaction.Free; end. Z tej transakcji ExecuteDirect ma korzystać. Podwójny oznacza wewnątrz tekstu. 14

Komunikacja z bazą w PostgreSQL Komunikacja przez TSQLQuery, podklasę TDataset. Dokładniej: TSQLQuery TCustomSQLQuery TCustomBufDataset TDBDataset TDataset Kwerendę zapisujemy we właściwości SQL typu TStringList. TDataset zawiera właściwość Fields (o typie TFields, który jest jakby TCollection elementów TField) ze wszystkimi atrybutami aktualnego rekordu i funkcję FieldByName pobierającą TField danego atrybutu. Pomiędzy wierszami tabeli poruszamy się przez First, Next, Prior, Last, sprawdzając początek BOF i koniec EOF tabeli. Właściwość PacketRecords decyduje ile wierszy (rekordów) naraz wczytywanych z bazy: -1 oznacza wszystkie, domyślnie 10. 15

program ShowData; uses sqldb, pqconnection; var AConnection : TSQLConnection; ATransaction : TSQLTransaction; function GetQuery : TSQLQuery; begin Result := TSQLQuery.Create(nil); Result.Database := AConnection; Result.Transaction := ATransaction; end; 16

var Query : TSQLQuery; begin CreateConnection; CreateTransaction; Query := GetQuery; Query.SQL.Text := select * from tblnames ; AConnection.Open; Query.Open; while not Query.Eof do begin Writeln( ID:, Query.FieldByName( ID ).AsInteger,, Name:, Query.FieldByName( Name ).AsString); Query.Next; end; Query.Close; AConnection.Close; Query.Free; ATransaction.Free; AConnection.Free; end. ւ Właściwość Text z TStrings: nadpisz zawartość. (Np. funkcja Add dodałaby do zawartości.) Dopóki nie na końcu tabeli Wywołanie kwerendy z SQL. przeskakujemy na kolejny wiersz. Nie wprowadzaliśmy zmian więc nie wywołujemy Commit. Pamiętaj: brakuje tu try..finally. 17

Żeby modyfikować tabelę pod wskaźnikiem TDataset (którym jest Query), trzeba przejść do trybu edycji. Edit oznacza modyfikację aktualnego wiersza. Insert tworzy nowy wiersz przed aktualnym. Append tworzy nowy wiersz na końcu tabeli. Wyjście z trybu edycji przez: Post, Cancel (anulowanie zmian), lub przejście do innego wiersza (wywoła Post). Samo Post nie wyśle zmian na serwer bo TSQLQuery jest buforowana (TCustomBufDataset), potrzebne ApplyUpdates. Ustawiając właściwość ProviderFlags atrybutów (TField) na pfinkey pozwala ręcznie wybrać pola do klauzuli WHERE. program EditData; uses SysUtils, sqldb, pqconnection, DB; var AConnection : TSQLConnection; ATransaction : TSQLTransaction; Query : TSQLQuery; 18

begin CreateConnection; CreateTransaction; AConnection.Transaction := ATransaction; Query := GetQuery; Query.SQL.Text := select * from tblnames ; Query.Open; Query.Edit; Query.FieldByName( NAME ).AsString := Edited name ; Query.Post; Query.UpdateMode := upwhereall; Automatycznie decyduje które atrybuty Query.ApplyUpdates; będą w klauzuli WHERE kwerendy. AConnection.Transaction.Commit; Query.Free; ATransaction.Free; AConnection.Free; end. Można użyć Query.ExecSQL; zamiast Query.Open; jeśli nie potrzebujemy danych (tzn. w roli AConnection.ExecuteDirect). 19

Kwerendy i instrukcje z parametrami Parametry w kwerendzie Query.SQL to nazwy poprzedzone : podaje się konkretne wartości parametrów ustawiając Query.Params. Parametry zapewniają bardziej statyczną kontrolę typów, zmniejszają problemy z walidacją kwerendy i są szybsze (niż odbudowanie kwerendy). 20

procedure CreateTableUsingParameters; var Query : TSQLQuery; begin Query := GetQuery; Query.SQL.Text := create table TBLNAMES (ID integer, NAME varchar(40)); ; Query.ExecSQL; Query.SQL.Text := insert into TBLNAMES (ID,NAME) values (:ID,:NAME); ; Query.Params.ParamByName( ID ).AsInteger := 1; Query.Params.ParamByName( NAME ).AsString := Name1 ; Query.ExecSQL; Query.Params.ParamByName( ID ).AsInteger := 2; Query.Params.ParamByName( NAME ).AsString := Name2 ; Query.ExecSQL; Query.Close; Query.Free; end; 21

Podsumowanie: struktura modułów wiki.freepascal.org/sqldb_programming_reference 22

Obsługa baz danych w Lazarusie Lazarus pozwala połączyć TDataset z komponentem graficznym TDBGrid by automatycznie wyświetlać tabelę (wynik kwerendy). Możemy zaprogramować obiekty w kodzie albo przeciągnąć komponenty na formę i skonfigurować je w interfejsie graficznym. Dodaj do projektu pakiet SQLdb, np. z menu Pakiet Otwórz załadowany pakiet otwórz SQLDBLaz Use Dodaj do projektu. Do obiektów które widzeliśmy wyżej dochodzi TDBGrid oraz, pośredniczący między gridem a TDataset, komponent TDatasource. Ustaw TDatasource.Dataset na SQLQuery, oraz TDBGrid.Datasource na Datasource. 23

Demo: Zainstaluj PostgreSQL j.w. Stwórz bazę danych np. my_database j.w. Zaloguj się do bazy my_database ( menu Start SQL Shell (psql) lub sudo -u postgres psql) i stwórz tabelę, np. my_database=# CREATE TABLE test_table (Name varchar(50), Age int, Meeting DATE, primary key (Name, Age)); Możesz od razu dodać wiersz do tabeli, np. insert into test_table (Name, Age) values ( Adam Smith, 289); Otwórz Lazarus / nowy projekt, dodaj pakiet SQLdb j.w. Pod Windows: zapewnij, że libpq.dll np. z C:\Program Files\PostgreSQL\9.1\lib oraz libeay32.dll, libintl-8.dll i libiconv-2.dll z C:\Program Files\PostgreSQL\9.1\bin są widoczne dla programu. Ja po prostu przekopiowałem je do C:\WINDOWS\system32. 24

Dodaj do formularza z zakładki TSQLTransaction. SQLdb : TPQConnection, TSQLQuery, Dodaj do formularza z zakładki Data Access : TDatasource. Dodaj do formularza z zakładki Data Controls : TDBGrid. Ustaw właściwości PQConnection1: DatabaseName: my_database, HostName: localhost, Password: paswd, UserName: postgres, Transaction z pull-down menu (SQLTransaction1). Ustaw właściwości SQLQuery1: Database z pull-down menu (PQConnection1) (Transaction ustawi się samo), SQL: select * from test_table; Ustaw właściwości Datasource1: Dataset z pull-down menu (SQLQuery1). Ustaw właściwości DBGrid1: DataSource z pull-down menu (Datasource1). Ustaw Connected w PQConnection1 na True, Active w SQLTransaction1 na True, Active w SQLQuery1 na True. Gotowe. 25

Zmiany w bazie nie będą widoczne dopóki ich nie zastosujemy przez ApplyUpdates i Commit. Dodaj guzik Apply z następującym kodem: SQLQuery1.ApplyUpdates; SQLTransaction1.Commit; SQLQuery1.Active:=True; Zmień właściwość UpdateMode w SQLQuery1 na upwhereall. DBGrid pozwala modyfikować pola i wstawiać nowe wiersze sprawdź rezultaty w psql. Oprócz DBGrid, pozostałe kontrolki DB* pozwalają wyświetlać (i modyfikować) pola odpowiedniego typu. Wstaw kontrolkę TDBCalendar. Ustaw w DBCalendar1 właściwość DataSource na Datasource1 i właściwość DataField na (w naszym przykładzie) meeting. 26

Nie wiem dlaczego u mnie nie działa modyfikowanie daty w bazie poprzez DBCalendar1. Jeśli masz ten problem, wstaw TDBEdit (z właściwością DataSource ustawioną na Datasource1 i DataField na meeting j.w.), oraz ustaw w DBCalendar1 zdarzenie OnChange z kodem: SQLQuery1.Edit; DBEdit1.Field.Text:=DBCalendar1.Date; Dodatkowo ustaw właściwość EditMask w DBEdit1 na!9999-99-99 (lub odpowiednio) żeby zapobiec błędom konwersji na typ atrybutu DATE. 27

Baza danych w pamięci programu Jeśli dane potrzebujemy manipulować z i przechowywać tylko na potrzeby aplikacji, wygodniej i szybciej zamiast zewnętrznej bazy korzystać z tabel jako zwykłych struktur danych w pamięci programu. Klasy: C.D.N. TBufDataset jest front-endem dla tabel z buforowaniem w pamięci, TMemDataset z modułu memds jest docelowo tabelą dla baz w pamięci programu, ale obecnie jest nie zalecana, zaleca się TBufDataset (w przyszłości TMemDataset będzie dziedziczyć z TBufDataset), TSdfDataset jest klasą do obsługi danych z plików CSV, w których pierwsza linia może zawierać nazwy atrybutów, a kolejne zawierają wartości atrybutów, oddzielone przecinkami lub innym ustalonym znakiem (np. tabulatorem). 28

Kontrolki TDBGrid, TStringGrid Więcej szczegułów o Grid. C.D.N. 29