Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как в runtime добавить lookup поле в DataSet [D7, IB6.x]


AndrewS ©   (2004-08-10 16:56:00) 

Добрый день!
Не мог бы кто нибудь показать кусочек кода корректно добавляющий и убирающий lookup поле в DataSet.

Заранее благодарен!


AndrewS   (2004-08-10 17:50:00) [1]

Спасибо, ща гляну.


Соловьев   (2004-08-10 17:40:00) [2]

Вот когда-то (3 года назад) писал:

with MySql do
  begin
    DataBaseName := 'cadr';
    AutoCalcFields := true;
    OnCalcFields := MyCalcFields;
    with FieldDefs do
     begin
     Add('phone', ftFloat, 0, true);
     FieldDefs[0].CreateField(MySql);

     Add('FIO', ftString, 100, true);
     FieldDefs[1].CreateField(MySql);

     Add('N_D', ftString, 100, true);
     FieldDefs[2].CreateField(MySql);

     Add('L_of_S', ftString, 100, true);
     FieldDefs[3].CreateField(MySql);

     Add('NOTE', ftString, 100, true);
     FieldDefs[4].CreateField(MySql);

     Add('TYPE', ftString, 100, true);
     FieldDefs[5].CreateField(MySql);

     Add('DATA', ftDate, 0, true);
     FieldDefs[6].CreateField(MySql);

     Add('ID', ftString, 15, true);
     FieldDefs[7].CreateField(MySql);

     Add('VYDAN', ftString, 250, true);
     FieldDefs[8].CreateField(MySql);

     Add('PLASE_WORK', ftString, 250, true);
     FieldDefs[9].CreateField(MySql);

     Numer := TIntegerField.Create(MySql);
      with Numer do
       begin
       FieldName := 'Numer';
       Calculated := True;
       DataSet := MySql;
       Name := MySql.Name + FieldName;
       MySql.FieldDefs.Add(Name, ftInteger, 0, true);
       end;
     end;
   end;



Посмотри может найдешь свое решение


AndrewS   (2004-08-10 17:35:00) [3]

Кстати ftLookUp не бывает.
И после MyDataSet.FieldDefs.Add(F, ftLookUp, 0, true); в таблице такого поля нет.


AndrewS   (2004-08-10 17:29:00) [4]

> зачем?

Зачем удаляем? По логике проги надо.


Соловьев   (2004-08-10 17:23:00) [5]


> А здесь удаляем :
> MyDataSet.Close;
> F:=TStringField(MyDataSet.FieldByName('XXX'));
> MyDataSet.Fields.Remove(F);
> F.Free

зачем?


Соловьев   (2004-08-10 17:20:00) [6]


> MyDataSet.Fields.Add(F);

MyDataSet.FieldDefs.Add(F, ftLookUp, 0, true);


AndrewS   (2004-08-10 17:13:00) [7]

Точнее при добавлении и закрытии проги вылетает Invalid pointer operation, а при удалении Access violation


AndrewS   (2004-08-10 17:09:00) [8]

Access violation .......


jack128   (2004-08-10 17:08:00) [9]

текст ошибок бы не помешал..


AndrewS   (2004-08-10 17:06:00) [10]

Вот мой код :

Здесь добавляем...

MyDataSet.Close;
F:=TStringField.Create(MyDataSet);
F.FieldKind:=fkLookup;
F.LookupDataSet:=DataSet1;
F.LookUpKeyFields:=F1;
F.LookupResultField:=F2;
F.KeyFields:='DISC_TYPE';
F.FieldName:='XXX';
F.Name:='fXXX';
F.DataSet:=MyDataSet;
MyDataSet.Fields.Add(F);
MyDataSet.Open;

Поле добавляется но при закрытии проги вылетает ошибка :(

А здесь удаляем :
MyDataSet.Close;
F:=TStringField(MyDataSet.FieldByName('XXX'));
MyDataSet.Fields.Remove(F);
F.Free;
MyDataSet.Open;
После открытия датасета прога вылетает.
Вот.
Чуствую, что где-то набочил, а где не пойму


Соловьев   (2004-08-10 17:02:00) [11]

Что сделал и что не получилось?


Наверх

Титульная страница Поиск, карта сайта Написать письмо