M Y D E L P H I 7 . R U Самоучитель программирования  
 
  • Главная
  •  

     

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

    Компонент 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); 

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