Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Информация о базах данных при помощи 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. если у когото есть в несколько раз лучшие методы прошу пришлите их мне на мыло

Проект Delphi World © Выпуск 2002 - 2004
Автор проекта: ___Nikolay