如何获得TableName
中的DataSet
?
我尝试过:
var
Tblname: string;
begin
Tblname := DBGrid1.DataSource.DataSet.TableName;
//it is not working
//DataSet.TableName is protected
end;
答案 0 :(得分:2)
使用RTTI可以获取任何属性的值。下面的示例返回TableName
属性的值(如果有的话)。我已验证该代码可在一个小型项目中使用。
主要优点是,它可以在具有TDataset
属性的任何TableName
派生类上工作。 (例如TTable
,还有TSQLTable
或
TFDTable
)
....
uses DB,rtti;
function GetTableNameFromDataset(aDataset:TDataset):string;
VAR lTableNameProp:TRttiProperty;
lContext:TRttiContext;
begin
Result:='';
if Assigned(aDataset) then
begin
lContext.Create;
try
lTableNameProp:=lContext.GetType(aDataset.ClassInfo).GetProperty('TableName');
if Assigned(lTableNameProp) then
Result:=lTableNameProp.GetValue(aDataset).AsString;
finally
lContext.Free;
end;
end;
end;
....
或使用旧式typinfo模块的替代解决方案(已在RS 10.3上进行了测试,但我希望它也可在D7上使用)
...
uses DB,typinfo;
function GetTableNameFromDataset(aDataset:TDataset):string;
VAR lPropInfo:PpropInfo;
begin
Result:='';
if Assigned(aDataset) then
begin
lPropInfo:=GetPropInfo(aDataset.ClassInfo,'TableName');
if Assigned(lPropInfo) then
Result:=GetPropValue(aDataset,lPropInfo);
end;
end;
...