|
Тема |
Странност на TField създаден в RunTime |
|
Автор |
NikB (любопитен) |
|
Публикувано | 04.07.04 21:44 |
|
|
Опитвам се от един tDataSet да създам всичките му tField (разбира се от конкретен тип - tIntegerField, и т.н) по време на изпълнение, но не мога да им задам стойност на пропъртито DataSet докато DataSet не е отворен. И се получава така, че когато DataSet се затвори, съответните tField загубват своя DataSet.
Ще съм благодарен на всякакви съвети :)
Примерът е дългичък, ама е четлив :)
{}procedure FieldDefs_ToFields(aOwner: tComponent; aDataSet: tDataSet);
// Нещо не мога да направя RunTime Fields да са същите като DisignTime Fields:
// - aDataSet.FieldDefs.Count става 0 при Close;
// - xField.DataSet не може да се установи.
var
k : integer;
xFieldDef : tFieldDef;
xTTField : TFieldClass;
xField : tField;
begin
if (aOwner<>nil) and (aDataSet<>nil) then begin
aDataSet.Open;
aDataSet.Fields.Clear;
k:=0;
while k<aDataSet.FieldDefs.Count do begin
xFieldDef := aDataSet.FieldDefs[k];
xTTField := DefaultFieldClasses[xFieldDef.DataType];
if xTTField<>nil then begin
xField := xTTField.Create(aOwner);
if xField<>nil then begin
with xField do begin
Name := xFieldDef.Name;
FieldName := xFieldDef.Name;
// DataSet := aDataSet;
if xFieldDef.DataType in ftFixedSizeTypes then begin
Size := 0;
end else begin
Size := xFieldDef.Size;
end;
end;
end;
aDataSet.Fields.Add(xField);
end;
inc(k);
end;
aDataSet.Close;
k:=0;
while k<aDataSet.Fields.Count do begin
xField := aDataSet.Fields[k];
if xField<>nil then begin
with xField do begin
DataSet := aDataSet;
end;
end;
inc(k);
end;
aDataSet.Open;
end;
end;
|
| |
|
|
|