我正在使用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)