Информация о базах данных при помощи TSession
Автор: Александр Баранецкий
Часто приходиться решать те или иные задачи решение которых заложенны в информации о базе данных.
Это состояние таблиц в базе, полей в таблице. Имена драйверов. Параметры алиасов, драйверов и.т.д, и.т.п.
И тогда начинается самое интересное в деятельности программиста "как быть и что делать".
В этой статье не будет описанно какими методоми получить данные из базы. Концепция этой статьи заложенна в описании "физических
аспектов" баз.
Ну как сказал мне начальник ЦИТа КОДТ господин Дукенбаев Саулебек - "Ты должень быть программистом, а не философом". Так что, ближе
к сути.
В Delphi для получения инфы о базе очень хорошо применять Tsession. можно применить компонент Session на закладке BDE. Но будем
вызывать методы компонента так "вручную". хочу обратить ваше внимание на следующие "полезные" процедуры и функции.
// Собирает и заносит в "LIST" наши искомые базы.
procedure TSession.GetDatabaseNames(List: TStrings);
// Принимает на себя имя базы и заносит в "LIST" наши искомые Tables.
procedure TSession.GetTableNames(const DatabaseName, Pattern: string;
Extensions, SystemTables: Boolean; List: TStrings);
// Принимает базу затем таблицу в ней и заносит в "LIST" наши искомые поля
procedure TSession.GetFieldNames(const DatabaseName,
TableName: string; List: TStrings);
// Тоже полезная проца Заносит в лист ALIAS"ы
procedure TSession.GetAliasNames(List: TStrings);
Alias(для тех кто не знает) - это псевдоним базы. Т.е кней можно обратиться не по конкретному пути например "C:\data\Hello.db" а по
псевдониму, например "Hello", в котором хранится имя базы.
Например я знаю кто такая АЛСУ а до сих пор не знаю ее имя, Псевдоним!!!.
// Возвращает в List имена зарегестрированных драйверов.
procedure TSession.GetDriverNames(List: TStrings);
// Возвращает в лист все параметры указанного драйвера.
procedure TSession.GetDriverParams(const DriverName: string; List: TStrings);
// Возращает в лист"е параметры указанного алиаса
procedure TSession.GetAliasParams(const AliasName: string; List: TStrings);
// Возращает в строке имя драйвера которого использует алиас.
function TSession.GetAliasDriverName(const AliasName: string): string;
Выше были описанны только самые основные методы Tsession, как правило наиболее часто используемые.
Ну и чтобы не быть голословными небольшой примерчик "дерева" базы, почти как у Data Base Tree только еще и список полей фиксируется в
дереве.
procedure Tdbview.Button4Click(Sender: TObject);
var
I, D, q: Integer;
S, Tables, Fields: TStringList;
Mt: TTreeNode;
begin
try
with Dt.Items do
begin
s := TStringList.Create;
Tables := TStringList.Create;
fields := TStringList.Create;
Session.GetDatabaseNames(s);
for i := 0 to S.Count - 1 do
begin
try
mt := Add(nil, S[i]);
Session.GetTableNames(S[i], '', true, true, Tables);
for D := 0 to Tables.Count - 1 do
begin
AddChild(MT, Tables[d]);
Session.GetFieldNames(S[i], Tables[d], Fields);
for q := 0 to Fields.Count - 1 do
AddChild(Mt[d], Fields[q]);
end;
except
Continue;
end;
end;
end;
finally
s.Free;
Tables.Free;
Fields.Free;
end;
end;
При написании этого алгоритма был "высвечен" баг который мне внезапно открыл "запоролированную базу" и что только люди не скрывают
да баги подводят. О баге этом поговорим в другой раз.
Все примеры вызова процедур, а также пример "дерева" вы сможете найти на, хорошо закоментированном, приложенном демо пректе pr_data.
Для любой Delphi(5-7).
P.S. если у когото есть в несколько раз лучшие методы прошу пришлите их мне на мыло
|