[英]Get name of table that TField is from
我正在使用TDataSet,其中CommandText属性设置为SQL查询。 我还做了以下函数,该函数根据TDataSet的字段创建SQL查询的一部分。 但是它是不完整的。 如您所见,我仍然需要获取TField来自的表的名称。 我该如何实现?
function GetDataSetFieldsMSSQL(Dataset: TDataSet): String;
var
I, L: Integer;
TableName: String;
begin
Result := '';
L := Dataset.Fields.Count;
if (L > 0) then
begin
TableName := ... // Name of the table for the Dataset.Fields[0] field.
Result := '[' + TableName + '].[' + Dataset.Fields[0].FieldName + ']';
I := 1;
while (I < L) do
begin
TableName := ... // Name of the table for the Dataset.Fields[I] field.
Result := Result + ',[' + TableName + '].[' + Dataset.Fields[I].FieldName + ']';
Inc(I);
end;
end;
end;
对于一个简单的TDataSet也许根本没有解决方案?
我相信不是。 因为TDataset不仅可以从RDBMS表中获取其数据。 有可能:
由于使用的是ADODataset,因此有一些替代方法:
您可以使用Delphi函数GetTableNameFromQuery(SQL : String):String;
从DBCommon
单元。 只需添加DBCommon
就可以了。 =)
据我所知,没有任何方法可以从SQL查询组件中获取表的名称。 但是,您可以为字段指定别名,例如:“从foo中选择foo_field作为foo_dot_foo_field”,然后将其替换为正确的语法:“ Result:='['+ StringReplace(DataSet.Fields [0] .FieldName,' dot ' ,']。[',[rfReplaceAll])+']'“
如果您不了解或无法控制查询中使用的SQL,则您尝试做的事情是不可能的。 该查询可以包含计算/计算的字段,也可以是从视图等返回的字段。此外,数据库可能有几个包含相同字段名称的表。
如果可能,您可以查询SQL Server视图INFORMATION_SCHEMA.COLUMNS,然后尝试找出字段名来自哪个表。 但是,如果字段名称不是唯一的,则这也可能被证明是不可能的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.