Składnik 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ć albo instrukcjami DDL (Data Definition Language), takimi jak CREATE TABLE, ALTER INDEX i tak dalej, lub mogą to być instrukcje DML (Data Manipulation Language), takie jak SELECT, UPDATE i USUNĄĆ. Jednak najczęściej stosowaną instrukcją jest instrukcja SELECT, która tworzy widok podobny do tego dostępnego przy użyciu komponentu Table.
Uwaga: nawet jeśli wykonywanie poleceń za pomocą komponentu ADOQuery jest możliwe, ADOCommandskładnik jest bardziej odpowiedni do tego celu. Najczęściej jest używany do wykonywania poleceń DDL lub do 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ć akceptowalny dla używanego sterownika ADO. Innymi słowy, powinieneś znać różnice w pisaniu SQL między, na przykład, MS Access i MS SQL.
Podobnie jak w przypadku pracy z komponentem ADOTable, dostęp do danych w bazie danych odbywa się za pomocą połączenia ze składnicą danych ustanowionego przez komponent ADOQuery za pomocą jegoCiąg połączenia lub za pośrednictwem osobnego komponentu ADOConnection określonego w Połączeniewłasność.
Aby formularz Delphi mógł pobierać dane z bazy danych Access za pomocą komponentu ADOQuery, po prostu usuń wszystko powiązane z nimi elementy dostępu do danych i rozpoznające dane oraz utworzyć łącze zgodnie z opisem w poprzednich rozdziałach tego kierunek. Komponenty dostępu do danych: DataSource, ADOConnection wraz z ADOQuery (zamiast ADOTable) i jeden komponent rozpoznający dane, taki jak DBGrid, są wszystkim, czego potrzebujemy.
Jak już wyjaśniono, za pomocą Inspektora obiektów ustaw łącze między tymi komponentami w następujący sposób:
DBGrid1.DataSource = DataSource1
DataSource1.DataSet = ADOQuery1
ADOQuery1.Connection = ADOConnection1
// zbuduj ConnectionString
ADOConnection1.ConnectionString = ...
ADOConnection1.LoginPrompt = False
Wykonanie zapytania SQL
Komponent TADOQuery nie ma Nazwa tabeliwłaściwość, jak robi to TADOTable. TADOQuery ma właściwość (TStrings) o nazwie SQL który służy do przechowywania instrukcji SQL. Możesz ustawić wartość właściwości SQL 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: „WYBIERZ * Z autorów”.
Instrukcja SQL może być wykonana na dwa sposoby, w zależności od typu instrukcji. Instrukcje języka definicji danych są zwykle wykonywane za pomocą ExecSQL metoda. Na przykład, aby usunąć konkretny rekord z określonej tabeli, możesz napisać instrukcję DELETE DDL i uruchomić zapytanie za pomocą metody ExecSQL.
(Zwykłe) instrukcje SQL są wykonywane przez ustawienie TADOQuery. Aktywny właściwość do Prawdziwe lub dzwoniąc na numerotwarty metoda (zasadniczo taka sama). To podejście jest podobne do pobierania danych 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:
z ADOQuery1 zaczynaj Zamknij;
SQL.Clear;
SQL.Add: = „WYBIERZ * OD AUTORÓW” SQL.Add: = „ZAMÓWIENIE WEDŁUG nazwy autora DESC” Otwórz;
koniec;
Powyższy kod w czasie wykonywania zamyka zestaw danych, opróżnia ciąg SQL we właściwości SQL, przypisuje nowe polecenie SQL i aktywuje zestaw danych, wywołując metodę Open.
Zauważ, że oczywiście tworzenie trwałej listy obiektów pól dla komponentu ADOQuery nie ma sensu. Przy następnym wywołaniu metody Open SQL może być tak różny, że cały zestaw nazw i typów plików może się zmienić. Oczywiście nie dzieje się tak, jeśli używamy ADOQuery do pobierania wierszy z tylko jednej tabeli ze stałym zestawem pól - a wynikowy zestaw zależy od WHERE części instrukcji SQL.
Zapytania dynamiczne
Jedną z wielkich właściwości komponentów TADOQuery jest Params własność. Zapytanie sparametryzowane to takie, które umożliwia elastyczny wybór wiersza / kolumny za pomocą parametru w klauzuli WHERE instrukcji SQL. Właściwość Params umożliwia wymienne parametry w predefiniowanej instrukcji SQL. Parametr jest symbolem zastępczym dla wartości w klauzuli WHERE, zdefiniowanej 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:
ADOQuery1.SQL: = 'WYBIERZ * Z aplikacji, GDZIE typ =: apptype'
Po zamknięciu okna edytora SQL otwórz okno Parametry, klikając przycisk wielokropka w Inspektorze obiektów.
Parametr w poprzedniej instrukcji SQL ma nazwęrodzaj. Możemy ustawić wartości parametrów w kolekcji Params w czasie projektowania za pomocą okna dialogowego Parametry, ale przez większość czasu będziemy zmieniać parametry w czasie wykonywania. W oknie dialogowym Parametry można określić typy danych i wartości domyślne parametrów używanych w zapytaniu.
W czasie wykonywania parametry można zmienić, a zapytanie ponownie wykonać, aby odświeżyć dane. Aby wykonać sparametryzowane zapytanie, 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ższą instrukcję SQL, w czasie wykonywania moglibyśmy użyć następującego kodu:
z ADOQuery1 zacząć
Blisko;
SQL.Clear;
SQL.Add („WYBIERZ * Z aplikacji, GDZIE typ =: apptype”);
ParamByName („apptype”). Wartość: = „multimedia”;
Otwarty;
koniec;
Podobnie jak podczas pracy ze składnikiem ADOTable, ADOQuery zwraca zestaw lub rekordy z tabeli (lub dwóch lub więcej). Poruszanie się po zestawie danych odbywa się przy użyciu tego samego zestawu metod, jak opisano w rozdziale „Za danymi w zestawach danych”.
Nawigacja i edycja zapytania
Zasadniczo komponentu ADOQuery nie należy używać 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 pojedynczej tabeli i nie może używać żadnych funkcji agregujących SQL. Edycja zestawu danych zwróconego przez ADOQuery jest taka sama jak edycja zestawu danych ADOTAble.
Przykład
Aby zobaczyć akcję ADOQuery, napiszemy 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ć GetTableNamesmetoda ADOConnection składnik. GetTableNames w zdarzeniu OnCreate formularza wypełnia ComboBox nazwami tabel, a przycisk służy do zamknięcia zapytania i odtworzenia go w celu pobrania rekordów z wybranej tabeli. Procedury obsługi zdarzeń () powinny wyglądać następująco:
Procedura TForm1.FormCreate (Sender: TObject);
zaczynać
ADOConnection1.GetTableNames (ComboBox1.Items);
koniec;
procedura TForm1.Button1Click (Sender: TObject);
var tblname: string;
zaczynać
jeśli ComboBox1.ItemIndex to Exit;
tblname: = ComboBox1.Items [ComboBox1.ItemIndex];
z ADOQuery1 zacząć
Blisko;
SQL.Text: = 'SELECT * FROM' + tblname;
Otwarty;
koniec;
koniec;
Zauważ, że wszystko to można zrobić za pomocą ADOTable i jego właściwości TableName.