![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как в 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]Что сделал и что не получилось?