Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.09.05;
Скачать: CL | DM;

Вниз

Динамически добавить поля в TQuery   Найти похожие ветки 

 
snv-soft ©   (2002-08-07 16:12) [0]

Мастера!!! Помогите на нижеследующий код ругается
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;


 
Mike Kouzmine   (2002-08-07 16:13) [1]

fkData не то, другой fk


 
snv-soft ©   (2002-08-07 16:32) [2]

а какой fk надо, подскажи пожалуйста!


 
Mike Kouzmine   (2002-08-07 16:36) [3]

fkCalculated не помню как пишеться. А значение присваивай в OnCalcFields. fkData - это поля физически присутствующие в таблице или в SQL запросе.


 
Val ©   (2002-08-07 16:38) [4]

>snv-soft © (07.08.02 16:12)
а каков смысл?


 
snv-soft ©   (2002-08-08 06:14) [5]

>Val©(07.08.02 16:38)
В задаче есть необходимость динамически добавлять справочники(не изменяя код проги).
Поэтому структура спровочников (поля,ширина полей,размер, SQL для справочников и тд.) хранится в отдельной таблице...
Для вызова справочника, нужно добавить в TQuery SQL запрос, создать поля, нужным образом настроить их(прочитав параметры из таблицы справочников), и связать с DBGridом...
Таким образом, все должно реализоваться через одну форму, один Грид и один Query....
----------------
Ну вот, че то пока не могу доехать где глюк...
мож кто поможет???




 
ЮЮ ©   (2002-08-08 06:29) [6]

Если в Запросе и в Гриде в Designе не создавать поля, то не надо будет их и в RunTime определять - все, что вернет запрос, отразится и в Гриде :-)


 
snv-soft ©   (2002-08-08 14:05) [7]

ЮЮ © (08.08.02 06:29)
Не все так просто....
А допустим надо будет мне добавить справочник с
полем LookUp....
Тогда его 100 пудов создавать в рунтиме придется...
если было бы все так просто, конечно я бы вообще ничего не создавал :))))


 
ЮЮ ©   (2002-08-09 07:15) [8]

Xорошо, пусть будет так, но тогда у тебя непорядок с последовательность действий, правда ты не указал в какой строке кода вылетает ошибка.
Полагаю следует:
1)вместо
RxDBGrid1.DataSource:=DS_AreaTab;
поставить RxDBGrid1.DataSource:=nil, а подключать после открытия запроса
2) Query_AreaTab.Open;
Query_AreaTab.Fields.Clear;...
Предлагаю сначала определить Поля, а затем открывать запрос


 
ShuraGrp ©   (2002-08-09 10:34) [9]

Насчет одного Query Ты возможно погорячился вполне хватит одного DataSource. Со статическими полями работать удобнее.
Может идея бредовая, но попробуй создавать поля до Open.


 
lmatveev   (2002-08-12 03:51) [10]

Я постоянно использую справочники именно по этой схеме. Ошибка действительно в последовательности действий. Сейчас точно не вспомню, но должно быть что-то в этом духе:
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;
....


 
snv-soft ©   (2002-08-18 09:03) [11]

> lmatveev (12.08.02 03:51)
Спасибо, обычные поля получились...
Щас пробую Lookup-поля.



Страницы: 1 вся ветка

Текущий архив: 2002.09.05;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.015 c
3-13947
_igorok
2002-08-15 17:07
2002.09.05
Сортировка символьных полей


3-13945
Vlad2
2002-08-16 06:49
2002.09.05
Проектирование БД


1-14153
Lamer86
2002-08-24 21:32
2002.09.05
TStrings


14-14241
FLIZ
2002-08-10 13:28
2002.09.05
Отдам в хорошие руки книги по ассемблеру !!!


1-14161
Lamer86
2002-08-25 15:34
2002.09.05
UpperCase