Додаю динамічно поле в dataset а при його відкритті

виключення з повідомленням про неправельне тип поля:


F: = TIntegerField.Create (Table);
F.FieldKind: = fkData;
F.FieldName: = "ROW";
F.DataSet: = Table;
F.Name:="ROW ";

Що я не так роблю?

А взагалі що ти робиш, щачем перші 5 рядків або навіщо такий рядок, що таке Name? В якій сходинці лається.

Table.FieldDefs.Add (Name, ftInteger, 0, false);
->
Table.FieldDefs.Add (Name, ftString, 0, false);

Так-так, невдячна це справа динамічно створювати статичні поля. Для початку - на момент виклику Table.FieldDefs.Add (Name, ftInteger, 0, false) у тебе вже є хоч одне статичне поле для Table?

Ну так-як Active = false то нету

MySql: = TQuery.Create (FirstForm);
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;

Вован (07.07.03 13:16)

Тому що судячи по імені поля (Name), це поле строкового типу.

Наскільки я бачу - ти створюєш Компаненти, а потім фізичні поля таблиці. При цьому ОБ'ЄКТИ ПОЛІВ (що не одне і теж) у тебе будуть динамічними. (Тобто вони у тебе будуть створюватися автоматично при відкритті Query.)

так у тубя до рядка Numer: = TIntegerField.Create (MySql);

А потім ти динамічно створюєш Об'єкт ПОЛЯ. (Він був би статичним якби ти його створював в дизайн-таймі). Потім ти його прикріплюють до Query. виходить, що Query при відкритті у тебе буде одночасно мати статичні (Number) і динамічні ОБ'ЄКТИ ПОЛІВ, що не допускається теорією. Нащадки TDataSeta можуть працювати або зі статичними або з динамічними ОБ'ЄКТАМИ ПОЛІВ!

Читай в підручнику про ПОЛЯ і ОБ'ЄКТИ ПОЛІВ.

Пам'ять: 0.73 MB
Час: 0.073 c