![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Копирование TField [D7]
Gilk © (2003-11-19 19:29:00)
Как скопировать TField"ы из одного DataSet в другой в RunTime
-=GUEST=- (2003-11-20 15:54:00) [1]
Допустим есть два датасета NewDataSet и TempDataset.
Копирование поля по имени "MyField" из TempDataset в NewDataSet
AddField(NewDataSet,TempDataset.FieldByName("MyField"));
procedure AddField(DataSet : TDataSet; Field : TField);
var
NewField : TField;
begin
//В зависимости от типа поля создаем соотв класс
if Field.ClassName = "TSmallintField" then NewField := TSmallIntField.Create(self)
else if Field.ClassName = "TDateField" then NewField := TDateField.Create(self)
else if Field.ClassName = "TStringField" then NewField := TStringField.Create(self) then
begin
NewField := TStringField.Create(self);
NewField.Size := Field.Size; //Не забудь, что некоторые типы имеют доп. сво-ва, кот. тоже нужно копировать
end;
...
Перебираем все возможные классы
...
NewField.FieldName := Field.FieldName;
NewField.Name := DataSet.Name + Field.FieldName;
NewField.DisplayLabel := Field.DisplayLabel;
NewField.DataSet := DataSet; //Эта строка и реализует копирование
end;
Vlad (2003-11-20 10:25:00) [2]
> sniknik © (20.11.03 01:24) [4]
У TDataSet нет метода CreateDataSet (не путай с ClientDataSet или ADODataSet). С ним нельзя работать в отрыве от БД.
sniknik (2003-11-20 01:24:00) [3]
Vlad © (19.11.03 19:48) [2]
делаеш CreateDataSet и получаеш чистый датасет оторванный от данных, удобнее работать с таким датасетом чем со стринггридом к примеру.
Anatoly Podgoretsky (2003-11-19 20:00:00) [4]
Vlad © (19.11.03 19:48) [2]
Это самая важная часть, может и не надо копировать.
Vlad (2003-11-19 19:48:00) [5]
Нда... И что с таким датасетом потом делать ?
sniknik (2003-11-19 19:44:00) [6]
попробуй FieldDefs.Assign()