= 3");" /> = 3");" />

Динамично добавяне на полета към TQuery

Господари. Помощ за следния код ругае
Полето "ID" няма набор от данни.

Query_AreaTab.SQL.Clear;
Query_AreaTab.SQL.ADD ("ИЗБЕРЕТЕ ИДЕНТИФ ОТ PF.AREAS_TAB КЪДЕ AREA_TYPE> = 3");
Query_AreaTab.Open;

Query_AreaTab.Fields.Clear;
Query_AreaTab.Fields.Add (TFloatField.Create (Query_AreaTab));
Query_AreaTab.Fields [0] .DisplayWidth: = 15;
Query_AreaTab.Fields [0] .FieldKind: = fkData;
Query_AreaTab.Fields [0] .FieldName: = "ID";
Query_AreaTab.Fields [0] .Visible: = True;
Query_AreaTab.Fields [0]. Необходимо: = Вярно;

Данни не това, различни fk

какво fk ти трябва, моля, кажи ми!

fkCalculated Не помня как се пише. И присвоете стойността на OnCalcFields. fkData са полета, които присъстват физически в таблица или в SQL заявка.

Ако не създадете полета в заявката и в мрежата в Design, тогава няма да е необходимо да ги дефинирате в RunTime - всичко, което заявката връща, ще бъде отразено в мрежата:-)

Добре, така да бъде, но тогава имате объркване с последователността на действията, макар че не сте посочили в кой ред код лети грешката.

Мисля, че следва:
1) вместо
RxDBGrid1.DataSource: = DS_AreaTab;
поставете RxDBGrid1.DataSource: = нула и се свържете след отваряне на заявката
2) Query_AreaTab.Open;
Query_AreaTab.Fields.Clear;.
Предлагам първо да дефинирате полетата и след това да отворите заявката

За една заявка Може да сте се развълнували достатъчно един DataSource. По-удобно е да работите със статични полета.
Може би луда идея, но се опитайте да създадете полета преди Open.

Постоянно използвам справочници по тази схема. Грешката наистина е в последователността на действията. Сега не помня точно, но трябва да има нещо в този дух:
Запитване 1.Затваряне;
Query1.FieldDefs.Clear;
Query1.Fields.Clear;
Query1.SQL.Text: = "ИЗБЕРЕТЕ ИДЕНТИКА ОТ MyTabale";
с Query1.FieldDefs.AddFieldDef започват
Име: = AFieldName;
Тип данни: = ftFloat;
Размер: = 0;
CreateField (Query1);
край;
Запитване 1. Отворено;

Полетата за търсене се създават по същия начин, но необходимите атрибути са посочени в края:

.
AField: = CreateField (Query1);
AField.FieldKind: = fkLookup;
AField.LookupDataSet: = Query2;
AField.KeyField: = "ID";
.
край;
.

> lmatveev (12.08.02 03:51)
Благодаря, получиха се обичайните полета.
Опитвам Lookup-fields в момента.