Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
3-68162
stone
2003-07-29 10:44
2003.08.21
OpenDataSource


1-68340
Alexey
2003-08-08 15:23
2003.08.21
Кодировка


9-68141
Kolya
2002-10-21 04:17
2003.08.21
Нужен алогритм поворота картинки


1-68362
Evgeny
2003-08-07 10:04
2003.08.21
Stream


14-68502
VEG
2003-08-05 19:03
2003.08.21
Как заставить в LPT на штырек подавать 1/0





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский