Среда, 18.06.2025, 18:11
Приветствую Вас Гость | RSS
Меню сайта
fff
  • Индексация
  • Девочки
    Форма входа
    Категории раздела
    Теория алгоритмов [3]
    Теория алгоритмов
    Code Snippets [1]
    Code Snippets
    Все о PHP [20]
    Все о PHP
    Visual C++ [13]
    Visual C++
    WIN32 API [7]
    WIN32 API
    Delphi [72]
    Delphi
    ASP [2]
    ASP
    Java [67]
    Java
    VBScript [6]
    VBScript
    CGI [2]
    CGI
    VRML [2]
    VRML
    PERL [9]
    PERL
    HTML [4]
    HTML
    XML [10]
    XML
    Архив записей

    Статьи по Оптимизации

    ПРОГРАММИРОВАНИЕ! СОЗДАНИЕ САЙТОВ И ИХ ОПТИМИЗАЦИЯ

    Главная » Статьи » Программирование » Delphi

    Создание компонента TTable без формы Решение 1
    Создание компонента TTable без формы
    Решение 1

    Действительно, любой компонент можно создать и без (вне) формы или любого другого дочернего компонента. Для этого я использую параметр nil:
    FSession := TSession.Create(nil);

    FDatabase := TDatabase.Create(nil);
    FSession.SessionName := 'DBSession'
    FDatabase.Connected := False;
    FDatabase.AliasName := Database;
    FDatabase.DatabaseName := USER_DATABASE;
    FDatabase.SessionName := FSession.SessionName;

    FUserTBL := TTable.Create(nil);
    FUserTBL.DatabaseName := FDatabase.DatabaseName;
    FUserTBL.SessionName := FSession.SessionName;
    FUserTBL.TableName := USERTBL;
    FUserTBL.IndexName := USERSpIndex;

    FUserSource := TDataSource.Create(nil);
    FUserSource.DataSet := FUserTBL;

    Решение 2

    Я привожу некоторый код, касающийся описываемой проблемы: он работал, когда я использовал его в большом приложении. Я не знаю специфического метода создания компонента TTable вне родителей, поэтому я пошел путем создания своего класса от TTable во время инициализации модуля. Удобство такого подхода объясняется наличием под рукой всегда готового к работе экземпляра класса, стоит всего-лишь добавить модуль к вашему приложению.

    Конечно, новый класс не должен иметь одиноко выглядящую процедуру со странной технологией фильтрации данных :=))), да и не помешала бы публикация нескольких событий, но этот пример призван все-го лишь продемонстрировать иной подход к решаемой задаче.
    unit Unit2;

    interface
    uses db, DBTables, dialogs;

    type fake = class(Ttable)

    procedure fakeFilterRecord(DataSet: TDataSet; var Accept: Boolean);
    end;

    var

    MyTable : fake;

    implementation

    procedure fake.fakeFilterRecord(DataSet: TDataSet; var Accept: Boolean);
    begin

    showmessage('Здравствуй, Вася');
    end;

    Initialization

    MyTable := fake.create(nil);
    With Mytable do begin
    DataBaseName := 'dbdemos';
    TableName := 'biolife';
    OnFilterRecord := MyTable.fakeFilterRecord;
    Filtered := true;
    active := true;
    end;

    {проверка получением неких данных...}
    showmessage(MyTable.fields[1].asstring);

    Finalization
    {Важно! MyTable не имеет родителя, - уничтожаем объект сами, иначе память не высвобождается...}
    MyTable.free;

    end.

    Категория: Delphi | Добавил: Merlin (07.12.2009)
    Просмотров: 411 | Рейтинг: 0.0/0
    Всего комментариев: 0
    Имя *:
    Email *:
    Код *: