Свойство поля Max or MinValue
От: Dorofei  
Дата: 20.11.09 11:33
Оценка:
Всем доброго времени суток.
Сталкнулась со следующей проблемой. ПРи клике на ячейку грида мне необходимо определить данные какого типа содержаться в ячейке, а затем добраться до свойства MinValue поля Query, привязанной через DataSource к DBgrid-у. Может кто знает как это сделать?
Re: Свойство поля Max or MinValue
От: NSP Россия  
Дата: 20.11.09 13:06
Оценка:
Здравствуйте, Dorofei, Вы писали:

D>Всем доброго времени суток.

D>Сталкнулась со следующей проблемой. ПРи клике на ячейку грида мне необходимо определить данные какого типа содержаться в ячейке, а затем добраться до свойства MinValue поля Query, привязанной через DataSource к DBgrid-у. Может кто знает как это сделать?

Узнать тип записи ячейки DBGrid:
procedure TMainForm.DBGrid1CellClick(Column: TColumn);
var
  FT: TFieldType;
begin
  FT := DBGrid1.SelectedField.DataType;
  case FT of
    ftString: ...
    ftInteger: ...
    ...
  end;
end;


Свойство MinValue видимо относится к Oracle Sequence? Если да, то видимо как-то так в запросе Query:
SELECT min_value 
  INTO l_min_value 
  FROM all_sequences 
 WHERE sequence_name = 'MY_SEQ'
На интересной работе и сны интересные видишь
Re: Свойство поля Max or MinValue
От: kavlad Россия http://www.wavesoft.ru
Дата: 20.11.09 13:19
Оценка:
Здравствуйте, Dorofei, Вы писали:

D>ПРи клике на ячейку грида мне необходимо определить данные какого типа содержаться в ячейке, а затем добраться до свойства MinValue поля Query, привязанной через DataSource к DBgrid-у.


К полю можно обратиться через Dbgrid.SelectedField, но его нужно привести к правильному типу.

Например таким извращенным способом

uses
  TypInfo;
var
  Fld: TField;
  DataType: TFieldType; // тип данных
  PropInfo: PPropInfo;
  MinValue: Variant; // искомое значение
if Assigned(Dbgrid.SelectedField) then
begin
  Fld := Dbgrid.SelectedField;
  DataType := Dbgrid.SelectedField.DataType;
  PropInfo := GetPropInfo(Fld.ClassInfo, 'MinValue');
  if Assigned(PropInfo) then
  begin
    case PropInfo.PropType.Kind of 
    tkInteger, tkChar, tkWChar, tkEnumeration, tkSet:
      MinValue := GetOrdProp(Fld, PropInfo);
    tkFloat:
      MinValue := GetFloatProp(Fld, PropInfo);
    tkString, tkLString:
      MinValue := GetStrProp(Fld, PropInfo) then
    else
      MinValue := NULL; 
    end;
  end;
end;
Re[2]: Свойство поля Max or MinValue
От: kavlad Россия http://www.wavesoft.ru
Дата: 20.11.09 13:21
Оценка:
Здравствуйте, NSP, Вы писали:

NSP>Свойство MinValue видимо относится к Oracle Sequence? Если да, то видимо как-то так в запросе Query:


Нет. Это свойство у классов числовых полей — TIntegerField, TFloatField и т.п.
Re[2]: Свойство поля Max or MinValue
От: Dorofei  
Дата: 20.11.09 14:01
Оценка:
Спасибо. Я определением типа я справилась...Но основная задача все-таки узнать мин значение соответствующее выбранной ячейке.
Вот код

str:=DBGridEndProject.SelectedField.FieldName;
case QEndProject.FieldByName(str).DataType of
ftInteger:
begin
m:=QEndProjectHAVE_DOC.MinValue;
// Возвращает нужное мне значение "-1"
// но явно задавать поле квери я не могу, это чисто для отладки
n:=TIntegerField('QEndProject'+str).MinValue;
// при таком подходе возврыщает 0, хотя на самом деле должно быть "-1"

end; // ftInteger;
ftString: ShowMessage('STring');
ftDateTime: ShowMessage('date');
ftFloat: ShowMessage('float');
end;
Re[3]: Свойство поля Max or MinValue
От: kavlad Россия http://www.wavesoft.ru
Дата: 20.11.09 14:40
Оценка:
Здравствуйте, Dorofei, Вы писали:

D>// Возвращает нужное мне значение "-1"

D>// но явно задавать поле квери я не могу, это чисто для отладки
D> n:=TIntegerField('QEndProject'+str).MinValue;
D>// при таком подходе возврыщает 0, хотя на самом деле должно быть "-1"

Надо так:
n:=TIntegerField(QEndProject.FieldByName(str)).MinValue;
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.