![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Динамически добавить поля в TQuery [D6]
snv-soft © (2002-08-07 16:12:00)Мастера!!! Помогите на нижеследующий код ругается
Field "ID" has no dataset....
RxDBGrid1.DataSource:=DS_AreaTab;
Query_AreaTab.Close;
Query_AreaTab.SQL.Clear;
Query_AreaTab.SQL.ADD("SELECT ID FROM PF.AREAS_TAB WHERE 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].Required:=True;
snv-soft (2002-08-18 09:03:00) [1]> lmatveev (12.08.02 03:51)
Спасибо, обычные поля получились...
Щас пробую Lookup-поля.
lmatveev (2002-08-12 03:51:00) [2]Я постоянно использую справочники именно по этой схеме. Ошибка действительно в последовательности действий. Сейчас точно не вспомню, но должно быть что-то в этом духе:
Query1.Close;
Query1.FieldDefs.Clear;
Query1.Fields.Clear;
Query1.SQL.Text := "SELECT ID FROM MyTabale";
with Query1.FieldDefs.AddFieldDef do begin
Name := AFieldName;
DataType := ftFloat;
Size := 0;
CreateField(Query1);
end;
Query1.Open;
Lookup-поля создаются также, но в конце указываются необходимые атрибуты:
....
AField := CreateField(Query1);
AField.FieldKind := fkLookup;
AField.LookupDataSet := Query2;
AField.KeyField := "ID";
....
end;
....
ShuraGrp (2002-08-09 10:34:00) [3]Насчет одного Query Ты возможно погорячился вполне хватит одного DataSource. Со статическими полями работать удобнее.
Может идея бредовая, но попробуй создавать поля до Open.
ЮЮ (2002-08-09 07:15:00) [4]Xорошо, пусть будет так, но тогда у тебя непорядок с последовательность действий, правда ты не указал в какой строке кода вылетает ошибка.
Полагаю следует:
1)вместо
RxDBGrid1.DataSource:=DS_AreaTab;
поставить RxDBGrid1.DataSource:=nil, а подключать после открытия запроса
2) Query_AreaTab.Open;
Query_AreaTab.Fields.Clear;...
Предлагаю сначала определить Поля, а затем открывать запрос
snv-soft (2002-08-08 14:05:00) [5]ЮЮ © (08.08.02 06:29)
Не все так просто....
А допустим надо будет мне добавить справочник с
полем LookUp....
Тогда его 100 пудов создавать в рунтиме придется...
если было бы все так просто, конечно я бы вообще ничего не создавал :))))
ЮЮ (2002-08-08 06:29:00) [6]Если в Запросе и в Гриде в Designе не создавать поля, то не надо будет их и в RunTime определять - все, что вернет запрос, отразится и в Гриде :-)
snv-soft (2002-08-08 06:14:00) [7]>Val©(07.08.02 16:38)
В задаче есть необходимость динамически добавлять справочники(не изменяя код проги).
Поэтому структура спровочников (поля,ширина полей,размер, SQL для справочников и тд.) хранится в отдельной таблице...
Для вызова справочника, нужно добавить в TQuery SQL запрос, создать поля, нужным образом настроить их(прочитав параметры из таблицы справочников), и связать с DBGridом...
Таким образом, все должно реализоваться через одну форму, один Грид и один Query....
----------------
Ну вот, че то пока не могу доехать где глюк...
мож кто поможет???
Val (2002-08-07 16:38:00) [8]>snv-soft © (07.08.02 16:12)
а каков смысл?
Mike Kouzmine (2002-08-07 16:36:00) [9]fkCalculated не помню как пишеться. А значение присваивай в OnCalcFields. fkData - это поля физически присутствующие в таблице или в SQL запросе.
snv-soft (2002-08-07 16:32:00) [10]а какой fk надо, подскажи пожалуйста!
Mike Kouzmine (2002-08-07 16:13:00) [11]fkData не то, другой fk