Клас Tquery має кілька важливих характеристик, що має кожен запит(усі властивості тут тільки для читання).
1)Local=true для локальних БД типу Paradox, Dbase Foxpro; false для локальних БД типу Access і SQL-серверних БД.
2)Числовий ідентифікатор (дескриптор) Handle, який можна використовувати при виклику функцій API BDE.
3)Покажчик на запис StmtHandle типу HDBIStmt, який можна використовувати при виклику функцій API BDE.
4)UniDirectional=true якщо курсор в результаті запиту можна переміщати тільки вперед, false якщо в обох напрямках.
5)Prepared=true якщо запит був оброблений методом Prepare для перевірки синтаксису й оптимізації , false якщо текст запиту мінявся. Спочатку, до першого виклику запиту, також Prepared= false. Якщо текст запиту змінився в процесі виконання програми (запит динамічний), то треба або явно викликати метод Prepare, або установити властивість Prepared у False c допомогою методу UnPrepare і тоді метод Prepare буде викликаний автоматично. Якщо цього не зробити, то виконається той запит, для якого останнім викликався метод Prepare.
6)Text – остаточний текст запиту перед його виконанням.
7)RowsAffected – число записів вилучених чи змінених останнім запитом. Якщо запит закінчився помилкою, то RowsAffected=-1.
Розглянемо докладніше процес виконання запиту. Він проходить
такі стадії:
1)вихідний текст SQL запиту привласнюється властивісті Text
2)Запит відправляється в BDE для перевірки синтаксису й оптимізації(метод Prepare).
3)Запит виконується. Виконання запиту здійснюється методом ExecSQL, крім запиту на вибірку, що здійснюється методом Open.
Розглянемо приклад. Потрібно виконати будь-як запит до деякої таблиці. Довільний текст запиту буде сформований користувачем у memo - редакторі. Перенесемо на форму дві кнопки, компоненти Query і DataSource, DBGrid, DBNavigator для роботи з таблицею і редактор Memo. Тільки для контролю роботи запиту помістимо компоненти Table, DataSource, DBGrid ,DBNavigator, що будуть зв'язані з тією же таблицею. Таким чином, виконання оператора Select буде контролюватися за допомогою компонента Query, інших - за допомогою компонента Table. В оброблювачі події onClick першої кнопки будемо виконувати перевірку запиту за допомогою методу Prepare, для другої виконувати запит. Помітимо, що статичних запитів метод Prepare явно викликати не потрібно, його виклик буде автоматичним. Для динамічних запитів його потрібно викликати.
Query1.Close;
Query1.Clear;
Query1.Sql:=Memo1.Lines;
If Not Query1.Prepared then
Try
Query1.Prepare;
Except
MessageDlg('Помилка в тексті запиту!',mterror,[mbok],0);
End;
Якщо метод Prepare для запиту закінчився невдачею, то помилка перехоплюється і видається повідомлення.
Для другої кнопки:
Try
If Pos(‘SELECT’,Uppercase(Query1.Text))>0 then
Query1.Open
Else
Query1.ExecSql;
Except
MessageDlg('Помилка при виконанні запиту!',mterror,[mbok],0);
End;
У залежності від того, чи є запит вибіркою, чи ні викликається метод Open чи ExecSql.За допомогою приведеного додатка можна виконувати будь-як запити та будь-які оператори SQL.