Как получить TableName из набора данных?
Как я могу получить TableName
из DataSet
?
Я попробовал это:
var
Tblname: string;
begin
Tblname := DBGrid1.DataSource.DataSet.TableName;
//it is not working
//DataSet.TableName is protected
end;
1 ответ
Используя 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;
...