Мир программирования

 


Найти: на:


Меню
Партнеры
Счетчики
Реклама

Создание компонента 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 .

 

[Оглавление]

Опрос

Конкурсы
Реклама

 

Web дизайн: Бурлаков Михаил    

Web программирование: Бурлаков Михаил

Используются технологии uCoz