[英]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.