Używanie zapytań Delphi z ADO

Komponent TADOQuery zapewnia: Delfy programiści możliwość pobierania danych z jednej lub wielu tabel z Baza danych ADO za pomocą SQL.





Te instrukcje SQL mogą być instrukcjami DDL (język definicji danych), takimi jak CREATE TABLE, ALTER INDEX itd., albo mogą być instrukcjami DML (językiem manipulacji danymi), takimi jak SELECT, UPDATE i DELETE. Najpopularniejszą instrukcją jest jednak instrukcja SELECT, która tworzy widok podobny do dostępnego przy użyciu komponentu Table.

Uwaga: mimo że wykonywanie poleceń za pomocą komponentu ADOQuery jest możliwe, ADOCommand składnik jest bardziej odpowiedni do tego celu. Jest najczęściej używany do wykonywania poleceń DDL lub wykonywania procedury składowanej (nawet jeśli powinieneś użyć TADOStoredProc dla takich zadań), który nie zwraca zestawu wyników.



SQL używany w komponencie ADOQuery musi być akceptowany przez używany sterownik ADO. Innymi słowy, powinieneś znać różnice w pisaniu SQL między np. MS Access i MS SQL.

Podobnie jak podczas pracy z komponentem ADOTable, dostęp do danych w bazie danych odbywa się za pomocą połączenia magazynu danych ustanowionego przez komponent ADOQuery przy użyciu jego Ciąg połączenia właściwość lub przez oddzielny komponent ADOConnection określony w Połączenie własność.



Aby formularz Delphi mógł pobierać dane z bazy danych Access za pomocą komponentu ADOQuery, po prostu upuść w nim wszystkie powiązane komponenty dostępu do danych oraz komponenty rozpoznające dane i utwórz łącze, jak opisano w poprzednich rozdziałach tego kursu. Komponenty dostępu do danych: DataSource, ADOConnection wraz z ADOQuery (zamiast ADOTable) i jeden komponent świadomy danych, taki jak DBGrid, to wszystko, czego potrzebujemy.
Jak już wyjaśniono, za pomocą Inspektora obiektów ustaw połączenie między tymi komponentami w następujący sposób:

|_+_|

Wykonywanie zapytania SQL

Komponent TADOQuery nie ma Nazwa tabeli właściwość, tak jak robi to TADOTable. TADOQuery ma właściwość (TSStrings) o nazwie SQL który służy do przechowywania instrukcji SQL. Wartość właściwości SQL można ustawić za pomocą Inspektora obiektów w czasie projektowania lub za pomocą kodu w czasie wykonywania.

W czasie projektowania wywołaj edytor właściwości dla właściwości SQL, klikając przycisk wielokropka w Inspektorze obiektów. Wpisz następującą instrukcję SQL: 'SELECT * FROM Authors'.

Wyrażenie SQL można wykonać na dwa sposoby, w zależności od typu instrukcji. Instrukcje w języku definicji danych są zazwyczaj wykonywane z ExecSQL metoda. Na przykład, aby usunąć określony rekord z określonej tabeli, można napisać instrukcję DELETE DDL i uruchomić zapytanie za pomocą metody ExecSQL.
(Zwykłe) instrukcje SQL są wykonywane przez ustawienie TADOQuery.Active własność do Prawdziwe lub dzwoniąc do otwarty metoda (w zasadzie taka sama). To podejście jest podobne do pobierania danych z tabeli za pomocą komponentu TADOTable.



W czasie wykonywania instrukcja SQL we właściwości SQL może być używana jako dowolny obiekt StringList:

|_+_|

Powyższy kod w czasie wykonywania zamyka zbiór danych, opróżnia ciąg SQL we właściwości SQL, przypisuje nowe polecenie SQL i aktywuje zbiór danych przez wywołanie metody Open.



Zauważ, że oczywiście tworzenie trwałej listy obiektów pola dla komponentu ADOQuery nie ma sensu. Następnym razem, gdy wywołasz metodę Open, SQL może być tak różny, że cały zestaw nazw pól (i typów) może się zmienić. Oczywiście tak nie jest, jeśli używamy ADOQuery do pobierania wierszy tylko z jednej tabeli ze stałym zestawem pól - a wynikowy zestaw zależy od części WHERE instrukcji SQL.

Zapytania dynamiczne

Jedną z wielkich właściwości komponentów TADOQuery jest Params własność. Zapytanie parametryczne to takie, które umożliwia elastyczny wybór wiersza/kolumny przy użyciu parametru w klauzuli WHERE instrukcji SQL. Właściwość Params umożliwia zastępowanie parametrów we wstępnie zdefiniowanej instrukcji SQL. Parametr jest symbolem zastępczym wartości w klauzuli WHERE, zdefiniowanym tuż przed otwarciem zapytania. Aby określić parametr w zapytaniu, użyj dwukropka (:) poprzedzającego nazwę parametru.
W czasie projektowania użyj Inspektora obiektów, aby ustawić właściwość SQL w następujący sposób:



|_+_|

Po zamknięciu okna edytora SQL otwórz okno Parametry, klikając przycisk z wielokropkiem w Inspektorze obiektów.

Parametr w poprzedniej instrukcji SQL nosi nazwę typ aplikacji . Możemy ustawić wartości parametrów w kolekcji Params w czasie projektowania za pomocą okna dialogowego Parametry, ale w większości przypadków będziemy zmieniać parametry w czasie wykonywania. Okno dialogowe Parametry może służyć do określania typów danych i domyślnych wartości parametrów używanych w zapytaniu.



W czasie wykonywania można zmienić parametry i ponownie wykonać zapytanie w celu odświeżenia danych. Aby wykonać zapytanie parametryczne, konieczne jest podanie wartości dla każdego parametru przed wykonaniem zapytania. Aby zmodyfikować wartość parametru, używamy właściwości Params lub metody ParamByName. Na przykład, biorąc pod uwagę powyższe polecenie SQL, w czasie wykonywania możemy użyć następującego kodu:

|_+_|

Podobnie jak podczas pracy z komponentem ADOTable, ADOQuery zwraca zestaw lub rekordy z tabeli (lub dwóch lub więcej). Poruszanie się po zbiorze danych odbywa się za pomocą tego samego zestawu metod, jak opisano w rozdziale „Za danymi w zbiorach danych”.

Nawigacja i edycja zapytania

Generalnie komponent ADOQuery nie powinien być używany podczas edycji. Zapytania oparte na SQL są najczęściej używane do celów raportowania. Jeśli zapytanie zwraca zestaw wyników, czasami można edytować zwrócony zestaw danych. Zestaw wyników musi zawierać rekordy z jednej tabeli i nie może używać żadnych funkcji agregujących SQL. Edycja zbioru danych zwróconego przez ADOQuery jest taka sama jak edycja zbioru danych ADOTAble.

Przykład

Aby zobaczyć akcję ADOQuery, zakodujemy mały przykład. Zróbmy zapytanie, którego można użyć do pobrania wierszy z różnych tabel w bazie danych. Aby wyświetlić listę wszystkich tabel w bazie danych, możemy użyć Pobierz nazwy tabel metoda ADOPołączenie składnik. GetTableNames w zdarzeniu OnCreate formularza wypełnia ComboBox nazwami tabel, a Button służy do zamykania zapytania i ponownego tworzenia go w celu pobrania rekordów z wybranej tabeli. Programy obsługi zdarzeń () powinny wyglądać tak:

|_+_|

Zauważ, że wszystko to można zrobić za pomocą ADOTable i jego właściwości TableName.