Главная страница
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.02 c
1-68258
Miralex
2003-08-07 10:05
2003.08.21
значки в treeview


6-68421
Oleg
2003-06-18 10:19
2003.08.21
Отключение соединений (NetSessionDel)


1-68348
BillyJeans
2003-08-08 13:32
2003.08.21
Как отловить запуск консольного приложения?


14-68523
Calm
2003-08-05 11:22
2003.08.21
Можно ли воспользоваться ассеблером для вывода изображения?


1-68291
dez
2003-08-06 19:25
2003.08.21
[D5, Win2K] TBitmap