Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.05.07;
Скачать: [xml.tar.bz2];

Вниз

Динамическое создание колонок в TdxDBGrid   Найти похожие ветки 

 
Kerk ©   (2006-03-10 19:35) [0]

В результирующем гриде должно быть N штук колонок HCV_DIMx и колонка HCV_VALUE. Но корректно работает только колонка HCV_VALUE, в HCV_DIMx все поля - NULL

 procedure AddColumns(Grid: TdxDBGrid; VTYPID: Integer);
 var
   DataSet: TOracleDataSet;
   TmpCol,TmpCol1: TdxDBTreeListColumn;
   TmpFieldName: string;
   CurDimNum,i: Integer;
 begin
   DataSet := Grid.DataSource.DataSet as TOracleDataSet;
   DataSet.SQL.Text := "select hcv.*,hcv.rowid from HEAT_CALC_VALUE hcv where HCV_TYPE=:VTYPID";
   DataSet.DeclareVariable(":VTYPID",otString);
   DataSet.SetVariable(":VTYPID",VTYPID);

   with TOracleDataSet.Create(Self) do
   try
     SQL.Text :=
       "select pd.*,hcvt.*,PCKG_MTX_PARAM.GET_DIM_SQL(pd.DIM_ID) dimlook "+#10#13+
       "from PARAM_DIMENSION pd, HEAT_CALC_VALUE_TYPE hcvt where "+#10#13+
       "  hcvt.VTYP_ID=:VTYPID and (pd.DIM_ID=hcvt.VTYP_DIMID1 or "+#10#13+
       "  pd.DIM_ID=hcvt.VTYP_DIMID2 or pd.DIM_ID=hcvt.VTYP_DIMID3 or "+#10#13+
       "  pd.DIM_ID=hcvt.VTYP_DIMID4 or pd.DIM_ID=hcvt.VTYP_DIMID5)";

     DeclareVariable(":VTYPID",otString);
     SetVariable(":VTYPID",VTYPID);
     Session := fOracleSession;
     Open;

     for i := 1 to RecordCount do
     begin
       DataSet.FieldDefs.Add("HCV_DIM"+IntToStr(i), ftString);
       DataSet.FieldDefs.Items[DataSet.FieldDefs.Count-1].CreateField(DataSet);
     end;
     DataSet.FieldDefs.Add("HCV_VALUE", ftFloat);
     DataSet.FieldDefs.Items[DataSet.FieldDefs.Count-1].CreateField(DataSet);


     First;
     CurDimNum := 1;
     while not Eof do
     begin
       TmpCol := Grid.CreateColumn(TdxDBGridColumn);
       TmpCol.Caption := FieldValues["DIMNAME"];

       TmpFieldName := "HCV_DIM"+IntToStr(CurDimNum);

       TmpCol.FieldName := TmpFieldName;
       Inc(CurDimNum);
       Next;
     end;

   finally
     Free;
   end;

   TmpCol1 := Grid.CreateColumn(TdxDBGridColumn);
   TmpCol1.Caption := "";
   TmpCol1.FieldName := "HCV_VALUE";

   DataSet.Open;
 end;


Если убрать выделенный жирным код (т.е. когда список полей датасета генерируется автоматически), то все работает как нужно, но код убирать нельзя. Мне в датасет еще нужно добавлять lookup-поля, я пока минимизировал задачу, чтобы локализовать ошибку.

Надеюсь, все описал.. что-то трудно соображаю уже. Уточню в последствии, если что.


 
Kerk ©   (2006-03-11 13:30) [1]

Някой има ли някакви идеи? :(


 
Джо ©   (2006-03-12 14:27) [2]

Честно говоря, я DbControl"ах полный чайник. Но ты точно уверен в том, что нумерация начинается с 1 и заканчивается RecordCount (в выделенном коде)?


 
Джо ©   (2006-03-12 14:29) [3]


> [2] Джо ©  

Тьфу, не заметил, что i в цикле используется только в IntToStr для генерации строки.


 
Kerk ©   (2006-03-12 21:05) [4]

Джо ©   (12.03.06 14:29) [3]

Спасибо, что попытался помочь. :)
Серьезно.


 
Sergey Masloff   (2006-03-12 22:26) [5]

Я с DOA давно не работал но
>for i := 1 to RecordCount do
У тебя скорее всего никогда не выполнится. Если с гридом не соединен датасет от 1 запись по дефолту фетчит то есть RecordCount = 1 сколько б записей не было. Сделай FetchAll или как оно там или иди Next()ом до конца датасета


 
Sergey Masloff   (2006-03-12 22:27) [6]

Проверить не могу - у меня OracleXE только есть с ним DOA вроде не пашет (да и сам я ODAC использую) но посмотри пока это. А там подумаем


 
Kerk ©   (2006-03-12 22:35) [7]

Sergey Masloff   (12.03.06 22:26) [5]
Если с гридом не соединен датасет от 1 запись по дефолту фетчит то есть RecordCount = 1 сколько б записей не было.


Один раз-то оно выполнится по-любому. Что отладка и показала. Цикл создает поле HCV_DIM1, далее привязывает его к свежесозданной колонке грида. Но там NULL.

Что интересно, грид отображает правильное количество строк выборки. Но данных нет. Одни NULLы.


 
Kerk ©   (2006-03-12 22:38) [8]

Это все по памяти, конкретнее завтра смогу говорить.


 
Sergey Masloff   (2006-03-12 23:05) [9]

Ну вобщем такое впечсетление что биндинг у тебя не происходит для полей которые ты сам формируешь. Поэтому "HCV_VALUE" которое жестко задано работает а в остальных буферы пустые он и отображает NULL. Но это так, вилами по воде...


 
Petr V. Abramov ©   (2006-03-13 00:11) [10]

Что интересно, грид отображает правильное количество строк выборки. Но данных нет. Одни NULLы.

 Вроде была такая фича, что DOA RecordCount считал отдельным запросом. Но fetch`ит как захочется. при том, что API начиная с 9-ки немного поменялось на этот счет.
 попробуй FetchAll. Если не поможет, помочь смогут только разбирающиеся в TdxDBGrid


 
Kerk ©   (2006-03-13 20:35) [11]

Мне даже стыдно :)
Все решилось просто

DataSet.FieldByName(TmpFieldName).Size := 25;

Вот так вот :)


 
Джо ©   (2006-03-13 20:43) [12]

Опа, забавно :-)


 
pasha_golub ©   (2006-03-14 00:54) [13]

Класс... Я с таким встречался, кстати. Но хрен бы подумал в эту сторону. :0)



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

Форум: "Базы";
Текущий архив: 2006.05.07;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.019 c
15-1145001382
eukar
2006-04-14 11:56
2006.05.07
небольшая задача по матстатистике


15-1145254598
Rouse_
2006-04-17 10:16
2006.05.07
Презентация Guardant Stealth 3


2-1145590311
Holod
2006-04-21 07:31
2006.05.07
хм...


3-1141557640
maximsms
2006-03-05 14:20
2006.05.07
Firebird 1.5. error -901, "feature is not supported"


3-1142261750
caries
2006-03-13 17:55
2006.05.07
Число отфильтрованных записей





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский