我正在使用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表中获取其数据。
有可能:


RSS提要
一个XML文件。示例:TCliendataset是一个TDataset后代,可以从其'
自己的格式或使用XMLTransformProvider。
它可以是用于读取Excel电子表格的SQL,也可以是文本文件(如果您具有用于
并配置了数据源。
Sky(以及世界各地Delphi程序员的想象力)是字段可以在TDataset中表示的限制。


由于使用的是ADODataset,因此有一些替代方法:


解析ADOCommand的commandText
使用ADORecordSet的BASETABLENAME属性(如kobik的注释所示)
按照惯例猜测(Abelisto's answer

10-08 15:53