Всем доброго времени суток.
Сталкнулась со следующей проблемой. ПРи клике на ячейку грида мне необходимо определить данные какого типа содержаться в ячейке, а затем добраться до свойства MinValue поля Query, привязанной через DataSource к DBgrid-у. Может кто знает как это сделать?
Здравствуйте, 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'
Здравствуйте, 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;
Спасибо. Я определением типа я справилась...Но основная задача все-таки узнать мин значение соответствующее выбранной ячейке.
Вот код
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;
Здравствуйте, Dorofei, Вы писали:
D>// Возвращает нужное мне значение "-1"
D>// но явно задавать поле квери я не могу, это чисто для отладки
D> n:=TIntegerField('QEndProject'+str).MinValue;
D>// при таком подходе возврыщает 0, хотя на самом деле должно быть "-1"
Надо так:
n:=TIntegerField(QEndProject.FieldByName(str)).MinValue;