Delphi 从TADOQuery返回TList
我希望创建一个函数,该函数使用TADOQuery,我可以向它传递select语句,它将从数据库中获取结果,并将结果作为TList返回Delphi 从TADOQuery返回TList,delphi,delphi-xe6,Delphi,Delphi Xe6,我希望创建一个函数,该函数使用TADOQuery,我可以向它传递select语句,它将从数据库中获取结果,并将结果作为TList返回 function GetList(SelectStatement : string) : TList; var ResultList : TList; Begin with ADOQuery do Begin close; SQL.Clear; SQL.Add(SelectStatement); op
function GetList(SelectStatement : string) : TList;
var
ResultList : TList;
Begin
with ADOQuery do
Begin
close;
SQL.Clear;
SQL.Add(SelectStatement);
open;
//This is where am not sure
//Get the results and populate the ResultList
End;
Result := ResultList;
End;
请注意,该函数是泛型函数,因此不能“硬编码”结果列表
以上是可以实现的吗?您可以使用变量数组来存储一行的字段,并使用这些“行数组”的通用列表来保存这些字段
uses Generics.Collections;
{$R *.dfm}
Type
TVarArray = Array of Variant;
TVarList = TList<TVarArray>;
Function GetAds2List(Ads:TAdoDataset):TVarList;
Function GetRow:TVarArray;
var
i: Integer;
begin
SetLength(Result, ADS.FieldCount);
for i := 0 to ADS.FieldCount - 1 do
begin
Result[i] := ADS.Fields[i].Value;
end;
end;
begin
Result := TVarList.Create;
Ads.First;
While not ADS.Eof do
begin
Result.Add(GetRow);
Ads.Next;
end;
end;
TList是指针的集合,您的预期结果是什么,或者您的意图是什么?至少您应该告诉我们列表中需要哪个字段。@Jens Borrisholt-该函数应该是泛型函数,以便返回的字段取决于提供的Select语句。字段类型是什么?例如,假设有一个字符串和两个整数。这些应该如何包装?列表需要包含一些内容。@bummi-我的目的是使用一个函数将数据集(TADOQuery)结果转换为列表。该函数将是一个实用函数,因此它不应绑定到特定的表。
procedure TForm3.Button1Click(Sender: TObject);
var
l:TVarList;
I,J: Integer;
s:String;
Function sep(idx:Integer):String;
begin
if idx=0 then
Result := ''
else
Result := ' , ';
end;
begin
ReportMemoryLeaksOnShutDown := true;
l := GetAds2List(Ads1);
for I := 0 to l.Count - 1 do
begin
s := '';
for j := 0 to High(l[i]) do
begin
s := s + sep(j) + VarToStrDef(l[i][j],'*NULL*');
end;
memo1.lines.add(s);
end;
l.Free;
end;