link3550 link3551 link3552 link3553 link3554 link3555 link3556 link3557 link3558 link3559 link3560 link3561 link3562 link3563 link3564 link3565 link3566 link3567 link3568 link3569 link3570 link3571 link3572 link3573 link3574 link3575 link3576 link3577 link3578 link3579 link3580 link3581 link3582 link3583 link3584 link3585 link3586 link3587 link3588 link3589 link3590 link3591 link3592 link3593 link3594 link3595 link3596 link3597 link3598 link3599 link3600 link3601 link3602 link3603 link3604 link3605 link3606 link3607 link3608 link3609 link3610 link3611 link3612 link3613 link3614 link3615 link3616 link3617 link3618 link3619 link3620 link3621 link3622 link3623 link3624 link3625 link3626 link3627 link3628 link3629 link3630 link3631 link3632 link3633 link3634 link3635 link3636 link3637 link3638 link3639 link3640 link3641 link3642 link3643 link3644 link3645 link3646 link3647 link3648 link3649 link3650 link3651 link3652 link3653 link3654 link3655 link3656 link3657 link3658 link3659 link3660 link3661 link3662 link3663 link3664 link3665 link3666 link3667 link3668 link3669 link3670 link3671 link3672 link3673 link3674 link3675 link3676 link3677 link3678 link3679 link3680 link3681 link3682 link3683 link3684 link3685 link3686 link3687 link3688 link3689 link3690 link3691

Компонент TQuery

Компонент TQuery, как и компонент TTable, обладает всеми свойствами компонента TDataSet.

Как и в случае с компонентом TTable, компонент TDataSource управляет взаимодействием между компонентами Data Controls и компонентом TQuery. Обычно приложение имеет один компонент DataSource для каждого компонента TQuery.

Наиболее часто используются следующие свойства компонента TQuery:

  • Active — указывает, открыт (true) или закрыт (false) данный запрос
  • Eof, Bof — эти свойства принимают значение true, когда указатель текущей записи расположен на последней или соответственно первой строке набора данных, являющегося результатом выполнения запроса.
  • DatabaseName — имя каталога либо псевдоним (alias) удаленной БД, к которой осуществляется запрос.
  • DataSource — указывает источник данных для параметризованных запросов (т.е. запросов с параметрами, значение которых заранее неизвестно).
  • Fields — это свойство доступно только во время выполнения (run-time only) и используется для чтения или модификации поля, определяемого по порядковому номеру.
  • Params — содержит параметры для параметризованного запроса, как SomeNo в следующем примере:
     Select * from Orders where CustNo=:SomeNo
  • SQL — строковый массив, содержащий текст оператора запроса SQL.

Отметим, что язык запросов SQL (Structured Query Language), традиционно применяемый при работе с серверными СУБД, может быть использован и при работе с таблицами формата dBase и Paradox. Не вдаваясь в подробное описание синтаксиса этого языка (с ним можно познакомиться в других источниках, например, в книге М.Грабера "Введение в SQL"), отметим одну его особенность. SQL — язык непроцедурный. На нем можно написать, что нужно получить в результате запроса, но нельзя написать, как это сделать, то есть нельзя описать саму процедуру выполнения запроса. Дело в том, что реализация выполнения тех или иных операторов SQL серверами баз данных может быть различна, и в большинстве случаев неинтересна клиентскому приложению, создаваемому с помощью С++ Builder. В случае таблиц dBase или Paradox реализацию SQL берет на себя библиотека Borland Database Engine.

Компонент TQuery позволяет использовать операторы SQL для того, чтобы определять или создавать наборы данных, которые можно отобразить на экране, вставлять, удалять и редактировать строки.

  • RequestLive — если это свойство имеет значение true и синтаксис запроса таков, что его результат может быть модифицируем, пользователь может редактировать данные с сохранением их в базе данных. Если RequestLive имеет значение false, результат запроса возвращается в состоянии read-only.

Наиболее часто используются следующие методы компонента TQuery:

  • ExecSQL — выполняет SQL-запрос, содержащийся в свойстве SQL, если запрос не возвращает данные. Следует употреблять этот метод при вставке, редактировании или удалении данных. При выполнении же оператора SELECT (выбор данных) следует использовать метод Open. Следующий пример показывает применение метода ExecSQL:
     Query1->Close();
    Query1->SQL->Clear();
    Query1->SQL->Add("Delete emp where empno=1010");
    Query1->ExecSQL();
  • Open — открывает компонент TQuery. Он эквивалентен присвоению свойству Active значения true. Используется, если результатом запроса является набор данных (такие запросы обычно начинаются с оператора SELECT). Пример использования метода Open:
     Query1->Open();
  • Close — закрывает компонент TQuery. Вызов Close эквивалентен присвоению свойству Active значения false. Пример использования метода Close:
     Query1->Close();
  • Prepare — обеспечивает передачу серверу баз данных запроса, содержащегося в свойстве SQL, для оптимизации и компиляции. Полный запрос с параметрами не передается, пока не вызваны методы Open или ExecSQL. Даже если метод Prepare не вызывается явно, он будет вызван неявно, если используются методы Open или ExecSQL (в этом можно убедиться, запустив утилиту SQL Monitor). Пример использования метода Prepare:
     Query1->Close();
    Query1->SQL->Add("Delete emp where empno=:empno");
    Query1->Prepare();

    Компоненты TQuery обладают большим разнообразием методов, унаследованных от TDataSet. Наиболее часто используются следующие методы:

  • First, Last, Next, Prior перемещают указатель текущей записи на первую, последнюю, следующую и предыдущую записи соответственно, например:
  • MoveBy перемещает указатель на определенное количество строк.
  • Insert, Edit, Delete, Append, Post, Cancel — позволяют модифицировать результат запроса. Метод Insert позволяет вносить в результат запроса строки, как в следующем примере:
     Query2->Insert();
    Query2->Fields[0]->AsInteger = 100;
    Query2->Fields[1]->AsString =Edit1->Text;
    Query2->Post();

    Метод Post подтвержает операции Insert, Update или Delete, совершая реальное физическое изменение в базе данных. Метод Cancel отменяет незавершенные операции Insert, Delete, Edit или Append.

  • FreeBookmark, GetBookmark, GotoBookmark- — позволяют создавать закладки (маркированные строки) в запросе и затем вернуться к такой строке позже.

Прежде чем перейти к непосредственному использованию запросов, следует остановиться на весьма полезном инструменте — генераторе запросов Visual Query Builder, с помощью которого можно определить свойство SQL компонента TQuery, если по каким-либо причинам это неудобно делать непосредственно в редакторе свойств.