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