Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.08.21;
Скачать: CL | DM;

Вниз

Динамически создаваемыеTTable   Найти похожие ветки 

 
Dec ©   (2003-07-27 01:17) [0]

Господа, у меня есть две небольшие проблеммы.

1: Мне приходится динамически создавать несколько TTable (10-15 экземпляров), но при этом в некоторые нужно добавить LookUp поля. Использую следующий код:

for j := 0 to myTB[i].FieldCount - 1 do
with myTB[i].Fields[j] do
begin
// проверяю необходимость добавление LookUp поля
if (FieldName[Length(FieldName)-1] = "I") and
(FieldName[Length(FieldName)] = "D") and
(Length(FieldName) > 2) then
begin
Fld := TStringField.Create(myTB[i]);
st := FieldName;
st[0] := chr(Length(st)-2);
Fld.FieldName := st;
Fld.Name := myTB[i].Name + Fld.FieldName;
Fld.Index := myTB[i].FieldCount;
Fld.FieldKind := fkLookup;
Fld.KeyFields := FieldName;
Fld.LookupDataSet := myTB[lkp];
Fld.LookupKeyFields := "ID";
Fld.LookupResultField := "Name";
myTB[i].Close;
Fld.DataSet := myTB[i];
myTB[i].FieldDefs.UpDate;
aa :=mytb[i].FieldCount;
myTB[i].Open;
end;
( оно содержит код элемента в другой таблице)
Господа, у меня есть две небольшие проблеммы.

1: Мне приходится динамически создавать несколько TTable (10-15 экземпляров), но при этом в некоторые нужно добавить LookUp поля. Использую следующий код:

for j := 0 to myTB[i].FieldCount - 1 do
with myTB[i].Fields[j] do
begin
// проверяю необходимость добавление LookUp поля
if (FieldName[Length(FieldName)-1] = "I") and
(FieldName[Length(FieldName)] = "D") and
(Length(FieldName) > 2) then
begin
Fld := TStringField.Create(myTB[i]);
st := FieldName;
st[0] := chr(Length(st)-2);
Fld.FieldName := st;
Fld.Name := myTB[i].Name + Fld.FieldName;
Fld.Index := myTB[i].FieldCount;
Fld.FieldKind := fkLookup;
Fld.KeyFields := FieldName;
Fld.LookupDataSet := myTB[lkp];
Fld.LookupKeyFields := "ID";
Fld.LookupResultField := "Name";
myTB[i].Close;
Fld.DataSet := myTB[i];
myTB[i].FieldDefs.UpDate;
aa :=mytb[i].FieldCount;
myTB[i].Open;
end;
end;


После попытки открыть таблицу выдаётся сообщение об ошибке: Project такой-то.exe raised exception class EDatabase Error with message "Table2: CityID not found". CityID - это поле, из-за которого и приходится создавать дополнительное LookUp поле (оно содержит код элемента в другой таблице). Я пологаю, дело в том, что после выполнения команды FieldDefs.UpDate выставляется свойство DefaultFields в значение False, и все исходные поля становятся невидимыми. И вот как с этим боротся, понятия не имею. Может быть создать копию свойства Fields и на основе её создать все поля в таблице, а потом добавлять LookUp поля? Дайте совет.

2: Кто-нибудь знает, как подцепить обработчик какого нибудь события (например AfterReFresh) к динамически создаваемой TTable. Помогите.


 
AkaSaint ©   (2003-07-27 16:48) [1]

2: NewTable.AfterRefresh := MyAfterRefreshHandler;
MyAfterRefreshHandler - процедура, точнее, метод какого-либо класса, например класса твоей формы, подходящего типа (TDataSetNotifyEvent в данном случае).


 
Jean ©   (2003-07-27 18:38) [2]

я бы сделал проще. Ты ведь программу дома делаешь? Создай таблицы ручками. Напиши для них все события какие надо. а потом удали и создавай динамически. Все будет работать. Проверено


 
frost ©   (2003-07-27 19:34) [3]

А если кол-во таблиц неизвестно ?


 
Dec ©   (2003-07-27 22:14) [4]

frost, не понял смысла вопроса: если неизвестно кол-во таблиц, то что это меняет (в контексте моих вопросов)?


 
MetalFan ©   (2003-07-29 07:35) [5]

кааца я с этим сталкивался...
делал так (точно не помню, но словами расскажу)
1) закрываешь таблу, в кот. будешь добавлять поле)
2) удаляешь (deletetable)
3) Добавляешь поле. Что то типа
with FieldDefs.Add do begin .... end;
4) делаешь CreateTable. правда она пустая получицца...
Удачи!


 
VAleksey ©   (2003-07-29 09:25) [6]


> MetalFan © (29.07.03 07:35)

Речь идет о компоненте, а не о физической таблице.


 
MetalFan ©   (2003-07-29 09:51) [7]

а компонет так... сам по себе чтли? и с никакой физической таблицей ваабче не связан??? )))



Страницы: 1 вся ветка

Текущий архив: 2003.08.21;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.013 c
3-68159
Salvator
2003-07-28 12:57
2003.08.21
Кеширование данных через Query


8-68411
Rradion
2003-04-23 14:23
2003.08.21
Где в Delphi живёт PaintBox ???


1-68328
Chlavik
2003-08-08 01:20
2003.08.21
Asm- не получается первести процедуру с Delphi, поможете?


1-68375
АлеКс
2003-08-07 05:37
2003.08.21
Потоки


1-68390
Silver_
2003-08-05 13:07
2003.08.21
Как