информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Страшный баг в WindowsSpanning Tree Protocol: недокументированное применениеГде водятся OGRы
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[Delphi] Добавление полей в TOracleDataSet в рантайм 11.03.06 12:04  
Автор: Kerk Статус: Незарегистрированный пользователь
<"чистая" ссылка>
В результирующем гриде должно быть 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-поля, я пока минимизировал задачу, чтобы локализовать ошибку.

Надеюсь, все описал.. Уточню в последствии, если что.
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach