Пользователь

Добро пожаловать,

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

Меню сайта




Ваше мнение
Оцените скорость загрузки страниц сайта

Реактивная
Быстрая
Нормальная
Неважная
Медленная
Черепашья


Результаты
Другие опросы

Всего голосов: 971
Комментарии: 4


Наши партнеры



Статистика




Programming books  Download software  Documentation  Scripts  Content Managment Systems(CMS)  Templates  Icon Sets  Articles  Contacts  Voting  Site Search




Статьи и обзоры



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

Статьи по объектно-ориентированному программированию на языке Pascal и в среде программирования Delphi. Примеры работающего кода, тексты компонентов и классов, советы мастеров. Данная проблема решается как минимум двумя путями, о чем и будет рассказано ниже.




Решение 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 и TurboPascal Создание компонента TTable без формы Данная проблема решается как минимум двумя путями чем будет рассказано ниже Решение Действительно любой компонент можно создать без вне формы или любого другого дочернего компонента Для этого использую параметр КодFSession TSession Create FDatabase TDatabase FSession SessionName & #039 DBSession& Connected False AliasName Database DatabaseName USER_DATABASE FUserTBL TTable TableName USERTBL IndexName USERSpIndex FUserSource TDataSource DataSet