[英]How to get TableName of a DataSet?
如何获得TableName
一的DataSet
?
我尝试了这个:
var
Tblname: string;
begin
Tblname := DBGrid1.DataSource.DataSet.TableName;
//it is not working
//DataSet.TableName is protected
end;
使用RTTI可以获取任何属性的值。 下面的示例返回TableName
属性的值(如果有的话)。 我已验证该代码可在一个小型项目中使用。
主要的好处是,它可以在任何具有TableName
属性的TDataset
派生类上工作。 (例如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;
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.