Компонентът TADOQuery осигурява Delphi разработчиците възможност да извличат данни от една или няколко таблици от ADO база данни използване на SQL.
Тези SQL изявления могат да бъдат или DDL-изрази (език за дефиниране на данни) като CREATE TABLE, ALTER INDEX и т.н. или те могат да бъдат DML (език за манипулиране на данни), като SELECT, UPDATE и ИЗТРИЙ. Най-често срещаното изявление обаче е операторът SELECT, който създава изглед, подобен на този, наличен с помощта на компонент Таблица.
Забележка: въпреки че изпълнението на команди с помощта на компонента ADOQuery е възможно, ADOCommandкомпонент е по-подходящ за тази цел. Най-често се използва за изпълнение на DDL команди или за изпълнение на съхранена процедура (въпреки че трябва да използватеTADOStoredProc за такива задачи), която не връща набор от резултати.
SQL, използван в компонента на ADOQuery, трябва да бъде приемлив за използвания драйвер на ADO. С други думи, трябва да сте запознати с разликите в писането на SQL, например между MS Access и MS SQL.
Както при работа с компонента ADOTable, до данните в база данни се осъществява достъп чрез връзка за съхранение на данни, установена от компонента ADOQuery, използвайки неговатаConnectionString свойство или чрез отделен компонент ADOConnection, посочен в ВръзкаИмот.
За да направите Delphi форма, способна да извлече данните от база данни на Access с компонента ADOQuery, просто пуснете всички свързаните компоненти за достъп до данни и съзнаващи данни на него и правят връзка, както е описано в предишните глави на това Разбира се. Всичко, от което се нуждаем, са компонентите за достъп до данни: DataSource, ADOConnection, заедно с ADOQuery (вместо ADOTable) и един компонент, запознат с данни като DBGrid.
Както вече беше обяснено, с помощта на обектния инспектор задайте връзката между тези компоненти, както следва:
DBGrid1.DataSource = DataSource1
DataSource1.DataSet = ADOQuery1
ADOQuery1.Connection = ADOConnection1
// изграждане на ConnectionString
ADOConnection1.ConnectionString = ...
ADOConnection1.LoginPrompt = Грешно
Извършване на SQL заявка
Компонентът TADOQuery няма a TableNameсобственост, както прави TADOTable. TADOQuery има свойство (TStrings), наречено SQL който се използва за съхраняване на SQL оператора. Можете да зададете стойността на свойството SQL с Object Inspector по време на проектиране или чрез код по време на изпълнение.
По време на проектиране, извикайте редактора на свойствата за SQL свойството, като щракнете върху бутона елипсис в Object Inspector. Въведете следния SQL оператор: "SELECT * FROM Authors".
SQL операторът може да бъде изпълнен по един от двата начина, в зависимост от типа на оператора. Изразът Език за дефиниране на данни обикновено се изпълнява с ExecSQL метод. Например, за да изтриете конкретен запис от конкретна таблица, можете да напишете DELETE DDL оператор и да стартирате заявката с метода ExecSQL.
(Обикновените) SQL оператори се изпълняват чрез настройка на TADOQuery. Активен собственост на Вярно или като се обадите наотворено метод (по същество същият). Този подход е подобен на извличане на данни от таблица с компонента TADOTable.
По време на изпълнение SQL операторът в свойството SQL може да се използва като всеки обект StringList:
с ADOQuery1 започват затваряне;
SQL.Clear;
SQL.Add: = 'ИЗБЕРЕТЕ * ОТ АВТОРИ' SQL.Add: = 'ПОРЪЧЕТЕ Име на автор DESC' Отвори
край;
Горният код по време на изпълнение затваря набора от данни, изпразва SQL низа в свойството SQL, назначава нова SQL команда и активира набора от данни, като извиква метода Open.
Обърнете внимание, че очевидно създаването на постоянен списък на полеви обекти за компонент ADOQuery няма смисъл. Следващият път, когато се обадите на метода Open, SQL може да бъде толкова различен, че целият набор от подадени имена (и видове) може да се промени. Разбира се, това не е така, ако използваме ADOQuery за извличане на редовете от само една таблица с постоянния набор от полета - и полученият набор зависи от частта WHERE на SQL израза.
Динамични заявки
Едно от големите свойства на компонентите на TADOQuery е Params Имот. Параметризирана заявка е тази, която позволява гъвкав избор на ред / колона, като се използва параметър в клаузата WHERE на SQL оператор. Свойството Params позволява заменяеми параметри в предварително дефинирания SQL оператор. Параметърът е запазено място за стойност в клаузата WHERE, дефинирана непосредствено преди отварянето на заявката. За да посочите параметър в заявка, използвайте двоеточие (:), предхождащо име на параметър.
По време на проектиране използвайте Object Inspector, за да зададете свойството SQL, както следва:
ADOQuery1.SQL: = 'ИЗБЕРЕТЕ * ОТ ПРИЛОЖЕНИЯ КЪДЕ type =: apptype'
Когато затворите прозореца на SQL редактора, отворете прозореца Параметри, като щракнете върху бутона на елипсиса в Инспектора на обекта.
Параметърът в предходния SQL оператор е именуванТип приложение. Можем да зададем стойностите на параметрите в колекцията Params по време на проектиране чрез диалоговия прозорец Параметри, но през повечето време ще променяме параметрите по време на изпълнение. Диалогът Параметри може да се използва за определяне на типовете данни и стойностите по подразбиране на параметрите, използвани в заявката.
По време на изпълнение параметрите могат да бъдат променени и заявката да се изпълни отново, за да опресните данните. За да се изпълни параметризирана заявка, е необходимо да се предостави стойност за всеки параметър преди изпълнението на заявката. За да променим стойността на параметъра, използваме или свойството Params, или ParamByName. Например, като се има предвид SQL израза, както по-горе, по време на изпълнение можем да използваме следния код:
с ADOQuery1 започват
Близо;
SQL.Clear;
SQL.Add ('ИЗБЕРЕТЕ * ОТ ПРИЛОЖЕНИЯ ГДЕ type =: apptype');
. ParamByName ( "Тип приложение") Стойност: = 'мултимедия;
Отворете;
край;
Както при работа с компонента ADOTable, ADOQuery връща набор или записи от таблица (или две или повече). Навигирането през набор от данни се извършва със същия набор от методи, описани в глава "Зад данните в наборите от данни".
Навигация и редактиране на заявката
Като цяло компонентът ADOQuery не трябва да се използва, когато се извършва редактиране. Въпросите, базирани на SQL, се използват най-вече за целите на отчитането. Ако вашата заявка върне набор от резултати, понякога е възможно да редактирате върнатия набор от данни. Наборът от резултати трябва да съдържа записи от една таблица и не трябва да използва никакви функции за SQL агрегат. Редактирането на база данни, върната от ADOQuery, е същата като редактирането на набора от данни на ADOTAble.
пример
За да видите някои действия на ADOQuery ще кодираме малък пример. Нека направим заявка, която може да се използва за извличане на редовете от различни таблици в база данни. За да покажем списъка на всички таблици в база данни, можем да използваме GetTableNamesметод на ADOConnection компонент. GetTableNames в събитието OnCreate на формата запълва ComboBox с имената на таблицата и Бутонът се използва за затваряне на заявката и за пресъздаване, за да извлечете записите от избрана таблица. Обработващите събития () трябва да изглеждат като:
процедура TForm1.FormCreate (подател: TObject);
започвам
ADOConnection1.GetTableNames (ComboBox1.Items);
край;
процедура TForm1.Button1Click (подател: TObject);
var tblname: низ;
започвам
ако ComboBox1.ItemIndex тогава излезте;
tblname: = ComboBox1.Items [ComboBox1.ItemIndex];
с ADOQuery1 започват
Близо;
SQL.Text: = 'ИЗБЕРЕТЕ * ОТ' + tblname;
Отворете;
край;
край;
Имайте предвид, че всичко това може да се направи, като се използва свойството ADOTable и неговото свойство TableName.