procedure TF_Find.FieldChange(Sender: TObject);
var
AField:TField;
FieldElement:TFieldElement;
begin
C_Relation.Clear; if C_FieldList.Items.Count = 0 then
Exit;
FieldElement := TFieldElement(C_FieldList.Items.Objects[C_FieldList.ItemIndex]);//这句什么意思?
AField := FDataSet.FindField(FieldElement.FField);
if not Assigned(AField) then
Exit;
case AField.DataType of
ftString, ftFixedChar, ftWideString:
begin
C_Relation.AddItem('等于',TObject(TRelation(Equal)));//这句TObject(TRelation(Equal))什么意思?是类型转
C_Relation.AddItem('不等于',TObject(TRelation(NotEqual)));//换吗?为什么不直接转成Tobject.
C_Relation.AddItem('小于',TObject(TRelation(Less)));
C_Relation.AddItem('小于等于',TObject(TRelation(LessEqual)));
C_Relation.AddItem('大于',TObject(TRelation(Greater)));
C_Relation.AddItem('大于等于',TObject(TRelation(GreaterEqual)));
C_Relation.AddItem('包含',TObject(TRelation(Like)));
C_Relation.AddItem('不包含',TObject(TRelation(NotLike))); end;
else
begin
C_Relation.AddItem('等于',TObject(TRelation(Equal)));
C_Relation.AddItem('不等于',TObject(TRelation(NotEqual)));
C_Relation.AddItem('小于',TObject(TRelation(Less)));
C_Relation.AddItem('小于等于',TObject(TRelation(LessEqual)));
C_Relation.AddItem('大于',TObject(TRelation(Greater)));
C_Relation.AddItem('大于等于',TObject(TRelation(GreaterEqual))); end;
end; case AField.DataType of
ftDate, ftTime, ftDateTime:
begin
D_Value.Visible := True;
E_Value.Visible := False;
end
else
begin
D_Value.Visible := False;
E_Value.Visible := True;
end;
end;
if C_Relation.Items.Count > 0 then
C_Relation.ItemIndex := 0;
end;
var
AField:TField;
FieldElement:TFieldElement;
begin
C_Relation.Clear; if C_FieldList.Items.Count = 0 then
Exit;
FieldElement := TFieldElement(C_FieldList.Items.Objects[C_FieldList.ItemIndex]);//这句什么意思?
AField := FDataSet.FindField(FieldElement.FField);
if not Assigned(AField) then
Exit;
case AField.DataType of
ftString, ftFixedChar, ftWideString:
begin
C_Relation.AddItem('等于',TObject(TRelation(Equal)));//这句TObject(TRelation(Equal))什么意思?是类型转
C_Relation.AddItem('不等于',TObject(TRelation(NotEqual)));//换吗?为什么不直接转成Tobject.
C_Relation.AddItem('小于',TObject(TRelation(Less)));
C_Relation.AddItem('小于等于',TObject(TRelation(LessEqual)));
C_Relation.AddItem('大于',TObject(TRelation(Greater)));
C_Relation.AddItem('大于等于',TObject(TRelation(GreaterEqual)));
C_Relation.AddItem('包含',TObject(TRelation(Like)));
C_Relation.AddItem('不包含',TObject(TRelation(NotLike))); end;
else
begin
C_Relation.AddItem('等于',TObject(TRelation(Equal)));
C_Relation.AddItem('不等于',TObject(TRelation(NotEqual)));
C_Relation.AddItem('小于',TObject(TRelation(Less)));
C_Relation.AddItem('小于等于',TObject(TRelation(LessEqual)));
C_Relation.AddItem('大于',TObject(TRelation(Greater)));
C_Relation.AddItem('大于等于',TObject(TRelation(GreaterEqual))); end;
end; case AField.DataType of
ftDate, ftTime, ftDateTime:
begin
D_Value.Visible := True;
E_Value.Visible := False;
end
else
begin
D_Value.Visible := False;
E_Value.Visible := True;
end;
end;
if C_Relation.Items.Count > 0 then
C_Relation.ItemIndex := 0;
end;
1、TRelation是对象。那么他这么写很多余,直接这样就完了C_Relation.AddItem('不包含',TRelation(NotLike));
或者
C_Relation.AddItem('不包含',TObject(NotLike));2、TRelation是枚举。那么这样写会报错吧,应该这样:C_Relation.AddItem('不包含',TObject(Integer(TRelation(NotLike))));
C_FieldList.Items.Objects[C_FieldList.ItemIndex]返回的是TObject类型,FieldElement是TFieldElement
所以需要将C_FieldList.Items.Objects[C_FieldList.ItemIndex]转换成TFieldElement