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

Previous  Top  Next

    
 

 

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

 

Свойство

 

property DataSetCount: Integer;

 

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

 

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

 

property ActiveStatements: LongWord;

 

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

 

property MaxStmtsPerConn: LongWord;

 

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

 

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

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.

Code:

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);

 

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