Форум: "Базы";
Текущий архив: 2003.08.21;
Скачать: [xml.tar.bz2];
ВнизДинамически создаваемые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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c