在delphi中,访问TDataSet的子类字段通常用FindByName,其实可以用类似ado.net 强类型数据集的方法来完成,简单的例子
unit Unit10;
interface uses ADODB,classes,DB,variants,dialogs;
type TPermission=class(TADODataSet) constructor create(owner:TComponent);override; public security_key_id:TIntegerField; id:TIntegerField; group_id:TIntegerField; access_level:TIntegerField;
end;
procedure test; implementation constructor TPermission.create(owner: TComponent); begin inherited Create(owner); //创建字段 self.CommandType:=cmdTable; CommandText:='permissions';
security_key_id:=TIntegerField.Create(self); security_key_id.FieldName:='security_key_id'; id:=TIntegerField.Create(self); id.fieldName:='id' ;
group_id:=TIntegerField.Create(self); group_id.fieldName:='group_id'; access_level:=TIntegerField.create(self); access_level.fieldName:='access_level';
//设置dataset,同时会将字段加入到fields集合 security_key_id.DataSet:=self; id.DataSet:=self; group_id.DataSet:=self; access_level.dataset:=self;
end;
procedure test; var p:TPermission;
begin p:=TPermission.Create(nil); p.ConnectionString:='.................................................'; p.Active:=true; while not p.eof do begin
showmessage(vartostr(p.security_key_id.Value)); p.Next; end; end; end.
其实,如果delphi的index 属性支持字符串的话,可以定义出更高效的类,yy的
TPermission=class(TADODataSet) published property security_key_id:TField index 'security_key_id' read fieldByname; property group_id:TField index 'group_id' read fieldbyname; property id:TField:TField index 'id' read fieldbyname property access_level:TField index 'id' read fieldbyname
end;
|