Programming: Delphi


Иллюстрированный самоучитель по Delphi 7 для профессионалов



Управление наборами данных



Компонент TSQLConnection позволяет выполнять некоторые операции с подключенными наборами данных и следить за их состоянием.

Свойство

    property DataSetCount: Integer;

возвращает число подключенных через данное соединение наборов данных.

Но это только активные наборы данных, переданные в связанные компоненты. Общее число выполняющихся в настоящий момент запросов возвращает свойство

    property ActiveStatements: LongWord;

Если сервер БД установил для данного соединения максимальное число одновременно выполняющихся запросов, то оно доступно в свойстве

    property MaxStmtsPerConn: LongWord;

Поэтому перед открытием набора данных можно выполнять следующий код, который повысит надежность приложения:

    if MyQuery.SQLConnection.ActiveStatements <= MyQuery.SQLConnection.MaxStmtsPerConn

    their MyQuery.Open

    else MessageDlg ('Database connection is busy', mtWarning, [mbOK] , 0) ;

В случае возникновения непредвиденной ситуации все открытые через данное соединение наборы данных можно быстро закрыть методом

    procedure CloseDataSets;

без разрыва соединения.

При необходимости компонент TSQLConnection может самостоятельно выполнять запросы SQL, не прибегая к помощи компонента TSQLQuery или TSQLDataSet. Для этого предназначена функция

    function Execute(const SQL: string; Params: TParams; 

    ResultSet:Pointer=nil): Integer;

Если запрос должен содержать параметры, то необходимо сначала создать объект — список параметров TParams и заполнить его. При этом, т. к. объект TParams еще не связан с конкретным запросом, важен порядок следования параметров, который должен совпадать в списке TParams и в тексте SQL.

Если запрос возвращает результат, метод автоматически создает объект типа TCustomSQLDataSet и возвращает указатель на него в параметр Resultset. Функция возвращает число обработанных запросом записей. Следующий фрагмент кода иллюстрирует применение функции Execute.

    procedure TForml.SendBtnClick(Sender: TObject); 

    var FParams: TParams;

    FDataSet: TSQLDataSet; 

    begin

    FParams := TParams.Create;

     try

    FParams.Items[0].Aslnteger := 1234; FParams.Items[1].AsInteger := 6751;

    MyConnection.Execute('SELECT * FROM Orders WHERE OrderNo >= :Ord AND

    EmpNo = :Emp', FParams, FDataSet);

    if Assigned(FDataSet) then

    with FDataSet do

    begin

    Open;

    while Not EOF do

    begin 

    {...} 

    Next ;

    end;

    Close;

     end;

    finally

    FParams.Free; 

    end; 

    end;

Если запрос не имеет настраиваемых параметров и не возвращает набор данных, можно использовать функцию

    function ExecuteDirect(const SQL: string): LongWord;

которая возвращает О в случае успешного выполнения запроса или код ошибки.

Метод

    procedure GetTableNames(List: TStrings; SystemTables: Boolean = False);

возвращает список таблиц базы данных. Параметр SystemTables позволяет включать в формируемый список List системные таблицы.

Метод GetTableNames дополнительно управляется свойством

    TTableScope = (tsSynonym, tsSysTable, tsTable, tsView);

     TTableScopes = set of TTableScope; 

    property TableScope: TTableScopes;

которое позволяет задать тип таблиц, имена которых попадают в список. Для каждой таблицы можно получить список полей, использовав метод

    procedure GetFieldNames(const TableName: String; List: TStrings);

и список индексов при помощи метода

    procedure GetlndexNames(const TableName: string; List: TStrings);

В обоих методах список возвращаемых значений содержится в параметре List.

Аналогичным образом метод

    procedure GetProcedureNames(List: TStrings); 

возвращает список доступных хранимых процедур, а метод

    procedure GetProcedureParams(ProcedureName: String; List: TList); 

определяет параметры отдельной процедуры.




Назад | Оглавление | Вперёд




При перепечатке любого материала с сайта, видимая ссылка на источник www.warayg.narod.ru и все имена, ссылки авторов обязательны.

© 2005
 

Hosted by uCoz