Компонент
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.
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);
определяет
параметры отдельной процедуры.