type aa=record a1:string; a2: array of array of string; end; procedure TForm1.Button1Click(Sender: TObject); var a:aa; begin setLength(a.a2,1); SetLength(a.a2[0],10); a.a1 :='hello'; a.a2[0,0]:='a2'; end;
//直接调用runquery就可以啦,注意COLUMNS为字段数 type TResults = Array of Array of ShortString;function RunQuery(SqlStr: String;Columns:Integer;var ResultArr: TResults): Boolean; begin with F_DataModule.Qry_Public do begin Close; Sql.Clear; Sql.Add(SqlStr); Prepare; Open; if RecordCount = 0 then begin Result := False; ResultArr := nil; Close; Exit; end; ResultArr := DataSetToArr(F_DataModule.DS_Public.DataSet,Columns,-1000); Result := True; end; end; function DataSetToArr(CDataSet: TDataSet;Columns,RecordNum: Integer): TResults; var Arr: TResults; i,j,k: Integer; begin if RecordNum = -1000 then k := CDataSet.RecordCount else k := RecordNum; SetLength(Arr,k); For i := 0 to k -1 do begin SetLength(Arr[i],Columns); end; With CDataSet do begin First; i := 0; While Not Eof do begin For j := 0 to Columns -1 do Arr[i,j] := Fields[j].AsString; i := i + 1; Next; end; end; Result := Arr; end;
aa=record
a1:string;
a2: array of array of string;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
a:aa;
begin
setLength(a.a2,1);
SetLength(a.a2[0],10);
a.a1 :='hello';
a.a2[0,0]:='a2';
end;
type
TResults = Array of Array of ShortString;function RunQuery(SqlStr: String;Columns:Integer;var ResultArr: TResults): Boolean;
begin
with F_DataModule.Qry_Public do
begin
Close;
Sql.Clear;
Sql.Add(SqlStr);
Prepare;
Open;
if RecordCount = 0 then
begin
Result := False;
ResultArr := nil;
Close;
Exit;
end;
ResultArr := DataSetToArr(F_DataModule.DS_Public.DataSet,Columns,-1000);
Result := True;
end;
end;
function DataSetToArr(CDataSet: TDataSet;Columns,RecordNum: Integer): TResults;
var
Arr: TResults;
i,j,k: Integer;
begin
if RecordNum = -1000 then
k := CDataSet.RecordCount
else
k := RecordNum;
SetLength(Arr,k);
For i := 0 to k -1 do
begin
SetLength(Arr[i],Columns);
end;
With CDataSet do
begin
First;
i := 0;
While Not Eof do
begin
For j := 0 to Columns -1 do
Arr[i,j] := Fields[j].AsString;
i := i + 1;
Next;
end;
end;
Result := Arr;
end;